services: pipeline: build: . 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: