Files
hfb_sys/deploy/README.md
T
2026-06-09 22:38:35 +08:00

2.2 KiB

生产部署说明

目标访问地址:

http://hfb.221329.cc.cd:7890

生产部署只暴露宿主机 7890 端口,避免和服务器已有的 80443 服务冲突。后端、MySQL、Redis、MinIO 均通过 Docker 内网通信。

1. 准备环境变量

cp backend/.env.prod.example backend/.env

编辑 backend/.env,至少替换以下占位值:

MYSQL_ROOT_PASSWORD
MYSQL_PASSWORD
MYSQL_DSN
JWT_SECRET
MINIO_ROOT_USER
MINIO_ROOT_PASSWORD
STORAGE_ACCESS_KEY_ID
STORAGE_SECRET_ACCESS_KEY

如果正式对外运营,还需要配置真实短信和实名服务,避免继续使用测试配置。

2. 一键部署

./scripts/deploy-prod.sh

脚本会自动完成:

  • 检查 backend/.env 是否仍指向 127.0.0.1localhost 或占位值。
  • 构建并启动生产容器。
  • 等待 MySQL、Redis、MinIO 就绪。
  • 按顺序执行尚未应用的数据库迁移。
  • 重启后端并检查 http://127.0.0.1:7890/api/health

如需部署完成后直接跟随查看后端日志:

./scripts/deploy-prod.sh --logs

后端运行日志会同时输出到 Docker 控制台,并写入宿主机:

backend/logs/app-YYYY-MM-DD.log

测试阶段需要清空并重建数据库时:

./scripts/deploy-prod.sh --reset-db

3. 手动启动服务

docker compose -f deploy/docker-compose.prod.yml up -d --build

4. 手动执行数据库迁移

通常直接使用一键部署脚本即可。确实需要手动迁移时,使用后端镜像内置的 goose:

MYSQL_DSN="$(awk -F= '$1=="MYSQL_DSN"{sub(/^[^=]*=/,""); print; exit}' backend/.env)"
case "$MYSQL_DSN" in
  *multiStatements=*) GOOSE_DSN="$MYSQL_DSN" ;;
  *\?*) GOOSE_DSN="${MYSQL_DSN}&multiStatements=true" ;;
  *) GOOSE_DSN="${MYSQL_DSN}?multiStatements=true" ;;
esac

docker compose -f deploy/docker-compose.prod.yml run --rm --no-deps backend \
  /app/goose -dir /app/migrations mysql "$GOOSE_DSN" up

5. 验证

curl http://127.0.0.1:7890/health
curl http://127.0.0.1:7890/api/health

浏览器访问:

http://hfb.221329.cc.cd:7890
http://hfb.221329.cc.cd:7890/admin/login

服务器安全组或防火墙需要放行 7890/tcp