-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
94 lines (90 loc) · 3.54 KB
/
Copy pathdocker-compose.yml
File metadata and controls
94 lines (90 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
services:
# MinIO S3 API for studio media blobs (same env vars work for AWS S3 or other S3-compatible backends).
# Console: http://localhost:${MINIO_CONSOLE_PORT:-9001} (optional).
minio:
image: minio/minio:latest
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${STUDIO_S3_ACCESS_KEY:-minio}
MINIO_ROOT_PASSWORD: ${STUDIO_S3_SECRET_KEY:-minio_secret_change_me}
volumes:
- minio-data:/data
# Expose only on loopback so S3/Console are not reachable from other machines.
ports:
- "127.0.0.1:${MINIO_PORT:-19200}:9000"
- "127.0.0.1:${MINIO_CONSOLE_PORT:-19201}:9001"
# Creates the bucket once MinIO accepts connections (required before uploads work).
minio-init:
image: minio/mc:latest
depends_on:
- minio
environment:
MINIO_ROOT_USER: ${STUDIO_S3_ACCESS_KEY:-minio}
MINIO_ROOT_PASSWORD: ${STUDIO_S3_SECRET_KEY:-minio_secret_change_me}
STUDIO_S3_BUCKET: ${STUDIO_S3_BUCKET:-studio-media}
entrypoint: ["/bin/sh", "-c"]
command:
- |
set -e
ok=0
for i in $$(seq 1 60); do
if mc alias set local http://minio:9000 "$$MINIO_ROOT_USER" "$$MINIO_ROOT_PASSWORD"; then
ok=1
break
fi
sleep 1
done
if [ "$$ok" != "1" ]; then echo "MinIO not reachable after 60s"; exit 1; fi
mc mb "local/$$STUDIO_S3_BUCKET" --ignore-existing
echo "Bucket $$STUDIO_S3_BUCKET ready."
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: openrouter_studio
POSTGRES_USER: studio
# Override in `.env` with a strong password: POSTGRES_PASSWORD=your_secret
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-studio_secret}
volumes:
# Postgres data survives image rebuilds and container recreation.
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U studio -d openrouter_studio"]
interval: 10s
timeout: 5s
retries: 5
openrouter-studio:
build: .
ports:
# Host port → container :3000 (override with APP_PORT in `.env`)
- "${APP_PORT:-3080}:3000"
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
minio-init:
condition: service_completed_successfully
env_file:
- path: .env
required: false
environment:
# Always listen on :3000 inside the container. `ports` maps host APP_PORT → 3000.
PORT: "3000"
# Use request Host / X-Forwarded-* for Auth.js URL building (sign-out redirect, etc.)
AUTH_TRUST_HOST: "true"
# PostgreSQL connection via the `postgres` service above.
# Override POSTGRES_PASSWORD in `.env` to use a custom password.
DATABASE_URL: "postgresql://studio:${POSTGRES_PASSWORD:-studio_secret}@postgres:5432/openrouter_studio"
# Raise Node.js V8 heap limit (default ~1.5 GB regardless of server RAM).
# Adjust to ~75 % of available RAM; e.g. 8 GB server → 6144, 16 GB → 12288.
NODE_OPTIONS: "--max-old-space-size=4096"
# Object storage inside the Compose network (override in `.env` if you use external S3).
STUDIO_S3_ENDPOINT: "http://minio:9000"
STUDIO_S3_REGION: "${STUDIO_S3_REGION:-us-east-1}"
STUDIO_S3_BUCKET: "${STUDIO_S3_BUCKET:-studio-media}"
STUDIO_S3_ACCESS_KEY: "${STUDIO_S3_ACCESS_KEY:-minio}"
STUDIO_S3_SECRET_KEY: "${STUDIO_S3_SECRET_KEY:-minio_secret_change_me}"
volumes:
postgres-data:
minio-data: