|
|
@@ -0,0 +1,176 @@
|
|
|
+version: "3.9"
|
|
|
+
|
|
|
+volumes:
|
|
|
+ traefik:
|
|
|
+ nextcloud:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.254,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: ":/mnt/documents/files/cloud"
|
|
|
+ db:
|
|
|
+
|
|
|
+ plex_config:
|
|
|
+ plex_transcode:
|
|
|
+
|
|
|
+ media_movies:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.200,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: ":/mnt/media/Movies"
|
|
|
+
|
|
|
+ media_movies_archive:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.200,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: ":/mnt/media/Movie Archive"
|
|
|
+
|
|
|
+ media_music:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.200,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: "::/mnt/media/Music"
|
|
|
+
|
|
|
+ media_music_backup:
|
|
|
+
|
|
|
+
|
|
|
+ media_movies_kids:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.200,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: ":/mnt/media/Kids Movies"
|
|
|
+
|
|
|
+ media_tv:
|
|
|
+ driver: local
|
|
|
+ driver_opts:
|
|
|
+ type: nfs
|
|
|
+ o: addr=10.10.20.200,nfsvers=4,nolock,soft,async,rw
|
|
|
+ device: ":/mnt/media/TV"
|
|
|
+
|
|
|
+
|
|
|
+services:
|
|
|
+ reverse-proxy:
|
|
|
+ restart: always
|
|
|
+ # The official v2 Traefik docker image
|
|
|
+ image: traefik:v2.7
|
|
|
+ # Enables the web UI and tells Traefik to listen to docker //--api.insecure=true
|
|
|
+ command:
|
|
|
+ - "--api=true"
|
|
|
+ - "--api.dashboard=true"
|
|
|
+ - "--accesslog"
|
|
|
+ - "--log.level=DEBUG"
|
|
|
+ - "--providers.docker"
|
|
|
+ - "--providers.docker.endpoint=unix:///var/run/docker.sock"
|
|
|
+ - "--providers.docker.swarmMode=true"
|
|
|
+ - "--entrypoints.web.address=:80"
|
|
|
+ - "--entrypoints.websecure.address=:443"
|
|
|
+ - "--certificatesresolvers.letsencrypt.acme.email=jason@jasonplayne.com"
|
|
|
+ - "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme.json"
|
|
|
+ - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
|
|
+ - "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
|
|
|
+
|
|
|
+ ports:
|
|
|
+ # The HTTP port
|
|
|
+ - "80:80"
|
|
|
+ - "443:443"
|
|
|
+ volumes:
|
|
|
+ # So that Traefik can listen to the Docker events
|
|
|
+ - /var/run/docker.sock:/var/run/docker.sock
|
|
|
+ - traefik:/etc/traefik
|
|
|
+ deploy:
|
|
|
+ mode: replicated
|
|
|
+ replicas: 1
|
|
|
+ endpoint_mode: vip
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.dashboard.rule=Host(`10.10.20.197`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
|
|
|
+ - "traefik.http.routers.dashboard.service=api@internal"
|
|
|
+ - "traefik.http.routers.dashboard.entrypoints=web"
|
|
|
+# - "traefik.http.routers.dashboard.middlewares=local-ips@docker"
|
|
|
+# - "traefik.http.middlewares.local-ips.ipwhitelist.sourcerange=10.0.0.0/8"
|
|
|
+ # Dummy service for Swarm port detection. The port can be any valid integer value.
|
|
|
+ - "traefik.http.services.dashboard-svc.loadbalancer.server.port=9999"
|
|
|
+
|
|
|
+ placement:
|
|
|
+ constraints:
|
|
|
+ - node.role == manager
|
|
|
+ resources:
|
|
|
+ limits:
|
|
|
+ memory: 1G
|
|
|
+
|
|
|
+ postgres:
|
|
|
+ image: postgres
|
|
|
+ restart: always
|
|
|
+ environment:
|
|
|
+ POSTGRES_USER: nextcloud
|
|
|
+ POSTGRES_PASSWORD: disgrace-quickstep-fleshy
|
|
|
+ volumes:
|
|
|
+ - db:/var/lib/postgresql/data
|
|
|
+ ports:
|
|
|
+ - "5432"
|
|
|
+ deploy:
|
|
|
+ labels:
|
|
|
+ - traefik.enable=false
|
|
|
+ mode: replicated
|
|
|
+ replicas: 1
|
|
|
+ resources:
|
|
|
+ limits:
|
|
|
+ memory: 2G
|
|
|
+
|
|
|
+ nextcloud:
|
|
|
+ image: nextcloud:stable-apache
|
|
|
+ restart: always
|
|
|
+ ports:
|
|
|
+ - "80"
|
|
|
+ labels:
|
|
|
+ - traefik.http.routers.nextcloud.rule=Host(`cloud.playne.au`)
|
|
|
+ volumes:
|
|
|
+ - "nextcloud:/var/www/html/data"
|
|
|
+ deploy:
|
|
|
+ mode: replicated
|
|
|
+ replicas: 1
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.nextcloud.rule=Host(`cloud.playne.au`)"
|
|
|
+ - "traefik.http.routers.nextcloud.tls=true"
|
|
|
+ - "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
|
|
|
+ - "traefik.http.routers.nextcloud.entrypoints=websecure"
|
|
|
+ - "traefik.http.services.nextcloud.loadbalancer.server.port=80"
|
|
|
+ resources:
|
|
|
+ limits:
|
|
|
+ memory: 2G
|
|
|
+
|
|
|
+
|
|
|
+ plex:
|
|
|
+ image: linuxserver/plex
|
|
|
+ restart: unless-stopped
|
|
|
+ ports:
|
|
|
+ - "32400:32400"
|
|
|
+ volumes:
|
|
|
+ - /etc/timezone:/etc/timezone:ro
|
|
|
+ - /etc/localtime:/etc/localtime:ro
|
|
|
+ - plex_config:/config
|
|
|
+ - media_tv:/data/tv
|
|
|
+ - media_movies:/data/movies
|
|
|
+ - media_movies_archive:/data/movies-archive
|
|
|
+ - media_movies_kids:/data/movies-kids
|
|
|
+ - plex_transcode:/transcode
|
|
|
+ environment:
|
|
|
+ - PUID=1001
|
|
|
+ - PGID=1001
|
|
|
+ - VERSION=latest
|
|
|
+ deploy:
|
|
|
+ mode: replicated
|
|
|
+ replicas: 1
|
|
|
+ labels:
|
|
|
+ - "traefik.enable=true"
|
|
|
+ - "traefik.http.routers.plex.rule=Host(`plex.playne.au`)"
|
|
|
+ - "traefik.http.routers.plex.entrypoints=web"
|
|
|
+ - "traefik.http.services.plex.loadbalancer.server.port=32400"
|
|
|
+ resources:
|
|
|
+ limits:
|
|
|
+ memory: 2G
|