Skip to content

Instantly share code, notes, and snippets.

@EcurbNosneb
Created April 20, 2025 21:32
Show Gist options
  • Save EcurbNosneb/d280fff185df0631aab7875e89b6e678 to your computer and use it in GitHub Desktop.
Save EcurbNosneb/d280fff185df0631aab7875e89b6e678 to your computer and use it in GitHub Desktop.
Nextcloud docker-compose.yml no internet access needed.
version: '3'
# Put these in a .env file in the same directory as docker-compose.yml
x-environment: &env
NEXTCLOUD_ADMIN_USER: <YOUR_ADMIN_USER>
NEXTCLOUD_ADMIN_PASSWORD: <YOUR_ADMIN_PASSWORD>
MYSQL_ROOT_PASSWORD: <YOUR_MYSQL_ROOT_PASSWORD>
MYSQL_PASSWORD: <YOUR_MYSQL_PASSWORD>
COLLABORA_ADMIN_USER: <YOUR_COLLABORA_USER>
COLLABORA_ADMIN_PASSWORD: <YOUR_COLLABORA_PASSWORD>
LOCAL_NETWORK: <YOUR_NETWORK_CIDR> # e.g., 192.168.1.0/24
services:
db:
image: mariadb:10.6
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
volumes:
- ./data/db:/var/lib/mysql
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
networks:
- nextcloud_net
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:alpine
restart: unless-stopped
networks:
- nextcloud_net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
nextcloud:
build: .
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "8080:80"
volumes:
- ./data/nextcloud:/var/www/html
- ./data/apps:/var/www/html/custom_apps
- ./data/config:/var/www/html/config
- ./data/data:/var/www/html/data
environment:
- TZ=America/Chicago
- MYSQL_HOST=db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- REDIS_HOST=redis
- TRUSTED_PROXIES=${LOCAL_NETWORK}
- OVERWRITEPROTOCOL=http
- PHP_MEMORY_LIMIT=512M
- PHP_UPLOAD_LIMIT=10G
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
- NEXTCLOUD_TRUSTED_DOMAINS=<YOUR_NEXTCLOUD_DOMAIN> # e.g., nextcloud.example.com
- TRUSTED_PROXIES=<YOUR_PROXY_IP> # e.g., 192.168.1.1
networks:
- nextcloud_net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/status.php"]
interval: 30s
timeout: 10s
retries: 5
collabora:
image: collabora/code
restart: unless-stopped
ports:
- "9980:9980"
environment:
- extra_params=--o:ssl.enable=false --o:ssl.termination=false --o:net.post_allow.host[0]=<YOUR_PROXY_IP> --o:net.frame_ancestors=<YOUR_PROXY_IP> --o:storage.wopi.host[0]=<YOUR_NEXTCLOUD_DOMAIN>:8080
- username=${COLLABORA_ADMIN_USER}
- password=${COLLABORA_ADMIN_PASSWORD}
- server_name=<YOUR_PROXY_IP>:9980
cap_add:
- MKNOD
depends_on:
- nextcloud
cron:
image: nextcloud:apache
restart: unless-stopped
volumes:
- ./data/nextcloud:/var/www/html
- ./data/apps:/var/www/html/custom_apps
- ./data/config:/var/www/html/config
- ./data/data:/var/www/html/data
command: bash -c "while true; do php -f /var/www/html/cron.php; sleep 300; done"
entrypoint: /cron.sh
depends_on:
- db
- redis
networks:
- nextcloud_net
environment:
- TZ=America/Chicago
- MYSQL_HOST=db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
- NEXTCLOUD_TRUSTED_DOMAINS=<YOUR_NEXTCLOUD_DOMAIN>
- TRUSTED_PROXIES=<YOUR_PROXY_IP>
networks:
nextcloud_net:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: "4500"
volumes:
nextcloud:
db:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment