duoqi-api/docker-compose.yml
Wang Zhuoxuan e893755340 feat: 添加 CI/CD 部署方案(Gitea + Docker + 双分支工作流)
- Dockerfile: 多阶段构建,oven/bun 基础镜像,非 root 用户
- docker-compose.yml: 本地开发环境(API + MySQL + Drizzle Studio)
- docker-compose.prod.yml: 服务器部署(prod + test,Docker profiles)
- .gitea/workflows/deploy.yml: 双分支 CI/CD(develop→测试, main→生产)
- docs/ci-deployment-guide.md: 完整部署指南(Alibaba Cloud Linux 3)
- scripts/deploy.sh: 手动部署运维脚本
- .env.prod.example: 生产环境变量模板
- .dockerignore: 排除非构建文件
- .gitignore: 排除 .claude/ 目录
2026-04-16 12:44:14 +08:00

72 lines
1.5 KiB
YAML

# 本地开发环境 Docker Compose 配置
version: '3.8'
services:
# ===== API 服务(热重载开发) =====
api:
build:
context: .
dockerfile: Dockerfile
container_name: duoqi-api-dev
restart: unless-stopped
env_file:
- .env
ports:
- "3000:3000"
volumes:
- ./src:/app/src:ro
- ./db:/app/db:ro
networks:
- duoqi-network
depends_on:
mysql:
condition: service_healthy
# ===== MySQL 数据库(本地开发用) =====
mysql:
image: mysql:8.0
container_name: duoqi-mysql-dev
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: duoqi_dev
MYSQL_USER: duoqi
MYSQL_PASSWORD: duoqi
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- duoqi-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpassword"]
interval: 10s
timeout: 5s
retries: 5
# ===== Drizzle Studio =====
studio:
image: node:20-alpine
container_name: duoqi-studio-dev
restart: unless-stopped
working_dir: /app
command: npx drizzle-kit studio
environment:
DATABASE_URL: mysql://duoqi:duoqi@mysql:3306/duoqi_dev
ports:
- "4983:4983"
networks:
- duoqi-network
depends_on:
mysql:
condition: service_healthy
volumes:
mysql-data:
driver: local
networks:
duoqi-network:
driver: bridge