127 lines
4.1 KiB
YAML
127 lines
4.1 KiB
YAML
x-defaults: &defaults
|
|
restart: unless-stopped
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: 100m
|
|
max-file: "3"
|
|
|
|
services:
|
|
db:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-17}
|
|
environment:
|
|
TZ: ${TZ:-UTC}
|
|
POSTGRES_USER: ${POSTGRES_USER:-opencut}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
|
|
POSTGRES_DB: ${POSTGRES_DB:-opencut}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
ports:
|
|
- "${POSTGRES_PORT_OVERRIDE:-5432}:5432"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-opencut}"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${OPENCUT_DB_CPU_LIMIT:-2.00}
|
|
memory: ${OPENCUT_DB_MEMORY_LIMIT:-1G}
|
|
reservations:
|
|
cpus: ${OPENCUT_DB_CPU_RESERVATION:-0.50}
|
|
memory: ${OPENCUT_DB_MEMORY_RESERVATION:-256M}
|
|
|
|
redis:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}redis:${REDIS_VERSION:-7-alpine}
|
|
ports:
|
|
- "${REDIS_PORT_OVERRIDE:-6379}:6379"
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${OPENCUT_REDIS_CPU_LIMIT:-1.00}
|
|
memory: ${OPENCUT_REDIS_MEMORY_LIMIT:-512M}
|
|
reservations:
|
|
cpus: ${OPENCUT_REDIS_CPU_RESERVATION:-0.25}
|
|
memory: ${OPENCUT_REDIS_MEMORY_RESERVATION:-128M}
|
|
|
|
serverless-redis-http:
|
|
<<: *defaults
|
|
image: ${GLOBAL_REGISTRY:-}hiett/serverless-redis-http:${SERVERLESS_REDIS_HTTP_VERSION:-latest}
|
|
ports:
|
|
- "${SERVERLESS_REDIS_HTTP_PORT_OVERRIDE:-8079}:80"
|
|
environment:
|
|
SRH_MODE: env
|
|
SRH_TOKEN: ${SERVERLESS_REDIS_HTTP_TOKEN:?SERVERLESS_REDIS_HTTP_TOKEN is required}
|
|
SRH_CONNECTION_STRING: "redis://redis:6379"
|
|
depends_on:
|
|
redis:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "wget --spider -q http://127.0.0.1:80 || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 10s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${OPENCUT_SRH_CPU_LIMIT:-1.00}
|
|
memory: ${OPENCUT_SRH_MEMORY_LIMIT:-256M}
|
|
reservations:
|
|
cpus: ${OPENCUT_SRH_CPU_RESERVATION:-0.25}
|
|
memory: ${OPENCUT_SRH_MEMORY_RESERVATION:-64M}
|
|
|
|
web:
|
|
<<: *defaults
|
|
image: ${OPENCUT_WEB_IMAGE:-opencut/web:latest}
|
|
ports:
|
|
- "${OPENCUT_WEB_PORT_OVERRIDE:-3100}:3000"
|
|
environment:
|
|
TZ: ${TZ:-UTC}
|
|
NODE_ENV: production
|
|
DATABASE_URL: postgresql://${POSTGRES_USER:-opencut}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-opencut}
|
|
BETTER_AUTH_URL: ${OPENCUT_BETTER_AUTH_URL:-http://localhost:3100}
|
|
BETTER_AUTH_SECRET: ${OPENCUT_BETTER_AUTH_SECRET:?OPENCUT_BETTER_AUTH_SECRET is required}
|
|
UPSTASH_REDIS_REST_URL: http://serverless-redis-http:80
|
|
UPSTASH_REDIS_REST_TOKEN: ${SERVERLESS_REDIS_HTTP_TOKEN}
|
|
FREESOUND_CLIENT_ID: ${OPENCUT_FREESOUND_CLIENT_ID:?OPENCUT_FREESOUND_CLIENT_ID is required}
|
|
FREESOUND_API_KEY: ${OPENCUT_FREESOUND_API_KEY:?OPENCUT_FREESOUND_API_KEY is required}
|
|
# Transcription (Optional - leave blank to disable auto-captions)
|
|
CLOUDFLARE_ACCOUNT_ID: ${OPENCUT_CLOUDFLARE_ACCOUNT_ID:-}
|
|
R2_ACCESS_KEY_ID: ${OPENCUT_R2_ACCESS_KEY_ID:-}
|
|
R2_SECRET_ACCESS_KEY: ${OPENCUT_R2_SECRET_ACCESS_KEY:-}
|
|
R2_BUCKET_NAME: ${OPENCUT_R2_BUCKET_NAME:-}
|
|
MODAL_TRANSCRIPTION_URL: ${OPENCUT_MODAL_TRANSCRIPTION_URL:-}
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
serverless-redis-http:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 30s
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${OPENCUT_WEB_CPU_LIMIT:-2.00}
|
|
memory: ${OPENCUT_WEB_MEMORY_LIMIT:-2G}
|
|
reservations:
|
|
cpus: ${OPENCUT_WEB_CPU_RESERVATION:-0.50}
|
|
memory: ${OPENCUT_WEB_MEMORY_RESERVATION:-512M}
|
|
|
|
volumes:
|
|
postgres_data:
|