local & production dc + env example

This commit is contained in:
tijsg
2025-05-31 15:00:24 +02:00
parent c0d3d57130
commit 1d76cd8fbf
4 changed files with 315 additions and 73 deletions

9
.env.example Normal file
View File

@@ -0,0 +1,9 @@
ACME_EMAIL=
DUCKDNS_SUBDOMAINS=
DUCKDNS_TOKEN=
VPN_SERVICE_PROVIDER=
VPN_USER=
VPN_PASSWORD=
JELLYFIN_SUBDOMAIN=
MOUNTED_VOLUME=
TRANSMISSION_PASSWORD=

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

230
docker-compose.local.yml Normal file
View File

@@ -0,0 +1,230 @@
---
services:
############################
# RADARR
############################
# radarr:
# image: lscr.io/linuxserver/radarr:latest
# container_name: radarr
# network_mode: "service:gluetun"
# environment:
# - PUID=1000
# - PGID=1000
# - TZ=Etc/UTC
# volumes:
# - /mnt/.ix-apps/app_mounts/radarr/config:/config
# - /mnt/pool-main/media/movies:/movies #optional
# - /mnt/pool-main/media/downloads:/downloads #optional
# restart: unless-stopped
############################
# SONARR
############################
# sonarr:
# image: lscr.io/linuxserver/sonarr:latest
# container_name: sonarr
# network_mode: "service:gluetun"
# environment:
# - PUID=1000
# - PGID=1000
# - TZ=Etc/UTC
# volumes:
# - /mnt/.ix-apps/app_mounts/sonarr/config:/config
# - /mnt/pool-main/media/series:/tv #optional
# - /mnt/pool-main/media/downloads:/downloads #optional
# restart: unless-stopped
############################
# PROWLARR
############################
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
# network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- test-volume:/config
restart: unless-stopped
############################
# BAZARR
############################
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
# network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /mnt/.ix-apps/app_mounts/bazarr/config:/config
- test-volume:/movies #optional
- test-volume:/tv #optional
restart: unless-stopped
############################
# LIDARR
############################
lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
# network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- test-volume:/config
- test-volume:/music #optional
- test-volume:/downloads #optional
restart: unless-stopped
############################
# READARR
############################
readarr:
image: lscr.io/linuxserver/readarr:develop
container_name: readarr
# network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- test-volume:/config
- test-volume:/books #optional
- test-volume:/downloads #optional
restart: unless-stopped
############################
# QBITTORRENT
############################
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
# network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- USER=admin
- PASS=${TRANSMISSION_PASSWORD}
volumes:
- test-volume:/config
- test-volume:/downloads #optional
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
############################
# DUCKDNS
############################
duckdns:
image: linuxserver/duckdns:latest
container_name: duckdns
# network_mode: "service:gluetun" # Route through gluetun
# depends_on:
# - gluetun
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- SUBDOMAINS=${DUCKDNS_SUBDOMAINS} # Replace with your DuckDNS subdomain(s)
- TOKEN=${DUCKDNS_TOKEN} # Replace with your DuckDNS token
restart: unless-stopped
############################
# JELLYFIN
############################
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
# network_mode: "service:gluetun"
labels:
- "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(`${JELLYFIN_SUBDOMAIN}.duckdns.org`)"
- "traefik.http.routers.jellyfin.entrypoints=websecure"
- "traefik.http.routers.jellyfin.tls.certresolver=myresolver"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
ports:
- "8096:8096"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- test-volume:/config
- test-volume:/data/series
- test-volume:/data/movies
restart: unless-stopped
traefik:
image: traefik:v2.10
container_name: traefik
command:
- "--api.insecure=true" # Optional: Enable Traefik dashboard
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=duckdns"
- "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- test-volume:/letsencrypt
- test-volume:/config
environment:
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token
restart: unless-stopped
############################
# GLUETUN
############################
# gluetun:
# image: qmcgaw/gluetun
# container_name: gluetun
# ports:
# - 10000:9091 #transmission
# - 11000:8096 #jellyfin
# # - 9696:9696 #prowlarr
# # - 7878:7878 #radarr
# # - 8989:8989 #sonarr
# # - 6767:6767 #bazarr
# # - 8686:8686 #lidarr
# # - 8787:8787 #readarr
# - 13000:12000 #qbittorrent
# # - 6881:6881 #qbittorrent
# # - 6881:6881/udp #qbittorrent
# cap_add:
# - NET_ADMIN
# devices:
# - /dev/net/tun:/dev/net/tun
# environment:
# - VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER}
# - OPENVPN_USER=${VPN_USER}
# - OPENVPN_PASSWORD=${VPN_PASSWORD}
# - SERVER_COUNTRIES=Switzerland
volumes:
test-volume:

View File

@@ -110,85 +110,89 @@ services:
# QBITTORRENT # QBITTORRENT
############################ ############################
# qbittorrent: # transmission:
# image: lscr.io/linuxserver/qbittorrent:latest # image: lscr.io/linuxserver/transmission:latest
# container_name: qbittorrent # container_name: transmission
# network_mode: "service:gluetun" # network_mode: "service:gluetun"
# environment: # environment:
# - PUID=1000 # - PUID=1000
# - PGID=1000 # - PGID=1000
# - TZ=Etc/UTC # - TZ=Etc/UTC
# - WEBUI_PORT=12000 # - USER=admin
# - TORRENTING_PORT=6881 # - PASS=${TRANSMISSION_PASSWORD}
# volumes: # volumes:
# - /media/arr/qbittorrent/config:/config # - ${MOUNTED_VOLUME}/transmission/data:/config
# - /media/arr/qbittorrent/downloads:/downloads #optional # - ${MOUNTED_VOLUME}/downloads:/downloads #optional
# ports:
# - 9091:9091
# - 51413:51413
# - 51413:51413/udp
# restart: unless-stopped # restart: unless-stopped
############################ ############################
# DUCKDNS # DUCKDNS
############################ ############################
duckdns: # duckdns:
image: linuxserver/duckdns:latest # image: linuxserver/duckdns:latest
container_name: duckdns # container_name: duckdns
network_mode: "service:gluetun" # Route through gluetun # network_mode: "service:gluetun" # Route through gluetun
depends_on: # depends_on:
- gluetun # - gluetun
environment: # environment:
- PUID=1000 # - PUID=1000
- PGID=1000 # - PGID=1000
- TZ=Etc/UTC # - TZ=Etc/UTC
- SUBDOMAINS=ujly # Replace with your DuckDNS subdomain(s) # - SUBDOMAINS=${DUCKDNS_SUBDOMAINS} # Replace with your DuckDNS subdomain(s)
- TOKEN=${DUCKDNS_TOKEN} # Replace with your DuckDNS token # - TOKEN=${DUCKDNS_TOKEN} # Replace with your DuckDNS token
restart: unless-stopped # restart: unless-stopped
############################ ############################
# JELLYFIN # JELLYFIN
############################ ############################
jellyfin: # jellyfin:
image: lscr.io/linuxserver/jellyfin:latest # image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin # container_name: jellyfin
labels: # labels:
- "traefik.enable=true" # - "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(`jellyfin.<subdomain>.duckdns.org`)" # - "traefik.http.routers.jellyfin.rule=Host(`${JELLYFIN_SUBDOMAIN}.duckdns.org`)"
- "traefik.http.routers.jellyfin.entrypoints=websecure" # - "traefik.http.routers.jellyfin.entrypoints=websecure"
- "traefik.http.routers.jellyfin.tls.certresolver=myresolver" # - "traefik.http.routers.jellyfin.tls.certresolver=myresolver"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096" # - "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
environment: # environment:
- PUID=1000 # - PUID=1000
- PGID=1000 # - PGID=1000
- TZ=Etc/UTC # - TZ=Etc/UTC
volumes: # volumes:
- /mnt/pool-main/portainer/jellyfin/config:/config # - /mnt/pool-main/portainer/jellyfin/config:/config
- /mnt/pool-main/media/series:/data/series # - /mnt/pool-main/media/series:/data/series
- /mnt/pool-main/media/movies:/data/movies # - /mnt/pool-main/media/movies:/data/movies
restart: unless-stopped # restart: unless-stopped
traefik: # traefik:
image: traefik:v2.10 # image: traefik:v2.10
container_name: traefik # container_name: traefik
command: # command:
- "--api.insecure=true" # Optional: Enable Traefik dashboard # - "--api.insecure=true" # Optional: Enable Traefik dashboard
- "--providers.docker=true" # - "--providers.docker=true"
- "--providers.docker.exposedbydefault=false" # - "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80" # - "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443" # - "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true" # - "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=duckdns" # - "--certificatesresolvers.myresolver.acme.dnschallenge.provider=duckdns"
- "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}" # - "--certificatesresolvers.myresolver.acme.email=${ACME_EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" # - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports: # ports:
- "80:80" # HTTP # - "80:80" # HTTP
- "443:443" # HTTPS # - "443:443" # HTTPS
volumes: # volumes:
- /var/run/docker.sock:/var/run/docker.sock # - /var/run/docker.sock:/var/run/docker.sock
- /mnt/pool-main/portainer/traefik/letsencrypt:/letsencrypt # - /mnt/pool-main/portainer/traefik/letsencrypt:/letsencrypt
- /mnt/pool-main/portainer/traefik/config:/config # - /mnt/pool-main/portainer/traefik/config:/config
environment: # environment:
- DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token # - DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token
restart: unless-stopped # restart: unless-stopped
############################ ############################
# GLUETUN # GLUETUN
@@ -198,23 +202,21 @@ services:
image: qmcgaw/gluetun image: qmcgaw/gluetun
container_name: gluetun container_name: gluetun
ports: ports:
- 20000:8096 #jellyfin - 80:80
# - 9696:9696 #prowlarr - 443:443
# - 7878:7878 #radarr # - 8096:8096 #jellyfin
# - 8989:8989 #sonarr # - 9696:9696 #prowlarr
# - 6767:6767 #bazarr # - 7878:7878 #radarr
# - 8686:8686 #lidarr # - 8989:8989 #sonarr
# - 8787:8787 #readarr # - 6767:6767 #bazarr
# - 12000:12000 #qbittorrent # - 8686:8686 #lidarr
# - 6881:6881 #qbittorrent # - 8787:8787 #readarr
# - 6881:6881/udp #qbittorrent
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
devices: devices:
- /dev/net/tun:/dev/net/tun - /dev/net/tun:/dev/net/tun
environment: environment:
- VPN_SERVICE_PROVIDER=nordvpn - VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER}
- VPN_TYPE=openvpn
- OPENVPN_USER=${VPN_USER} - OPENVPN_USER=${VPN_USER}
- OPENVPN_PASSWORD=${VPN_PASSWORD} - OPENVPN_PASSWORD=${VPN_PASSWORD}
- SERVER_COUNTRIES=Switzerland - SERVER_COUNTRIES=Switzerland