使用 Docker 容器化部署 YFlow。
- Docker Engine 20.10+
- Docker Compose V2
项目根目录提供了可直接使用的 docker-compose.yml,先创建 .env 文件:
# 复制 .env.template 为 .env,并至少修改以下值
# MySQL
DB_ROOT_PASSWORD=your_secure_password
DB_NAME=yflow
DB_USERNAME=yflow
DB_PASSWORD=your_secure_password
# JWT(至少 32 位)
JWT_SECRET=your_jwt_secret_min_32_chars
JWT_REFRESH_SECRET=your_refresh_secret_min_32_chars
# CLI API Key(至少 16 位)
CLI_API_KEY=your_api_key_min_16_chars
# 可选:部署域名(Caddy 反代使用)
# DOMAIN=example.com
# 可选:前端请求 API 的 baseURL(默认 /api,经 Caddy 反代到 backend)
VITE_API_URL=/api你也可以直接参考并编辑仓库内的 .env.template。
# 构建并启动所有服务
docker compose up -d --build
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
# 停止并删除数据卷
docker compose down -v- 生产部署推荐通过反向代理访问(Compose 默认使用 Caddy,对外暴露
80/443) - 后端 API:
/api/*(由 Caddy 转发到backend:8080) - 前端站点:根路径(由 Caddy 转发到
frontend:8080)
如果你在本地仅想快速体验(没有真实域名/证书),建议直接按开发模式运行前后端,或根据需要调整 deploy/nginx/Caddyfile 的 TLS 配置。
services:
backend:
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40sservices:
backend:
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.5'
memory: 512Mservices:
backend:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "5"# 查看运行中的容器
docker compose ps
# 检查健康状态
docker inspect --format='{{.State.Health.Status}}' i18n-backend# 登录 API
curl -X POST http://localhost:8080/api/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"password"}'docker exec i18n-mysql mysqldump -u root -p i18n_flow > backup.sqldocker exec i18n-redis redis-cli BGSAVE
docker cp i18n-redis:/data/dump.rdb ./redis_backup.rdb