- 新增Redis服务模块用于会话状态存储和缓存 - 集成Celery用于后台任务处理 - 更新Docker Compose配置以支持开发环境 - 优化API以支持异步调用和Redis会话存储 - 更新文档以反映新的开发环境配置和使用方法
135 lines
3.2 KiB
YAML
135 lines
3.2 KiB
YAML
version: '3.8'
|
||
|
||
services:
|
||
# Redis 服务(用于会话存储和 Celery 消息队列)
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: life-echo-redis
|
||
ports:
|
||
- "6379:6379"
|
||
volumes:
|
||
- redis_data:/data
|
||
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
|
||
restart: always
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
networks:
|
||
- life-echo-network
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
|
||
# FastAPI 应用
|
||
api:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
image: life-echo-api:latest
|
||
container_name: life-echo-api-prod
|
||
ports:
|
||
- "8000:8000"
|
||
env_file:
|
||
- .env.prod
|
||
environment:
|
||
- REDIS_URL=redis://redis:6379/0
|
||
volumes:
|
||
- ./life_echo.db:/app/life_echo.db
|
||
restart: always
|
||
depends_on:
|
||
redis:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "python", "-c", "import http.client; conn = http.client.HTTPConnection('localhost', 8000); conn.request('GET', '/health'); r = conn.getresponse(); exit(0 if r.status == 200 else 1)"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 10s
|
||
networks:
|
||
- life-echo-network
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
|
||
# Celery Worker(后台任务处理)
|
||
celery-worker:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
image: life-echo-api:latest
|
||
container_name: life-echo-celery-worker
|
||
command: celery -A tasks.celery_app worker --loglevel=info --concurrency=4
|
||
env_file:
|
||
- .env.prod
|
||
environment:
|
||
- REDIS_URL=redis://redis:6379/0
|
||
volumes:
|
||
- ./life_echo.db:/app/life_echo.db
|
||
restart: always
|
||
depends_on:
|
||
redis:
|
||
condition: service_healthy
|
||
api:
|
||
condition: service_healthy
|
||
networks:
|
||
- life-echo-network
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
|
||
# Celery Beat(定时任务调度,可选)
|
||
# celery-beat:
|
||
# build:
|
||
# context: .
|
||
# dockerfile: Dockerfile
|
||
# image: life-echo-api:latest
|
||
# container_name: life-echo-celery-beat
|
||
# command: celery -A tasks.celery_app beat --loglevel=info
|
||
# env_file:
|
||
# - .env.prod
|
||
# environment:
|
||
# - REDIS_URL=redis://redis:6379/0
|
||
# restart: always
|
||
# depends_on:
|
||
# redis:
|
||
# condition: service_healthy
|
||
# networks:
|
||
# - life-echo-network
|
||
|
||
# Flower(Celery 监控面板,可选)
|
||
# flower:
|
||
# build:
|
||
# context: .
|
||
# dockerfile: Dockerfile
|
||
# image: life-echo-api:latest
|
||
# container_name: life-echo-flower
|
||
# command: celery -A tasks.celery_app flower --port=5555
|
||
# ports:
|
||
# - "5555:5555"
|
||
# env_file:
|
||
# - .env.prod
|
||
# environment:
|
||
# - REDIS_URL=redis://redis:6379/0
|
||
# restart: always
|
||
# depends_on:
|
||
# redis:
|
||
# condition: service_healthy
|
||
# networks:
|
||
# - life-echo-network
|
||
|
||
networks:
|
||
life-echo-network:
|
||
driver: bridge
|
||
|
||
volumes:
|
||
redis_data:
|
||
driver: local
|