Skip to content

Instantly share code, notes, and snippets.

@karlbaillie
Last active October 7, 2022 15:18
Show Gist options
  • Save karlbaillie/9300da1571de6a80c15dd09800c933c9 to your computer and use it in GitHub Desktop.
Save karlbaillie/9300da1571de6a80c15dd09800c933c9 to your computer and use it in GitHub Desktop.
Self-Hosted Stack w/Traeik Front End
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=~
- SYMFONY__ENV__FROM_EMAIL=wallabag@example.com
- 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
@Polyterative
Copy link

where is this running on? VPS?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment