A list of compose files I made for my containers
Application proxy configured for the OVH provider
version: "3.3"
services:
traefik:
image: traefik
#image: "traefik:v2.10"
container_name: traefik
networks:
br0:
ipv4_address: ${local_IP}
command:
# - "--log.level=DEBUG"
- --api.insecure=true
- --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=${RESOLVER_PROVIDER}
- --certificatesresolvers.myresolver.acme.email=${RESOLVER_EMAIL}
- --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
environment:
- OVH_ENDPOINT=${OVH_ENDPOINT}
- OVH_APPLICATION_KEY=${OVH_APPLICATION_KEY}
- OVH_APPLICATION_SECRET=${OVH_APPLICATION_SECRET}
- OVH_CONSUMER_KEY=${OVH_CONSUMER_KEY}
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- ./letsencrypt:/letsencrypt
- /mnt/user/appdata/port-traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
whoami:
image: traefik/whoami
container_name: traefik-whoami
labels:
- traefik.enable=true
- traefik.http.routers.whoami.rule=${LABEL_ROUTER_HOST}
- traefik.http.routers.whoami.entrypoints=websecure
- traefik.http.routers.whoami.tls.certresolver=myresolver
- traefik.http.routers.whoami.tls.domains[0].main=${LABEL_ROUTER_TLS_DOMAIN0}
# - "traefik.http.routers.whoami.tls.domains[1].main=${LABEL_ROUTER_TLS_DOMAIN1} # <- multiple domains
restart: always
networks:
br0:
external: true
Docker compose for a working unifi-network-application container with mongoDB (as of 10 07 2024)
version: "2.1"
services:
unifi-network-application:
image: lscr.io/linuxserver/unifi-network-application:latest
container_name: unifi-network-application
depends_on:
unifi-db:
condition: service_healthy
networks:
br0:
ipv4_address: ${Local_IP}
unifi: {}
ports:
- 8443:8443 # application GUI/API
- 8843:8843 # optional - HTTPS portal redirection
- 8080:8080 # device and application communication
- 8880:8880 # optional - HTTP portal redirection
- 3478:3478/udp # STUN
- 10001:10001/udp # device discovery
#- 1900:1900/udp # optional - Make controller discoverable on L2 network
#- 6789:6789 # optional - Mobile Speed Test
#- 5514:5514/udp # optional - remote syslog capture
environment:
- PUID=99
- PGID=100
- UMASK=022
- TZ=Europe/Paris
- MONGO_USER=${MONGO_USER}
- MONGO_PASS=${MONGO_PASS}
- MONGO_HOST=${MONGO_HOST}
- MONGO_PORT=${MONGO_PORT}
- MONGO_DBNAME=${MONGO_DBNAME}
- MEM_LIMIT=1024 #optional
- MEM_STARTUP=1024 #optional
volumes:
- /mnt/user/appdata/unifi-network-application/config:/config
labels:
- com.centurylinklabs.watchtower.monitor-only=true
restart: always
unifi-db:
image: docker.io/mongo:5
container_name: unifi-db
networks:
unifi: {}
ports:
- 27017:27017
volumes:
- /mnt/user/appdata/unifi-network-application/mongo/db:/data/db
- /mnt/user/appdata/unifi-network-application/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
healthcheck:
test:
- CMD
- mongo
- --eval
- db.adminCommand('ping')
interval: 10s
timeout: 10s
retries: 5
start_period: 20s
labels:
- com.centurylinklabs.watchtower.monitor-only=true
restart: always
networks:
br0:
external: true
unifi:
external: true
x-dockge:
urls:
- ${X_URL}
- ${X_URL_1}
Monitoring containers
version: "3.3"
services:
diun:
image: crazymax/diun:latest
network_mode: bridge
command: serve
volumes:
- /mnt/user/appdata/diun/data:/data
- /mnt/user/appdata/diun/diun.yml:/diun.yml:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Europe/Paris
- LOG_LEVEL=info
- LOG_JSON=false
restart: always
Self-hosted digital library
version: "3.3"
services:
kavita:
image: lscr.io/linuxserver/kavita
container_name: kavita
networks:
br0:
ipv4_address: ${local_IP}
command: null
environment:
- VERSION=docker
- TZ=Europe/Paris
- PUID=99
- PGID=100
- UMASK=022
ports:
- 5000:5000
volumes:
- /mnt/user/appdata/kavita:/kavita/config
- /mnt/user/biblio/manga:/library/manga
- /mnt/user/biblio/bd:/library/bd
- /mnt/user/biblio/comics:/library/comics
- /mnt/user/biblio/light_novels:/library/LN
- /mnt/user/biblio/calibre/CalibreDev:/library/books_dev
labels:
- traefik.enable=true
- traefik.http.services.kavita.loadbalancer.server.port=${SERVER_PORT}
- traefik.http.routers.kavita.rule=${ROUTER_HOST}
- traefik.http.routers.kavita.entrypoints=websecure
- traefik.http.routers.kavita.tls=true
- traefik.http.routers.kavita.tls.certresolver=myresolver
restart: unless-stopped
networks:
br0:
external: true
Free and open source media server.
version: "3.3"
services:
komga:
image: gotson/komga
container_name: komga
networks:
br0:
ipv4_address: ${local_IP}
environment:
- VERSION=docker
- TZ=Europe/Paris
- PUID=99
- PGID=100
ports:
- 25600:25600
volumes:
- /mnt/user/appdata/Komga:/config
- /mnt/user/biblio/revues:/books
labels:
- traefik.enable=true
- traefik.http.services.komga.loadbalancer.server.port=${SERVER_PORT}
- traefik.http.routers.komga.rule=${ROUTER_HOST}
- traefik.http.routers.komga.entrypoints=websecure
- traefik.http.routers.komga.tls=true
- traefik.http.routers.komga.tls.certresolver=myresolver
restart: unless-stopped
networks:
br0:
external: true
Media server.
version: "3.3"
services:
plex:
image: lscr.io/linuxserver/plex
container_name: plex
networks:
br0:
ipv4_address: ${local_IP}
command: null
runtime: nvidia
environment:
- VERSION=docker
- NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
- NVIDIA_DRIVER_CAPABILITIES=all
- TZ=Europe/Paris
- PUID=99
- PGID=100
- UMASK=022
ports:
- 32400:32400
- 1900:1900/udp
- 5353:5353/udp
- 8324:8324
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
- 32469:32469
volumes:
- /mnt/user/appdata/plex:/config
- /mnt/user/movies/:/movies
- /mnt/user/series/:/tvshows
- /mnt/user/anime/:/anime
- /tmp:/transcode
labels:
- traefik.enable=true
- traefik.http.services.plex.loadbalancer.server.port=${SERVER_PORT}
- traefik.http.routers.plex.rule=${ROUTER_HOST}
- traefik.http.routers.plex.entrypoints=websecure
- traefik.http.routers.plex.tls=true
- traefik.http.routers.plex.tls.certresolver=myresolver
restart: unless-stopped
networks:
br0:
external: true
name: br0
Open source Wiki software.
version: "3.3"
services:
wikijs:
image: lscr.io/linuxserver/wikijs
container_name: wikijs
networks:
br0:
ipv4_address: ${local_IP}
command: null
environment:
- VERSION=docker
- TZ=Europe/Paris
- PUID=99
- PGID=100
- UMASK=022
ports:
- 3000:3000
volumes:
- /mnt/user/appdata/wikijs/config:/config
- /mnt/user/appdata/wikijs/data:/data
labels:
- traefik.enable=true
- traefik.http.services.wikijs.loadbalancer.server.port=${SERVER_PORT}
- traefik.http.routers.wikijs.rule=${ROUTER_HOST}
- traefik.http.routers.wikijs.entrypoints=websecure
- traefik.http.routers.wikijs.tls=true
- traefik.http.routers.wikijs.tls.certresolver=myresolver
restart: unless-stopped
networks:
br0:
external: true
Media request interface.
version: "3.3"
services:
overseer:
image: lscr.io/linuxserver/overseerr
container_name: overseer
networks:
br0:
ipv4_address: ${local_IP}
command: null
environment:
- TZ=Europe/Paris
- PUID=99
- PGID=100
- UMASK=022
ports:
- 5055:5055
volumes:
- /mnt/user/appdata/overseerr:/config
labels:
- traefik.enable=true
- traefik.http.services.overseer.loadbalancer.server.port=${SERVER_PORT}
- traefik.http.routers.overseer.rule=${ROUTER_HOST}
- traefik.http.routers.overseer.entrypoints=websecure
- traefik.http.routers.overseer.tls=true
- traefik.http.routers.overseer.tls.certresolver=myresolver
restart: unless-stopped
networks:
br0:
external: true
Jellyfin + jellyseerr + jellystat + jellystat db
version: "3.3"
# ------------
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
networks:
br0:
ipv4_address: ${local_IP}
runtime: nvidia
deploy:
resources:
# there is a memory leak in this version of jellyfin, the container will restart automatically
# when it reaches 12G in memory
limits:
memory: 12G
reservations:
memory: 8G
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
- UMASK=${UMASK}
- JELLYFIN_PublishedServerUrl= ${IP}
- NVIDIA_VISIBLE_DEVICES=${GPU_JELLYFIN}
- NVIDIA_DRIVER_CAPABILITIES=all
ports:
- ${PORT_JELLYFIN} # Http webUI
- ${PORT_JELLYFIN_01} # Optional - Https webUI
- ${PORT_JELLYFIN_02} # Optional - Allows clients to discover Jellyfin on the local network
- ${PORT_JELLYFIN_03} # Optional - Service discovery used by DNLA and clients
volumes:
- /mnt/user/appdata/jellyfin:/config
- /mnt/user/anime/:/data/animes
- /mnt/user/movies/:/data/movies
- /mnt/user/series/:/data/series
- /mnt/user/audio/muse/:/data/music
- /mnt/user/biblio/books/:/data/books
- /mnt/user/biblio/comics/:/data/comics
- /mnt/user/biblio/manga/:/data/manga
- /mnt/user/biblio/bd/:/data/bd
labels:
- traefik.enable=true
- traefik.http.services.jellyfin.loadbalancer.server.port=${TRAE_PORT_JELLYFIN}
- traefik.http.routers.jellyfin.rule=Host(`${TRAE_HOST_JELLYFIN}`)
- traefik.http.routers.jellyfin.entrypoints=websecure
- traefik.http.routers.jellyfin.tls=true
- traefik.http.routers.jellyfin.tls.certresolver=myresolver
- com.centurylinklabs.watchtower.enable=true
restart: always
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
networks:
br0:
ipv4_address: ${local_IP}
environment:
- TZ=${TZ}
- PUID=${PUID}
- PGID=${PGID}
- UMASK=${UMASK}
ports:
- ${PORT_JELLYSEERR}
volumes:
- /mnt/user/appdata/jellyseerr:/app/config
labels:
- traefik.enable=true
- traefik.http.services.jellyseerr.loadbalancer.server.port=${TRAE_PORT_JELLYSEERR}
- traefik.http.routers.jellyseerr.rule=Host(`${TRAE_HOST_JELLYSEERR}`)
- traefik.http.routers.jellyseerr.entrypoints=websecure
- traefik.http.routers.jellyseerr.tls=true
- traefik.http.routers.jellyseerr.tls.certresolver=myresolver
- com.centurylinklabs.watchtower.enable=true
restart: always
jellystat:
image: cyfershepard/jellystat:latest
container_name: jellystat
networks:
br0:
ipv4_address: ${local_IP}
jellystack: {}
depends_on:
jellystack-db:
condition: service_healthy
environment:
POSTGRES_USER: ${POSTGRES_USER_JELLYSTAT}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD_JELLYSTAT}
POSTGRES_IP: ${POSTGRES_IP_JELLYSTAT}
POSTGRES_PORT: ${POSTGRES_PORT_JELLYSTAT}
JWT_SECRET: ${JWT_SECRET_JELLYSTAT}
ports:
- ${PORT_JELLYSTAT}
volumes:
- /mnt/user/appdata/jellystat:/app/backend/backup-data
labels:
- com.centurylinklabs.watchtower.enable=true
restart: unless-stopped
jellystack-db:
image: postgres:15.2
container_name: jellystack-db
networks:
jellystack: {}
ports:
- ${PORT_JELLYSTACK_DB}
environment:
POSTGRES_USER: ${POSTGRES_USER_JELLYSTAT}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD_JELLYSTAT}
volumes:
- /mnt/user/appdata/jellystat-db:/var/lib/postgresql/data
labels:
- com.centurylinklabs.watchtower.monitor-only=true
healthcheck:
test:
- CMD-SHELL
- sh -c 'pg_isready -U ${POSTGRES_USER_JELLYSTAT} -d
${POSTGRES_DB_JELLYSTAT}'
interval: 10s
timeout: 3s
retries: 3
restart: always
networks:
br0:
external: true
jellystack:
external: true
x-dockge:
urls:
- ${X_URL_JELLYFIN}
- ${X_URL_JELLYFIN_1}
- ${X_URL_JELLYSEERR}
- ${X_URL_JELLYSEERR_1}
- ${X_URL_JELLYSTAT}