Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************************
- * Directory structure
- *********************************************************************/
- ~/containers
- - service
- - traefik.yaml
- - config.yaml
- - acme.json
- - docker-compose.yaml
- - cloud (for nextcloud)
- - docker-compose.yaml
- - media (for jellyfin and other media containers)
- - docker-compose.yaml
- - dev (for gitea and jenkins)
- - docker-compose.yaml
- /********************************************************************
- * traefik.yaml
- *********************************************************************/
- api:
- dashboard: true
- debug: true
- log:
- level: PANIC
- accessLog:
- filePath: "/access.log"
- bufferingSize: 100
- entryPoints:
- http:
- address: ":80"
- https:
- address: ":443"
- providers:
- docker:
- endpoint: "unix:///var/run/docker.sock"
- exposedByDefault: false
- file:
- filename: "/config.yaml"
- watch: true
- certificatesResolvers:
- http:
- acme:
- email: "admin@DOMAIN"
- storage: "/acme.json"
- httpChallenge:
- entryPoint: http
- /********************************************************************
- * config.yaml
- *********************************************************************/
- http:
- middlewares:
- https-redirect:
- redirectScheme:
- scheme: https
- default-headers:
- headers:
- frameDeny: true
- sslRedirect: true
- browserXssFilter: true
- contentTypeNosniff: true
- stsSeconds: 63072000
- forceSTSHeader: true
- stsIncludeSubdomains: true
- stsPreload: true
- local-only:
- ipWhiteList:
- sourceRange:
- - "192.168.0.0/16"
- - "172.16.0.0/12"
- - "10.0.0.0/8"
- secure:
- chain:
- middlewares:
- - https-redirect
- - default-headers
- private:
- chain:
- middlewares:
- - https-redirect
- - default-headers
- - local-only
- tls:
- options:
- default:
- minVersion: VersionTLS12
- sniStrict: true
- curvePreferences:
- - "CurveP521"
- - "CurveP384"
- cipherSuites:
- - "TLS_AES_256_GCM_SHA384"
- - "TLS_CHACHA20_POLY1305_SHA256"
- #- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
- #- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
- - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- /********************************************************************
- * service/docker-compose.yaml
- *********************************************************************/
- version: '3'
- # service containers
- services:
- watchtower:
- image: containrrr/watchtower:latest
- restart: always
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock:ro
- traefik:
- image: traefik:latest
- restart: always
- security_opt:
- - no-new-privileges:true
- networks:
- - default
- - dev
- - cloud
- - media
- ports:
- - 80:80
- - 443:443
- environment:
- - TZ=America/New_York
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - /var/run/docker.sock:/var/run/docker.sock:ro
- - ./traefik.yaml:/traefik.yaml:ro
- - ./config.yaml:/config.yaml:ro
- - ./access.log:/access.log
- - ./acme.json:/acme.json
- labels:
- - "traefik.enable=true"
- - "traefik.http.routers.traefik.entrypoints=http"
- - "traefik.http.routers.traefik.rule=Host(`traefik.DOMAIN`)"
- - "traefik.http.routers.traefik-secure.rule=Host(`traefik.DOMAIN`)"
- - "traefik.http.routers.traefik-secure.middlewares=private@file"
- - "traefik.http.routers.traefik-secure.tls=true"
- - "traefik.http.routers.traefik-secure.tls.certresolver=http"
- #- "traefik.http.routers.traefik-secure.tls.options=default@file"
- - "traefik.http.routers.traefik-secure.service=api@internal"
- subspace:
- image: subspacecloud/subspace:latest
- restart: always
- sysctls:
- - net.ipv6.conf.all.disable_ipv6=0
- cap_add:
- - NET_ADMIN
- volumes:
- - /usr/bin/wg:/usr/bin/wg:ro
- - /tank/container_data/subspace:/data
- environment:
- - TZ=America/New_York
- - SUBSPACE_HTTP_HOST=subspace.DOMAIN
- - SUBSPACE_HTTP_INSECURE=true
- - SUBSPACE_LETSENCRYPT=false
- expose:
- - 80
- ports:
- - 51820:51820/udp
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.subspace.loadbalancer.server.port=80"
- - "traefik.http.routers.subspace.entrypoints=http"
- - "traefik.http.routers.subspace.rule=Host(`subspace.DOMAIN`)"
- - "traefik.http.routers.subspace-secure.rule=Host(`subspace.DOMAIN`)"
- - "traefik.http.routers.subspace-secure.middlewares=private@file"
- - "traefik.http.routers.subspace-secure.tls=true"
- - "traefik.http.routers.subspace-secure.tls.certresolver=http"
- nfs:
- image: itsthenetwork/nfs-server-alpine:latest
- restart: always
- privileged: true
- volumes:
- - /tank/nfs:/nfs
- environment:
- - SHARED_DIRECTORY=/nfs
- ports:
- - 2049:2049
- # external networks
- networks:
- cloud:
- external:
- name: cloud_default
- media:
- external:
- name: media_default
- dev:
- external:
- name: dev_default
- /********************************************************************
- * media/docker-compose.yaml
- *********************************************************************/
- version: '3'
- # media containers
- services:
- jellyfin:
- image: jellyfin/jellyfin:latest
- restart: always
- environment:
- - UID=33
- - GID=33
- - TZ=America/New_York
- devices:
- - /dev/dri
- volumes:
- - /tank/container_data/jellyfin_config:/config
- - /tank/container_data/jellyfin_cache:/cache
- - /tank/cloud/videos/:/media/video
- - /tank/cloud/music:/media/music
- expose:
- - 8096
- ports:
- - 1900:1900/udp
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
- - "traefik.http.routers.jellyfin.entrypoints=http"
- - "traefik.http.routers.jellyfin.rule=Host(`jellyfin.DOMAIN`)"
- - "traefik.http.routers.jellyfin-secure.rule=Host(`jellyfin.DOMAIN`)"
- - "traefik.http.routers.jellyfin-secure.middlewares=secure@file"
- - "traefik.http.routers.jellyfin-secure.tls=true"
- - "traefik.http.routers.jellyfin-secure.tls.certresolver=http"
- deluge:
- image: linuxserver/deluge:latest
- restart: always
- environment:
- - PUID=33
- - PGID=33
- - UMASK_SET=022
- - TZ=America/New_York
- volumes:
- - /tank/container_data/deluged:/config
- - /tank/downloads:/downloads
- expose:
- - 8112
- ports:
- - 65525-65535:65525-65535
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.deluge.loadbalancer.server.port=8112"
- - "traefik.http.routers.deluge.entrypoints=http"
- - "traefik.http.routers.deluge.rule=Host(`deluge.DOMAIN`)"
- - "traefik.http.routers.deluge-secure.rule=Host(`deluge.DOMAIN`)"
- - "traefik.http.routers.deluge-secure.middlewares=private@file"
- - "traefik.http.routers.deluge-secure.tls=true"
- - "traefik.http.routers.deluge-secure.tls.certresolver=http"
- jackett:
- image: linuxserver/jackett:latest
- restart: always
- environment:
- - PUID=33
- - PGID=33
- - TZ=America/New_York
- volumes:
- - /tank/container_data/jackett:/config
- - /tank/downloads:/downloads
- expose:
- - 9117
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.jackett.loadbalancer.server.port=9117"
- - "traefik.http.routers.jackett.entrypoints=http"
- - "traefik.http.routers.jackett.rule=Host(`jackett.DOMAIN`)"
- - "traefik.http.routers.jackett-secure.rule=Host(`jackett.DOMAIN`)"
- - "traefik.http.routers.jackett-secure.middlewares=private@file"
- - "traefik.http.routers.jackett-secure.tls=true"
- - "traefik.http.routers.jackett-secure.tls.certresolver=http"
- sonarr:
- image: linuxserver/sonarr:preview
- restart: always
- environment:
- - PUID=33
- - PGID=33
- - TZ=America/New_York
- volumes:
- - /tank/container_data/sonarr:/config
- - /tank/cloud/videos/TV:/tv
- - /tank/downloads:/downloads
- expose:
- - 8989
- depends_on:
- - deluge
- - jackett
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.sonarr.loadbalancer.server.port=8989"
- - "traefik.http.routers.sonarr.entrypoints=http"
- - "traefik.http.routers.sonarr.rule=Host(`sonarr.DOMAIN`)"
- - "traefik.http.routers.sonarr-secure.rule=Host(`sonarr.DOMAIN`)"
- - "traefik.http.routers.sonarr-secure.middlewares=private@file"
- - "traefik.http.routers.sonarr-secure.tls=true"
- - "traefik.http.routers.sonarr-secure.tls.certresolver=http"
- radarr:
- image: linuxserver/radarr:preview
- restart: always
- environment:
- - PUID=33
- - PGID=33
- - TZ=America/New_York
- volumes:
- - /tank/container_data/radarr:/config
- - /tank/cloud/videos/Movies:/movies
- - /tank/downloads:/downloads
- expose:
- - 7878
- depends_on:
- - deluge
- - jackett
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.radarr.loadbalancer.server.port=7878"
- - "traefik.http.routers.radarr.entrypoints=http"
- - "traefik.http.routers.radarr.rule=Host(`radarr.DOMAIN`)"
- - "traefik.http.routers.radarr-secure.rule=Host(`radarr.DOMAIN`)"
- - "traefik.http.routers.radarr-secure.middlewares=private@file"
- - "traefik.http.routers.radarr-secure.tls=true"
- - "traefik.http.routers.radarr-secure.tls.certresolver=http"
- lidarr:
- image: linuxserver/lidarr:latest
- restart: always
- environment:
- - PUID=33
- - PGID=33
- - TZ=America/New_York
- volumes:
- - /tank/container_data/lidarr:/config
- - /tank/cloud/music:/music
- - /tank/downloads:/downloads
- expose:
- - 8686
- depends_on:
- - deluge
- - jackett
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.lidarr.loadbalancer.server.port=8686"
- - "traefik.http.routers.lidarr.entrypoints=http"
- - "traefik.http.routers.lidarr.rule=Host(`lidarr.DOMAIN`)"
- - "traefik.http.routers.lidarr-secure.rule=Host(`lidarr.DOMAIN`)"
- - "traefik.http.routers.lidarr-secure.middlewares=private@file"
- - "traefik.http.routers.lidarr-secure.tls=true"
- - "traefik.http.routers.lidarr-secure.tls.certresolver=http"
- /********************************************************************
- * cloud/docker-compose.yaml
- *********************************************************************/
- version: '3'
- # nextcloud containers
- services:
- nextav:
- image: tiredofit/clamav:latest
- restart: always
- nextdb:
- image: mariadb:latest
- restart: always
- command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
- volumes:
- - /tank/container_data/nextcloud_db:/var/lib/mysql
- env_file:
- - db.env
- nextredis:
- image: redis:latest
- restart: always
- nextcron:
- image: nextcloud:production
- restart: always
- volumes:
- - /tank/container_data/nextcloud_app:/var/www/html
- - /tank/cloud/nextcloud/data:/var/www/html/data
- entrypoint: /cron.sh
- depends_on:
- - nextdb
- - nextredis
- nextapp:
- image: nextcloud:production
- restart: always
- volumes:
- - /tank/container_data/nextcloud_app:/var/www/html
- - /tank/cloud/nextcloud/data:/var/www/html/data
- - /tank/cloud/videos:/videos
- - /tank/cloud/music:/music
- - /tank/cloud/books:/books
- - /tank/downloads/:/downloads
- environment:
- - PUID=33
- - PGID=33
- - MYSQL_HOST=nextdb
- - REDIS_HOST=nextredis
- - NEXTCLOUD_TABLE_PREFIX='oc_'
- env_file:
- - db.env
- depends_on:
- - nextdb
- - nextredis
- - nextav
- expose:
- - 80
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.nextapp.loadbalancer.server.port=80"
- - "traefik.http.routers.nextapp.entrypoints=http"
- - "traefik.http.routers.nextapp.rule=Host(`nextcloud.DOMAIN`)"
- - "traefik.http.routers.nextapp-secure.rule=Host(`nextcloud.DOMAIN`)"
- - "traefik.http.routers.nextapp-secure.tls=true"
- - "traefik.http.routers.nextapp-secure.tls.certresolver=http"
- - "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
- - "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/"
- - "traefik.http.middlewares.nc-rep.redirectregex.permanent=true"
- - "traefik.http.routers.nextapp-secure.middlewares=nc-rep,secure@file"
- /********************************************************************
- * dev/docker-compose.yaml
- *********************************************************************/
- version: '3'
- # dev containers
- services:
- gitdb:
- image: mariadb:latest
- restart: always
- volumes:
- - /tank/container_data/gitdb:/var/lib/mysql
- environment:
- - TZ=America/New_York
- - MYSQL_ROOT_PASSWORD=root
- - MYSQL_DATABASE=gitea
- - MYSQL_USER=gitea
- - MYSQL_PASSWORD=gitea
- gitapp:
- image: gitea/gitea:latest
- restart: always
- volumes:
- - /tank/container_data/gitea:/data
- environment:
- - TZ=America/New_York
- expose:
- - 3000
- depends_on:
- - gitdb
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.gitapp.loadbalancer.server.port=3000"
- - "traefik.http.routers.gitapp.entrypoints=http"
- - "traefik.http.routers.gitapp.rule=Host(`git.DOMAIN`)"
- - "traefik.http.routers.gitapp-secure.rule=Host(`git.DOMAIN`)"
- - "traefik.http.routers.gitapp.middlewares=secure@file"
- - "traefik.http.routers.gitapp-secure.tls=true"
- - "traefik.http.routers.gitapp-secure.tls.certresolver=http"
- jenkins:
- image: jenkins/jenkins:lts
- restart: always
- volumes:
- - /tank/container_data/jenkins:/var/jenkins_home
- environment:
- - TZ=America/New_York
- expose:
- - 8080
- - 50000
- labels:
- - "traefik.enable=true"
- - "traefik.http.services.jenkins.loadbalancer.server.port=8080"
- - "traefik.http.routers.jenkins.entrypoints=http"
- - "traefik.http.routers.jenkins.rule=Host(`jenkins.DOMAIN`)"
- - "traefik.http.routers.jenkins-secure.rule=Host(`jenkins.DOMAIN`)"
- - "traefik.http.routers.jenkins-secure.middlewares=secure@file"
- - "traefik.http.routers.jenkins-secure.tls=true"
- - "traefik.http.routers.jenkins-secure.tls.certresolver=http"
Advertisement
Add Comment
Please, Sign In to add comment