| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- services:
- pipeline:
- build: .
- # The image runs as the non-root `node` user for Kubernetes. For local dev
- # we override back to root so the ./output bind mount keeps working
- # regardless of the host user's uid; Kubernetes sets fsGroup instead.
- user: "0:0"
- ports:
- - "${PORT:-13000}:3000"
- environment:
- - OPENAI_API_KEY=${OPENAI_API_KEY}
- - OPENAI_BASE_URL=${OPENAI_BASE_URL}
- - OPENAI_TTS_API_KEY=${OPENAI_TTS_API_KEY}
- - OPENAI_TTS_BASE_URL=${OPENAI_TTS_BASE_URL}
- - FISH_AUDIO_API_KEY=${FISH_AUDIO_API_KEY}
- - MINIMAX_API_KEY=${MINIMAX_API_KEY}
- - MINIMAX_GROUP_ID=${MINIMAX_GROUP_ID}
- - ELEVENLABS_API_KEY=${ELEVENLABS_API_KEY}
- # Unified output + cache retention
- - OUTPUT_DIR=${OUTPUT_DIR:-/app/output}
- - OUTPUT_RETENTION_DAYS=${OUTPUT_RETENTION_DAYS:-30}
- # Container timezone — keeps logs, ffmpeg, and new Date() on Beijing time
- # so the daily-trending cover date never rolls over a day early/late.
- - TZ=${TZ:-Asia/Shanghai}
- # OSS (Alibaba Cloud Object Storage) — publish stage
- - OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID:-}
- - OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET:-}
- - OSS_REGION=${OSS_REGION:-}
- - OSS_BUCKET=${OSS_BUCKET:-}
- - OSS_ENDPOINT=${OSS_ENDPOINT:-}
- - OSS_PATH=${OSS_PATH:-}
- - OSS_PUBLIC_DOMAIN=${OSS_PUBLIC_DOMAIN:-}
- # Feishu custom-bot webhook — publish stage
- - FEISHU_WEBHOOK_URL=${FEISHU_WEBHOOK_URL:-}
- - FEISHU_WEBHOOK_SECRET=${FEISHU_WEBHOOK_SECRET:-}
- volumes:
- - ./output:/app/output
- - pipeline-jobs:/tmp/pipeline-jobs
- # Use public DNS resolvers directly. The container inherits the host's
- # resolver, which can silently fail to resolve some public domains (e.g.
- # open.feishu.cn behind a VPN/proxy) and break the Feishu webhook. Override
- # via DNS_SERVER_1/DNS_SERVER_2 in .env if you need an internal resolver.
- dns:
- - ${DNS_SERVER_1:-223.5.5.5}
- - ${DNS_SERVER_2:-114.114.114.114}
- restart: unless-stopped
- volumes:
- pipeline-jobs:
|