# occupymedia.cc — TUBE CT (occ-tube, CT 151, tailscale 100.92.231.98) # PeerTube plane: peertube + dedicated postgres + redis + postfix relay. # Day 1: local storage on the CT volume (500G thin). Flip to R2 by setting # PEERTUBE_OBJECT_STORAGE_ENABLED=true + keys in peertube.env, then recreate. name: occ-tube services: peertube-postgres: image: postgres:16-alpine environment: POSTGRES_USER: peertube POSTGRES_PASSWORD: ${PEERTUBE_DB_PASSWORD:?} POSTGRES_DB: peertube volumes: [peertube_pgdata:/var/lib/postgresql/data] healthcheck: test: ["CMD-SHELL", "pg_isready -U peertube"] interval: 5s retries: 10 restart: unless-stopped peertube-redis: image: redis:7-alpine restart: unless-stopped postfix: image: mwader/postfix-relay environment: - POSTFIX_myhostname=tube.occupymedia.cc restart: unless-stopped peertube: image: chocobozzz/peertube:production-bookworm env_file: peertube.env ports: - "9000:9000" # tunnel: tube.occupymedia.cc → 100.92.231.98:9000 - "1935:1935" # RTMP ingest from media-worker (cross-CT via tailscale) volumes: - peertube_config:/app/config - peertube_assets:/app/storage/client-overrides - peertube_data:/app/storage depends_on: peertube-postgres: { condition: service_healthy } peertube-redis: { condition: service_started } postfix: { condition: service_started } restart: unless-stopped volumes: peertube_pgdata: peertube_config: peertube_assets: peertube_data: