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