Files

56 lines
1.9 KiB
YAML
Raw Permalink Normal View History

2026-09-18 16:53:21 +08:00
# 一条命令启动整套服务:MySQL 数据库 + FastAPI 应用
#
# 构建并启动:docker compose up -d --build
# 初始化建表:docker compose exec app python init_db.py
# 导入测试数据:docker compose exec app python init_test_data.py
# 查看日志:docker compose logs -f app
# 停止:docker compose down (加 -v 会连数据库数据一起删除)
#
services:
# ---------- MySQL 数据库 ----------
db:
image: mysql:8.0
container_name: sms_mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: "claude_sms_test" # 容器首次启动时自动创建该库
TZ: Asia/Shanghai
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "3307:3306" # 如需用本机客户端连接,可保留;不需要可删掉
volumes:
- mysql_data:/var/lib/mysql # 数据持久化,容器删除数据也不丢
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD"]
interval: 5s
timeout: 5s
retries: 20
# ---------- FastAPI 应用 ----------
app:
build: .
container_name: sms_app
restart: unless-stopped
depends_on:
db:
condition: service_healthy # 等 MySQL 健康后再启动,避免连接失败
environment:
# 关键:容器之间用「服务名 db」通信,而不是 localhost
DB_HOST: db
DB_PORT: "3306"
DB_USER: root
DB_PASSWORD: "123456"
DB_NAME: claude_sms_test
SQL_ECHO: "false" # 生产环境关闭 SQL 日志
ports:
- "8002:8002"
# 如需热更新调试,可挂载源码并开启 reload:
# volumes: ["./:/app"]
# command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8002", "--reload"]
volumes:
mysql_data: