Last active
October 7, 2022 15:18
-
-
Save karlbaillie/9300da1571de6a80c15dd09800c933c9 to your computer and use it in GitHub Desktop.
Self-Hosted Stack w/Traeik Front End
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| version: "2.4" | |
| networks: | |
| frontend: | |
| external: true | |
| backend: | |
| external: true | |
| vlan30: | |
| driver: macvlan | |
| driver_opts: | |
| parent: eno1.30 | |
| ipam: | |
| config: | |
| - subnet: 192.168.30.0/24 | |
| gateway: 192.168.30.1 | |
| ip_range: 192.168.30.32/27 | |
| services: | |
| traefik: | |
| image: traefik:v2.1 | |
| container_name: traefik | |
| command: | |
| # - "--log.level=DEBUG" # enable debugging | |
| - "--api.insecure=true" # allow http | |
| - "--providers.docker" # use docker as a provider of config (via labels) | |
| - "--providers.docker.network=frontend" # default network traefik will use to reach containers | |
| - "--providers.docker.exposedbydefault=false" # don't expose all containers by default | |
| - "--entrypoints.http.address=:80" # define http entrypoint | |
| - "--entrypoints.git-ssh.address=:2222" # define git entrypoint | |
| - "--entrypoints.influxdb.address=:8086" # define influxdb entrypoint | |
| - "--entrypoints.mqtt.address=:1883" # define mqtt entrypoint | |
| ports: | |
| - 80:80 # http | |
| - 1883:1883 # mqtt | |
| - 8080:8080 # traefik dash | |
| - 8086:8086 # influxdb | |
| - 3306:3306 # mysql | |
| - 2222:2222 # git-ssh | |
| networks: | |
| - frontend | |
| volumes: | |
| - /var/run/docker.sock:/var/run/docker.sock:ro | |
| transmission: | |
| image: linuxserver/transmission | |
| container_name: transmission | |
| environment: | |
| - PUID=60010 | |
| - PGID=60010 | |
| - TZ=Europe/London | |
| volumes: | |
| - /storage/data/transmission:/config | |
| - /storage/downloads:/downloads | |
| - /storage/watch:/watch | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.transmission.entrypoints=http" | |
| - "traefik.http.routers.transmission.rule=Host(`transmission.home.yourname.com`)" | |
| - "traefik.http.services.transmission.loadbalancer.server.port=9091" | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| restart: unless-stopped | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| sonarr: | |
| image: linuxserver/sonarr | |
| container_name: sonarr | |
| restart: unless-stopped | |
| environment: | |
| PGID: '60010' | |
| PUID: '60010' | |
| volumes: | |
| - /dev/rtc:/dev/rtc:ro | |
| - /storage/data/sonarr:/config | |
| - /storage/downloads:/downloads | |
| - /storage/media/tv:/tv | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.sonarr.entrypoints=http" | |
| - "traefik.http.routers.sonarr.rule=Host(`sonarr.home.yourname.com`)" | |
| - "traefik.http.services.sonarr.loadbalancer.server.port=8989" | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| lidarr: | |
| image: linuxserver/lidarr | |
| container_name: lidarr | |
| restart: unless-stopped | |
| environment: | |
| PGID: '60010' | |
| PUID: '60010' | |
| TZ: Europe/London | |
| volumes: | |
| - /dev/rtc:/dev/rtc:ro | |
| - /storage/data/lidarr:/config | |
| - /storage/downloads:/downloads | |
| - /storage/media/music:/music | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.lidarr.entrypoints=http" | |
| - "traefik.http.routers.lidarr.rule=Host(`lidarr.home.yourname.com`)" | |
| - "traefik.http.services.lidarr.loadbalancer.server.port=8686" | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| radarr: | |
| image: linuxserver/radarr | |
| container_name: radarr | |
| restart: unless-stopped | |
| environment: | |
| PGID: '60010' | |
| PUID: '60010' | |
| TZ: Europe/London | |
| volumes: | |
| - /dev/rtc:/dev/rtc:ro | |
| - /storage/data/radarr:/config | |
| - /storage/downloads:/downloads | |
| - /storage/media/movies:/movies | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.radarr.entrypoints=http" | |
| - "traefik.http.routers.radarr.rule=Host(`radarr.home.yourname.com`)" | |
| - "traefik.http.services.radarr.loadbalancer.server.port=7878" | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| jackett: | |
| image: linuxserver/jackett | |
| container_name: jackett | |
| restart: unless-stopped | |
| environment: | |
| PUID: '60010' | |
| PGID: '60010' | |
| TZ: Europe/London | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.jackett.entrypoints=http" | |
| - "traefik.http.routers.jackett.rule=Host(`jackett.home.yourname.com`)" | |
| - "traefik.http.services.jackett.loadbalancer.server.port=9117" | |
| volumes: | |
| - /storage/data/jackett:/config | |
| - /etc/localtime:/etc/localtime:ro | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| calibre-web: | |
| image: linuxserver/calibre-web | |
| container_name: calibre-web | |
| environment: | |
| PUID: '60010' | |
| PGID: '60010' | |
| TZ: Europe/London | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.calibre-web.entrypoints=http" | |
| - "traefik.http.routers.calibre-web.rule=Host(`calibre-web.home.yourname.com`)" | |
| - "traefik.http.services.calibre-web.loadbalancer.server.port=8083" | |
| volumes: | |
| - /storage/data/calibre-web:/config | |
| - /storage/media/books:/books | |
| restart: unless-stopped | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| lazylibrarian: | |
| image: linuxserver/lazylibrarian | |
| container_name: lazylibrarian | |
| environment: | |
| PUID: '60010' | |
| PGID: '60010' | |
| TZ: Europe/London | |
| DOCKER_MODS: linuxserver/calibre-web:calibre | |
| expose: | |
| - 5299 | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.lazylibrarian.entrypoints=http" | |
| - "traefik.http.routers.lazylibrarian.rule=Host(`lazylibrarian.home.yourname.com`)" | |
| - "traefik.http.services.lazylibrarian.loadbalancer.server.port=5299" | |
| volumes: | |
| - /storage/data/lazylibrarian:/config | |
| - /storage/downloads:/downloads | |
| - /storage/media/books:/books | |
| restart: unless-stopped | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| thelounge: | |
| image: linuxserver/thelounge | |
| container_name: thelounge | |
| restart: unless-stopped | |
| environment: | |
| PUID: '1009' | |
| PGID: '1009' | |
| TZ: Europe/London | |
| volumes: | |
| - /storage/data/thelounge:/config | |
| networks: | |
| vlan30: | |
| priority: 1000 | |
| dns: | |
| - 1.1.1.1 | |
| - 9.9.9.9 | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.thelounge.rule=Host(`thelounge.home.yourname.com`)" | |
| - "traefik.http.services.thelounge.loadbalancer.server.port=9000" | |
| - "traefik.http.routers.thelounge.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| plex: | |
| image: plexinc/pms-docker:latest | |
| container_name: plex | |
| restart: unless-stopped | |
| environment: | |
| VERSION: latest | |
| PLEX_UID: '60010' | |
| PLEX_GID: '60010' | |
| TZ: Europe/London | |
| ADVERTISE_IP: 'http://192.168.20.10:32400/' | |
| ALLOWED_NETWORKS: '192.168.20.0/24,192.168.60.0/24' | |
| hostname: plex.home.yourname.com | |
| ports: | |
| - 32400:32400/tcp | |
| - 32400:32400/udp | |
| - 32469:32469/tcp | |
| - 32469:32469/udp | |
| - 32410:32410/udp | |
| - 32412:32412/udp | |
| - 32413:32413/udp | |
| - 32414:32414/udp | |
| - 5353:5353/udp | |
| - 1900:1900/udp | |
| - 33400:33400/tcp | |
| - 33443:33443/tcp | |
| volumes: | |
| - /storage/media:/data | |
| - /storage/data/plex/config:/config | |
| - /storage/data/plex/transcode:/transcode | |
| restart: unless-stopped | |
| mysql: | |
| image: mysql:5.7 | |
| container_name: mysql | |
| restart: unless-stopped | |
| environment: | |
| MYSQL_ROOT_PASSWORD: dfgerxdrfbdrsgd | |
| networks: | |
| backend: | |
| priority: 1000 | |
| frontend: | |
| priority: 500 | |
| volumes: | |
| - /storage/data/mysql:/var/lib/mysql:rw | |
| influxdb: | |
| image: influxdb | |
| container_name: influxdb | |
| restart: unless-stopped | |
| networks: | |
| backend: | |
| priority: 1000 | |
| frontend: | |
| priority: 500 | |
| volumes: | |
| - /storage/data/influxdb:/var/lib/influxdb | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.tcp.routers.influxdb.rule=HostSNI(`*`)" | |
| - "traefik.tcp.routers.influxdb.entryPoints=influxdb" | |
| - "traefik.tcp.routers.influxdb.service=influxdb" | |
| - "traefik.tcp.services.influxdb.loadbalancer.server.port=8086" | |
| - "traefik.docker.network=frontend" | |
| phpmyadmin: | |
| image: phpmyadmin/phpmyadmin | |
| container_name: phpmyadmin | |
| restart: unless-stopped | |
| environment: | |
| PMA_HOST: 'mysql' | |
| PMA_USER: 'root' | |
| PMA_PASSWORD: 'dfgerxdrfbdrsgd' | |
| PMA_ABSOLUTE_URI: "http://phpmyadmin.home.yourname.com/" | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| backend: | |
| priority: 500 | |
| depends_on: | |
| - mysql | |
| expose: | |
| - 80 | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.home.yourname.com`)" | |
| - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80" | |
| - "traefik.http.routers.phpmyadmin.entrypoints=http" | |
| gitea: | |
| image: gitea/gitea:latest | |
| container_name: gitea | |
| environment: | |
| USER_UID: '60010' | |
| USER_GID: '60010' | |
| TZ: Europe/London | |
| DB_TYPE: 'mysql' | |
| DB_HOST: 'mysql:3306' | |
| DB_NAME: 'gittea' | |
| DB_PASSWD: '14wM478iiu6DJiI' | |
| ROOT_URL: '' | |
| SSH_PORT: '2222' | |
| SSH_DOMAIN: 'gitea.home.yourname.com' | |
| INSTALL_LOCK: 'false' | |
| DISABLE_REGISTRATION: 'false' | |
| REQUIRE_SIGNIN_VIEW: 'false' | |
| volumes: | |
| - /storage/data/gitea/data:/data | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| backend: | |
| priority: 500 | |
| restart: unless-stopped | |
| depends_on: | |
| - mysql | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.gitea-web.rule=Host(`gitea.home.yourname.com`)" | |
| - "traefik.http.routers.gitea-web.entrypoints=http" | |
| - "traefik.http.routers.gitea-web.service=gitea-web-svc" | |
| - "traefik.http.services.gitea-web-svc.loadbalancer.server.port=3000" | |
| - "traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)" | |
| - "traefik.tcp.routers.gitea-ssh.entrypoints=git-ssh" | |
| - "traefik.tcp.routers.gitea-ssh.service=gitea-ssh-svc" | |
| - "traefik.tcp.services.gitea-ssh-svc.loadbalancer.server.port=2222" | |
| - "traefik.docker.network=frontend" | |
| drone: | |
| image: drone/drone:1 | |
| container_name: drone | |
| restart: unless-stopped | |
| depends_on: | |
| - gitea | |
| expose: | |
| - 80 | |
| - 443 | |
| environment: | |
| - DRONE_GIT_ALWAYS_AUTH=false | |
| - DRONE_GITEA_SERVER=http://gitea.home.yourname.com/ | |
| - DRONE_SERVER_PROTO=http | |
| - DRONE_SERVER_HOST=drone.home.yourname.com | |
| - DRONE_TLS_AUTOCERT=false | |
| - DRONE_GITEA_CLIENT_ID=96799sdgsdfsdgsdfrgbvwebvw654faa094 | |
| - DRONE_GITEA_CLIENT_SECRET=bM1APdPZyCsefsefvsegsY12QqGLGAw7CzsEPg= | |
| - DRONE_RPC_SECRET=7e292ed577sdfgsrgwsegwsegwsegr | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| volumes: | |
| - /storage/data/drone:/data | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.drone.rule=Host(`drone.home.yourname.com`)" | |
| - "traefik.http.services.drone.loadbalancer.server.port=80" | |
| - "traefik.http.routers.drone.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| drone-runner-docker: | |
| image: drone/drone-runner-docker:1 | |
| container_name: drone-runner-docker | |
| restart: unless-stopped | |
| environment: | |
| - DRONE_RPC_PROTO=http | |
| - DRONE_RPC_HOST=drone | |
| - DRONE_RPC_SECRET=7e292ed577sdfgsrgwsegwsegwsegr | |
| - DRONE_RUNNER_CAPACITY=2 | |
| - DRONE_RUNNER_NAME=${HOSTNAME} | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| volumes: | |
| - /var/run/docker.sock:/var/run/docker.sock | |
| depends_on: | |
| - gitea | |
| - drone | |
| tt-rss: | |
| image: lunik1/tt-rss | |
| container_name: tt-rss | |
| restart: unless-stopped | |
| environment: | |
| PUID: '60010' | |
| PGID: '60010' | |
| TZ: Europe/London | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| backend: | |
| priority: 500 | |
| volumes: | |
| - /etc/localtime:/etc/localtime:ro | |
| - /storage/data/tt-rss:/config:rw | |
| depends_on: | |
| - mysql | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.tt-rss.rule=Host(`tt-rss.home.yourname.com`)" | |
| - "traefik.http.services.tt-rss.loadbalancer.server.port=80" | |
| - "traefik.http.routers.tt-rss.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| wallabag: | |
| image: wallabag/wallabag | |
| container_name: wallabag | |
| environment: | |
| - SYMFONY__ENV__MAILER_HOST=127.0.0.1 | |
| - SYMFONY__ENV__MAILER_USER=~ | |
| - SYMFONY__ENV__MAILER_PASSWORD=~ | |
| - [email protected] | |
| - SYMFONY__ENV__DOMAIN_NAME=http://wallabag.home.yourname.com/ | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| volumes: | |
| - /storage/data/wallabag:/var/www/wallabag/data | |
| - /storage/data/wallabag/_images:/var/www/wallabag/web/assets/images | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.wallabag.rule=Host(`wallabag.home.yourname.com`)" | |
| - "traefik.http.services.wallabag.loadbalancer.server.port=80" | |
| - "traefik.http.routers.wallabag.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| phpipam: | |
| image: pierrecdn/phpipam | |
| container_name: phpipam | |
| restart: unless-stopped | |
| environment: | |
| MYSQL_ENV_MYSQL_HOST: 'mysql' | |
| MYSQL_ENV_MYSQL_USER: 'phpipam' | |
| MYSQL_ENV_MYSQL_ROOT_PASSWORD: 'asfafaqwfdvzxc' | |
| MYSQL_ENV_MYSQL_DB: 'phpipam' | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| backend: | |
| priority: 500 | |
| depends_on: | |
| - mysql | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.phpipam.rule=Host(`phpipam.home.yourname.com`)" | |
| - "traefik.http.services.phpipam.loadbalancer.server.port=80" | |
| - "traefik.http.routers.phpipam.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| telegraf: | |
| image: telegraf | |
| container_name: telegraf | |
| network_mode: "service:influxdb" | |
| restart: unless-stopped | |
| environment: | |
| HOST_PROC: '/host/proc' | |
| volumes: | |
| - /proc:/host/proc:ro | |
| - /var/run/docker.sock:/var/run/docker.sock | |
| mqtt: | |
| image: ncarlier/mqtt | |
| container_name: mqtt | |
| restart: unless-stopped | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.tcp.routers.mqtt.rule=HostSNI(`*`)" | |
| - "traefik.tcp.routers.mqtt.entrypoints=mqtt" | |
| - "traefik.tcp.routers.mqtt.service=mqtt-svc" | |
| - "traefik.tcp.services.mqtt-svc.loadbalancer.server.port=1883" | |
| grafana: | |
| image: grafana/grafana | |
| container_name: grafana | |
| restart: unless-stopped | |
| depends_on: | |
| - influxdb | |
| networks: | |
| frontend: | |
| priority: 1000 | |
| labels: | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.grafana.rule=Host(`grafana.home.yourname.com`)" | |
| - "traefik.http.services.grafana.loadbalancer.server.port=3000" | |
| - "traefik.http.routers.grafana.entrypoints=http" | |
| - "traefik.docker.network=frontend" | |
| volumes: | |
| - /storage/data/grafana:/var/lib/grafana | |
| user: "60010" | |
| watchtower: | |
| image: containrrr/watchtower | |
| container_name: watchtower | |
| restart: unless-stopped | |
| volumes: | |
| - /var/run/docker.sock:/var/run/docker.sock:rw |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
where is this running on? VPS?