Appearance
Docker 部署 server-python
镜像说明
- Dockerfile:
packages/server-python/Dockerfile - 基础镜像:
python:3.11-slim - 监听:
0.0.0.0:8000 - 健康检查:
GET /api/v1/health
数据库由你自行维护(已有 MySQL / RDS),本镜像只跑 API,不包含、不管理 MySQL。
构建与运行
在 monorepo 根目录:
bash
docker build -t xichen-server-python \
-f packages/server-python/Dockerfile \
packages/server-python
cp packages/server-python/.env.docker.example packages/server-python/.env
# 编辑 DB_HOST、DB_USER、DB_PASSWORD、JWT_SECRET、CORS_ORIGINS
docker run -d \
--name xichen-api \
-p 8000:8000 \
--env-file packages/server-python/.env \
--restart unless-stopped \
xichen-server-python环境变量
通过 --env-file 或 -e 注入,不要把 .env 打进镜像。
| 变量 | 说明 |
|---|---|
| DB_HOST | 已有 MySQL 地址(IP 或域名) |
| DB_PORT | 3306 |
| DB_NAME | 库名 |
| DB_USER | 数据库用户 |
| DB_PASSWORD | 数据库密码 |
| JWT_SECRET | 生产必改 |
| CORS_ORIGINS | 前端实际域名,逗号分隔 |
| UPLOAD_PATH | 上传目录,镜像默认 /app/uploads(勿在 .env 写 ./uploads 覆盖) |
模板:packages/server-python/.env.docker.example
上传目录挂载(可选)
bash
docker run -d \
--name xichen-api \
-p 8000:8000 \
-v /data/xichen-uploads:/app/uploads \
--env-file packages/server-python/.env \
--restart unless-stopped \
xichen-server-python.env 中需 UPLOAD_PATH=/app/uploads。
部署后需调用一次 数据库初始化接口(POST /api/v1/system/database/init),写入默认 admin / admin123。若库中已有数据,该接口会 先删表再重建。
容器在 init 之前也会正常启动;缺表时日志为 WARN 而非退出(与 启动容错 一致)。
验证
bash
curl http://localhost:8000/api/v1/health
curl -X POST http://localhost:8000/api/v1/system/database/init
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'更新发布
bash
git pull
docker build -t xichen-server-python -f packages/server-python/Dockerfile packages/server-python
docker stop xichen-api && docker rm xichen-api
docker run -d \
--name xichen-api \
-p 8000:8000 \
--env-file packages/server-python/.env \
--restart unless-stopped \
xichen-server-pythonNginx 反代(可选)
nginx
location /api/ {
proxy_pass http://127.0.0.1:8000/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}前端 VITE_API_BASE_URL 指向 Nginx 域名即可。