Skip to content

Instantly share code, notes, and snippets.

@robdaemon
Last active February 13, 2023 01:14
Show Gist options
  • Save robdaemon/a2bb485cad5221c2dd1e3abfde2204c0 to your computer and use it in GitHub Desktop.
Save robdaemon/a2bb485cad5221c2dd1e3abfde2204c0 to your computer and use it in GitHub Desktop.
NextCloud docker compose setup

I can't take credit for the systemd unit files, I found those examples ages ago. I've updated them to use the newer Docker Compose plugin.

Each file has its folder locations in a comment at the top. Place the various files in their locations, and then:

systemctl daemon-reload
systemctl enable docker-compose@swag
systemctl enable docker-compose@mediaserver
systemctl enable docker-compose@nextcloud
systemctl enable docker-compose-reload.timer
# this is /etc/systemd/system/docker-compose-reload.service
[Unit]
Description=Refresh images and update containers
[Service]
Type=oneshot
ExecStart=/bin/systemctl reload 'docker-compose@*.service'
# this is /etc/systemd/system/docker-compose-reload.timer
[Unit]
Description=Refresh images and update containers
Requires=docker-compose.service
After=docker-compose.service
[Timer]
OnCalendar=*:0/15
[Install]
WantedBy=timers.target
# this is /etc/systemd/system/docker-compose@.service
[Unit]
Description=%i service with docker compose
Requires=docker.service network-online.target
After=docker.service network-online.target
[Service]
Type=oneshot
RemainAfterExit=true
WorkingDirectory=/etc/docker/compose/%i
ExecStartPre=/usr/bin/docker compose pull --quiet --parallel
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
ExecReload=/usr/bin/docker compose pull --quiet --parallel
ExecReload=/usr/bin/docker compose up -d
[Install]
WantedBy=multi-user.target
---
# this is /etc/docker/compose/mediaserver/docker-compose.yml
services:
plex:
image: linuxserver/plex
container_name: plex
network_mode: host
environment:
- VERSION=docker
- PUID=1000
- PGID=1000
restart: unless-stopped
volumes:
- /nas/multimedia/Library:/config
- /nas/multimedia/Movies:/movies
- /nas/multimedia/Music:/music
- /nas/multimedia/TV:/tv
devices:
- /dev/dri:/dev/dri
nzbget:
image: lscr.io/linuxserver/nzbget:latest
container_name: nzbget
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- NZBGET_USER=nzbget
volumes:
- /nas/multimedia/nzbget:/config
- /nas/multimedia/Downloads:/downloads
ports:
- 6789:6789
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
volumes:
- /nas/multimedia/sonarr:/config
- /nas/multimedia/TV:/tv
- /nas/multimedia/Downloads:/downloads
ports:
- 8989:8989
restart: unless-stopped
---
# this is /etc/docker/compose/nextcloud/docker-compose.yml
version: "2.1"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
volumes:
- /nas/nextcloud/config:/config
- /nas/nextcloud/data:/data
restart: unless-stopped
networks:
- nginx
- nextcloud
depends_on:
- pgsql
pgsql:
image: postgres:14
restart: always
environment:
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- /nas/pgsql/data:/var/lib/postgresql/data/pgdata
networks:
- nextcloud
networks:
nginx:
external: true
nextcloud:
---
# this is /etc/docker/compose/swag/docker-compose.yml
version: "2.1"
services:
swag:
image: lscr.io/linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=America/Los_Angeles
- URL=example.org
- SUBDOMAINS=www,
- VALIDATION=http
- CERTPROVIDER=letsencrypt
- EMAIL=
- ONLY_SUBDOMAINS=false
- STAGING=false
volumes:
- /nas/homes/nginx/swag/config:/config
ports:
- 443:443
- 80:80 #optional
restart: unless-stopped
networks:
- nginx
networks:
nginx:
external: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment