services:
nextcloud:
image: nextcloud
container_name: nextcloud
restart: unless-stopped
networks:
- cloud
- nginx
depends_on:
- nextclouddb
- redis
ports:
- 9090:80 # use whatever port you have free on the left of the colon
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York # edit to your timezone
- NEXTCLOUD_DATA_DIR=/mnt/ncdata # NOTE!! I move the data directory out of /var/www/html so that it can be its own dataset in TrueNAS
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=password1 # change this. Must match password1 below when changed
- MYSQL_HOST=nextclouddb
- REDIS_HOST=redis
volumes:
- type: volume
source: html
target: /var/www/html
volume:
nocopy: true
- type: volume
source: data
target: /mnt/ncdata
volume:
nocopy: true
nextclouddb:
image: mariadb:11.4
container_name: nextcloud-db
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
networks:
- cloud
volumes:
- type: volume
source: database
target: /var/lib/mysql
volume:
nocopy: true
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York # change to match your timezone
- MYSQL_ROOT_PASSWORD=password2 # change this, must match password2 below
- MYSQL_PASSWORD=password1 # change this, must match password1 above
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
collabora:
image: collabora/code
container_name: collabora
restart: unless-stopped
networks:
- cloud
- nginx
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- password=password3 # change this
- username=nextcloud
- domain=collabora.yourdomain.com # change to match your domain
- extra_params=--o:ssl.enable=true
ports:
- 9980:9980 # use whatever ports you have open that don't conflict
redis:
image: redis:alpine
container_name: redis
restart: unless-stopped
volumes:
- type: volume
source: redis
target: /data
volume:
nocopy: true
networks:
- cloud
nginx-proxy:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
networks:
- nginx
volumes:
- type: volume
source: nginx
target: /data
volume:
nocopy: true
- type: volume
source: letsencrypt
target: /etc/letsencrypt
volume:
nocopy: true
networks:
cloud:
name: cloud # This network should not be reused
driver: bridge
nginx:
name: nginx # this network can be re-used in future deployments that might use Nginx proxy manager
driver: bridge
volumes: # change these file paths to match your NFS shares
html:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/html"
data:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/data"
database:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/database"
redis:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/redis"
nginx:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/nginx"
letsencrypt:
driver_opts:
type: "nfs"
o: "vers=4,addr=192.168.50.3,nolock,soft,rw"
device: ":/mnt/slow_pool/nextcloud/letsencrypt"