Files

166 lines
4.7 KiB
YAML

services:
mysql:
image: mysql:9.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
interval: 5s
timeout: 5s
retries: 30
redis:
image: redis:7
ports:
- "${REDIS_PORT:-6379}:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 30
rustfs:
image: rustfs/rustfs:latest
command: ["/data"]
environment:
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
RUSTFS_CONSOLE_ENABLE: "true"
ports:
- "${RUSTFS_PORT:-9000}:9000"
- "${RUSTFS_CONSOLE_PORT:-9001}:9001"
volumes:
- rustfs_data:/data
backend-init-db:
build:
context: ../..
dockerfile: deploy/docker/backend.Dockerfile
environment:
DATABASE_URL: mysql+aiomysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql:3306/${MYSQL_DATABASE}
DEBUG: "false"
# S3 / RustFS
S3_ENDPOINT_URL: http://rustfs:9000
S3_REGION_NAME: us-east-1
S3_ACCESS_KEY_ID: ${RUSTFS_ACCESS_KEY}
S3_SECRET_ACCESS_KEY: ${RUSTFS_SECRET_KEY}
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
# CORS
CORS_ORIGINS: http://localhost:7788,http://127.0.0.1:7788
# 可选
OPENAI_API_KEY: ${OPENAI_API_KEY-}
depends_on:
mysql:
condition: service_healthy
command: ["uv", "run", "python", "init_db.py"]
restart: "no"
mysql-init-sql:
image: mysql:9.0
depends_on:
mysql:
condition: service_healthy
backend-init-db:
condition: service_completed_successfully
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ../../backend/sql:/sql:ro
command:
[
"bash",
"-lc",
"set -e; for f in $$(find /sql -maxdepth 1 -type f -name '*.sql' | sort); do echo \"[mysql-init-sql] applying $$f\"; mysql --default-character-set=utf8mb4 -h mysql -u\"$$MYSQL_USER\" -p\"$$MYSQL_PASSWORD\" \"$$MYSQL_DATABASE\" < \"$$f\"; done",
]
restart: "no"
backend:
build:
context: ../..
dockerfile: deploy/docker/backend.Dockerfile
environment:
DATABASE_URL: mysql+aiomysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql:3306/${MYSQL_DATABASE}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_DB: ${REDIS_DB:-0}
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
CELERY_BROKER_URL: ${CELERY_BROKER_URL:-}
DEBUG: "false"
API_V1_PREFIX: /api/v1
# S3 / RustFS
S3_ENDPOINT_URL: http://rustfs:9000
S3_REGION_NAME: us-east-1
S3_ACCESS_KEY_ID: ${RUSTFS_ACCESS_KEY}
S3_SECRET_ACCESS_KEY: ${RUSTFS_SECRET_KEY}
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
# CORS
CORS_ORIGINS: http://localhost:7788,http://127.0.0.1:7788
# 可选
OPENAI_API_KEY: ${OPENAI_API_KEY-}
ports:
- "8000:8000"
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
backend-init-db:
condition: service_completed_successfully
mysql-init-sql:
condition: service_completed_successfully
celery-worker:
build:
context: ../..
dockerfile: deploy/docker/backend.Dockerfile
environment:
DATABASE_URL: mysql+aiomysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql:3306/${MYSQL_DATABASE}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_DB: ${REDIS_DB:-0}
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
CELERY_BROKER_URL: ${CELERY_BROKER_URL:-}
DEBUG: "false"
API_V1_PREFIX: /api/v1
S3_ENDPOINT_URL: http://rustfs:9000
S3_REGION_NAME: us-east-1
S3_ACCESS_KEY_ID: ${RUSTFS_ACCESS_KEY}
S3_SECRET_ACCESS_KEY: ${RUSTFS_SECRET_KEY}
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
CORS_ORIGINS: http://localhost:7788,http://127.0.0.1:7788
OPENAI_API_KEY: ${OPENAI_API_KEY-}
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
backend-init-db:
condition: service_completed_successfully
mysql-init-sql:
condition: service_completed_successfully
command: ["uv", "run", "celery", "-A", "app.core.celery_app:celery_app", "worker", "-l", "info"]
front:
build:
context: ../..
dockerfile: deploy/docker/front.Dockerfile
environment:
BACKEND_URL: ${BACKEND_URL}
ports:
- "7788:80"
depends_on:
- backend
volumes:
mysql_data:
rustfs_data: