services: postgres: image: ${PEERTUBE_POSTGRES_IMAGE:-postgres:16-alpine} restart: ${PEERTUBE_RESTART:-unless-stopped} volumes: - ${VOL_PATH:-/data}/peertube/postgres:/var/lib/postgresql/data environment: - POSTGRES_USER=peertube - POSTGRES_PASSWORD=peertube - POSTGRES_DB=peertube networks: - internal redis: image: ${PEERTUBE_REDIS_IMAGE:-redis:7-alpine} restart: ${PEERTUBE_RESTART:-unless-stopped} volumes: - ${VOL_PATH:-/data}/peertube/redis:/data networks: - internal peertube: image: ${PEERTUBE_IMAGE:-chocobozzz/peertube:production-bookworm} restart: ${PEERTUBE_RESTART:-unless-stopped} volumes: - ${VOL_PATH:-/data}/peertube/data:/data - ${VOL_PATH:-/data}/peertube/config:/config environment: - NODE_ENV=production - POSTGRES_USER=peertube - POSTGRES_PASSWORD=peertube - POSTGRES_DB=peertube - PEERTUBE_DB_USERNAME=peertube - PEERTUBE_DB_PASSWORD=peertube - PEERTUBE_DB_SSL=false - PEERTUBE_DB_HOSTNAME=postgres - PEERTUBE_WEBSERVER_HOSTNAME=${PEERTUBE_HOSTNAME:-localhost} - PEERTUBE_WEBSERVER_PORT=9000 - PEERTUBE_WEBSERVER_HTTPS=false - PEERTUBE_SIGNUP_ENABLED=false - PEERTUBE_TRANSCODING_ENABLED=false - PEERTUBE_CONTACT_FORM_ENABLED=false - PEERTUBE_ADMIN_EMAIL=${PEERTUBE_ADMIN_EMAIL:-admin@example.com} - PEERTUBE_ADMIN_USERNAME=admin - PEERTUBE_ADMIN_PASSWORD=${PEERTUBE_ADMIN_PASSWORD:-changeme123} - PEERTUBE_SECRET=${PEERTUBE_SECRET:?must_be_set} - PEERTUBE_FEDERATION_ENABLED=false - PEERTUBE_TRACKER_ENABLED=false - PEERTUBE_IMPORT_ENABLED=false ports: - "${PEERTUBE_PORT:-9000}:9000" networks: - proxy - internal depends_on: - postgres - redis networks: proxy: external: true internal: