luffy.skynet.lan Docker Compose Stack
Overview
This page documents the docker-compose.yml and .env used for the luffy.skynet.lan stack. The Compose file defines the services and the skynetlan network used by the stack.
Start and management
Use the Makefile documented in Makefile doc to start and manage the stack (for example make install, make update, make fixnet).
Services
traefik: edge reverse proxy, exposes ports 80 and 443 and mounts its configuration from the host viaCONFIGFOLDER/traefik/traefik.toml. The dashboard is routed attraefik.skynet.lan.jellyfin: media server. Important environment variables arePUID,PGID,TZ. Volumes mountCONFIGFOLDERand media folders (TVFOLDER,MOVIEFOLDER). Hardware acceleration is provided via/dev/dri.dozzle: container log viewer; binds the docker socket for container logs.watchtower: container auto-updater; configured to send email notifications using theEMAIL*variables from.env.
Environment variables
The .env file provides runtime values referenced by the compose file:
USERID,GROUPID— host UID/GID to run containers as.TIMEZONE— timezone for services.CONFIGFOLDER— host path for application configuration.MOVIEFOLDER,TVFOLDER— media folders mounted into media services.EMAILFROM,EMAILTO,EMAILSERVER,EMAILPASSWORD,EMAILUSERAUTH,EMAILPORT— email settings for Watchtower notifications.
Notes
- The Compose stack uses Traefik labels for HTTP routing; update hostnames and labels to match your environment.
- The
skynetlannetwork is explicitly declared; usemake fixnet(see the Makefile doc) if the network needs recreation. - The raw
docker-compose.ymland.envcontents are preserved below unchanged.
docker-compose.yml
services:
traefik:
image: traefik:v2.11
container_name: traefik
ports:
- "80:80"
- "443:443"
networks:
- skynetlan
volumes:
- ${CONFIGFOLDER}/traefik/traefik.toml:/etc/traefik/traefik.toml
- /var/run/docker.sock:/var/run/docker.sock
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.skynet.lan`)
- traefik.http.routers.traefik.entrypoints=web
- traefik.http.routers.traefik.service=api@internal
- traefik.http.services.traefik-svc.loadbalancer.server.port=8080
jellyfin:
image: linuxserver/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- PUID=${USERID}
- PGID=${GROUPID}
- TZ=${TIMEZONE}
- JELLYFIN_PublishedServerUrl=tsouxtra.skynet.lan
- LIBVA_DRIVER_NAME=radeonsi
volumes:
- ${CONFIGFOLDER}/jellyfin:/config
- ${TVFOLDER}:/media/tv
- ${MOVIEFOLDER}:/media/movies
ports:
- 7359:7359/udp #optional
dns: ${CONTAINERS_DNS}
devices:
- /dev/dri:/dev/dri
networks:
- skynetlan
labels:
- traefik.enable=true
- traefik.http.routers.tsouxtra-rtr.rule=Host(`tsouxtra.skynet.lan`)
- traefik.http.routers.tsouxtra-rtr.entrypoints=web
- traefik.http.routers.tsouxtra-rtr.service=tsouxtra-svc
- traefik.http.services.tsouxtra-svc.loadbalancer.server.port=8096
dozzle:
container_name: logsui
image: amir20/dozzle:latest
restart: unless-stopped
networks:
- skynetlan
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- traefik.enable=true
- traefik.http.routers.applogs-rtr.rule=Host(`applogs.skynet.lan`)
- traefik.http.routers.applogs-rtr.entrypoints=web
- traefik.http.routers.applogs-rtr.service=applogs-svc
- traefik.http.services.applogs-svc.loadbalancer.server.port=8080
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
networks:
- skynetlan
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=${TIMEZONE}
- WATCHTOWER_MONITOR_ONLY=true
- WATCHTOWER_SCHEDULE=@daily
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG=Docker Container Updates
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=${EMAILFROM}
- WATCHTOWER_NOTIFICATION_EMAIL_TO=${EMAILTO}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=${EMAILSERVER}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=${EMAILPASSWORD}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=${EMAILUSERAUTH}
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=${EMAILPORT}
networks:
skynetlan:
.env
#userdata
USERID=1000
GROUPID=1000
TIMEZONE=Europe/Athens
#File paths
#configuration files for all apps
CONFIGFOLDER=/mnt/data/dockerappdata
#media folders
MOVIEFOLDER=/mnt/poseidon/media/movies
TVFOLDER=/mnt/poseidon/media/tvshows
#Docker update notifications
EMAILFROM=[email protected]
EMAILTO=[email protected]
EMAILSERVER=mail.domain.tld
EMAILPASSWORD=password
EMAILUSERAUTH=[email protected]
EMAILPORT=587