Files
2026-08-11 17:53:40 +02:00

186 lines
4.5 KiB
YAML

services:
caddy:
depends_on:
- archivebox
- freshrss
- uptime-kuma
- ntfy
- flatnotes
- radicale
- metube
- jellyfin
- gitea
image: caddy:latest
container_name: caddy
restart: unless-stopped
environment:
HLEDGER_PASSWORD_HASH: "${HLEDGER_PASSWORD_HASH}"
METUBE_PASSWORD_HASH: "${METUBE_PASSWORD_HASH}"
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- /opt/server/caddy/data:/data
- /opt/server/caddy/config:/config
- /home/tomasr/vps-config/web-server:/srv/www:ro
- /opt/server/resspublica:/srv/resspublica:ro
extra_hosts:
- "host.docker.internal:host-gateway"
archivebox:
image: archivebox/archivebox:latest
container_name: archivebox
restart: unless-stopped
command: server 0.0.0.0:8000
environment:
- TZ=Europe/Zurich
volumes:
# Local SSD: database + config + metadata
- /opt/server/archivebox/archivebox-data:/data
# kDrive: only the heavy archive content
- /mnt/kdrive/Archive:/data/archive
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
environment:
- TZ=Europe/Zurich
- CRON_MIN=*/20
volumes:
- /opt/server/freshrss:/var/www/FreshRSS/data
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
volumes:
- /opt/server/uptime-kuma:/app/data
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
restart: unless-stopped
command:
- serve
- --config
- /etc/ntfy/server.yml
environment:
- TZ=Europe/Zurich
volumes:
# Persistent database, cache, attachments
- /opt/server/ntfy:/var/cache/ntfy
# Server configuration
- /home/tomasr/vps-config/ntfy-config/server.yml:/etc/ntfy/server.yml:ro
healthcheck:
test: ["CMD-SHELL", "wget -q --tries=1 -O- http://localhost:80/v1/health | grep -q 'healthy'"]
interval: 30s
timeout: 10s
retries: 3
flatnotes:
image: dullage/flatnotes:latest
container_name: flatnotes
restart: unless-stopped
environment:
- TZ=Europe/Zurich
- FLATNOTES_USERNAME=${FLATNOTES_USERNAME}
- FLATNOTES_PASSWORD=${FLATNOTES_PASSWORD}
- FLATNOTES_SECRET_KEY=${FLATNOTES_SECRET_KEY}
volumes:
- /mnt/kdrive/Notes/quicknotes:/data
radicale:
image: tomsquest/docker-radicale:latest
container_name: radicale
restart: unless-stopped
environment:
- TZ=Europe/Zurich
volumes:
# Calendar + contacts data
- /opt/server/radicale/data:/data
# Configuration
- /home/tomasr/vps-config/radicale-config:/config
metube:
image: alexta69/metube:latest
container_name: metube
restart: unless-stopped
environment:
- YTDL_OPTIONS={"outtmpl":"%(title)s/%(title)s.%(ext)s","writesubtitles":true,"writeautomaticsub":true,"writethumbnail":true,"writeinfojson":true,"embedmetadata":true,"embedthumbnail":true}
- MAX_CONCURRENT_DOWNLOADS=1
- STATE_DIR=/metube
- YTDL_NIGHTLY_UPDATE_TIME=03:00
- TZ=Europe/Zurich
volumes:
# Your video archive
- /mnt/kdrive/Autre/Archive/Videos:/downloads
# MeTube application state
- /opt/server/metube:/metube
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- TZ=Europe/Zurich
volumes:
# Jellyfin configuration/database
- /opt/server/jellyfin/config:/config
# Transcoding cache
- /opt/server/jellyfin/cache:/cache
# Your MeTube archive (read-only)
- /mnt/kdrive/Autre/Archive/Videos:/media/videos:ro
mem_limit: 1500m
transmute:
image: ghcr.io/transmute-app/transmute:main
container_name: transmute
restart: unless-stopped
volumes:
- /opt/server/transmute:/app/data
environment:
AUTH_SECRET_KEY: "${TRANSMUTE_SECRET_KEY}"
AUTH_ACCESS_TOKEN_EXPIRE_MINUTES: 120
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
USER_UID: 1000
USER_GID: 1000
TZ: "Europe/Zurich"
GITEA__server__ROOT_URL: "${GITEA_ROOT_URL}"
GITEA__server__HTTP_PORT: 3000
GITEA__database__DB_TYPE: "sqlite3"
GITEA__database__PATH: "/data/gitea/gitea.db"
GITEA__service__DISABLE_REGISTRATION: true
GITEA__service__REQUIRE_SIGNIN_VIEW: false
volumes:
- /opt/server/gitea:/data