diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..bd0b655 --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +ACME_EMAIL= +DUCKDNS_SUBDOMAINS= +DUCKDNS_TOKEN= +VPN_SERVICE_PROVIDER= +VPN_USER= +VPN_PASSWORD= +JELLYFIN_SUBDOMAIN= +MOUNTED_VOLUME= +TRANSMISSION_PASSWORD= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/docker-compose.local.yml b/docker-compose.local.yml new file mode 100644 index 0000000..2ccaee3 --- /dev/null +++ b/docker-compose.local.yml @@ -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: diff --git a/docker-compose.yml b/docker-compose.yml index d105083..48dd2bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -110,85 +110,89 @@ services: # QBITTORRENT ############################ - # qbittorrent: - # image: lscr.io/linuxserver/qbittorrent:latest - # container_name: qbittorrent + # transmission: + # image: lscr.io/linuxserver/transmission:latest + # container_name: transmission # network_mode: "service:gluetun" # environment: # - PUID=1000 # - PGID=1000 # - TZ=Etc/UTC - # - WEBUI_PORT=12000 - # - TORRENTING_PORT=6881 + # - USER=admin + # - PASS=${TRANSMISSION_PASSWORD} # volumes: - # - /media/arr/qbittorrent/config:/config - # - /media/arr/qbittorrent/downloads:/downloads #optional + # - ${MOUNTED_VOLUME}/transmission/data:/config + # - ${MOUNTED_VOLUME}/downloads:/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=ujly # Replace with your DuckDNS subdomain(s) - - TOKEN=${DUCKDNS_TOKEN} # Replace with your DuckDNS token - restart: unless-stopped + # 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 - labels: - - "traefik.enable=true" - - "traefik.http.routers.jellyfin.rule=Host(`jellyfin..duckdns.org`)" - - "traefik.http.routers.jellyfin.entrypoints=websecure" - - "traefik.http.routers.jellyfin.tls.certresolver=myresolver" - - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" - environment: - - PUID=1000 - - PGID=1000 - - TZ=Etc/UTC - volumes: - - /mnt/pool-main/portainer/jellyfin/config:/config - - /mnt/pool-main/media/series:/data/series - - /mnt/pool-main/media/movies:/data/movies - restart: unless-stopped + # jellyfin: + # image: lscr.io/linuxserver/jellyfin:latest + # container_name: jellyfin + # 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" + # environment: + # - PUID=1000 + # - PGID=1000 + # - TZ=Etc/UTC + # volumes: + # - /mnt/pool-main/portainer/jellyfin/config:/config + # - /mnt/pool-main/media/series:/data/series + # - /mnt/pool-main/media/movies:/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 - - /mnt/pool-main/portainer/traefik/letsencrypt:/letsencrypt - - /mnt/pool-main/portainer/traefik/config:/config - environment: - - DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token - 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 + # - /mnt/pool-main/portainer/traefik/letsencrypt:/letsencrypt + # - /mnt/pool-main/portainer/traefik/config:/config + # environment: + # - DUCKDNS_TOKEN=${DUCKDNS_TOKEN} # Your DuckDNS token + # restart: unless-stopped ############################ # GLUETUN @@ -198,23 +202,21 @@ services: image: qmcgaw/gluetun container_name: gluetun ports: - - 20000:8096 #jellyfin - # - 9696:9696 #prowlarr - # - 7878:7878 #radarr - # - 8989:8989 #sonarr - # - 6767:6767 #bazarr - # - 8686:8686 #lidarr - # - 8787:8787 #readarr - # - 12000:12000 #qbittorrent - # - 6881:6881 #qbittorrent - # - 6881:6881/udp #qbittorrent + - 80:80 + - 443:443 + # - 8096:8096 #jellyfin + # - 9696:9696 #prowlarr + # - 7878:7878 #radarr + # - 8989:8989 #sonarr + # - 6767:6767 #bazarr + # - 8686:8686 #lidarr + # - 8787:8787 #readarr cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun environment: - - VPN_SERVICE_PROVIDER=nordvpn - - VPN_TYPE=openvpn + - VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER} - OPENVPN_USER=${VPN_USER} - OPENVPN_PASSWORD=${VPN_PASSWORD} - SERVER_COUNTRIES=Switzerland