Files
vps-config/compose.yml
T
2026-08-02 12:51:05 +02:00

193 lines
4.8 KiB
YAML

services:
caddy:
depends_on:
- archivebox
- freshrss
- uptime-kuma
- ntfy
- flatnotes
- radicale
- metube
- jellyfin
- booklogr-web
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
booklogr-api:
container_name: "booklogr-api"
image: mozzo/booklogr:v1.11.1
environment:
DATABASE_URL: "sqlite:///books.db"
AUTH_ALLOW_REGISTRATION: False
AUTH_REQUIRE_VERIFICATION: False
SINGLE_USER_MODE: True
AUTH_SECRET_KEY: "${BOOKLOGR_AUTH_SECRET_KEY}"
volumes:
- /opt/server/booklogr/api:/app/instance
booklogr-web:
container_name: "booklogr-web"
image: mozzo/booklogr-web:v1.11.1
env_file:
- .env
ports:
- 5001:5001
environment:
- BL_API_ENDPOINT=http://localhost:5001/ # CHANGE THIS TO POINT TO THE EXTERNAL ADRESS THE USER CAN ACCESS
- BL_GOOGLE_ID= # Leave empty to disable google login. To enable, write in your Google Client ID.
- BL_DEMO_MODE=false
depends_on:
- booklogr-api