101 lines
2.2 KiB
Markdown
101 lines
2.2 KiB
Markdown
# 生产部署说明
|
|
|
|
目标访问地址:
|
|
|
|
```text
|
|
http://hfb.221329.cc.cd:7890
|
|
```
|
|
|
|
生产部署只暴露宿主机 `7890` 端口,避免和服务器已有的 `80`、`443` 服务冲突。后端、MySQL、Redis、MinIO 均通过 Docker 内网通信。
|
|
|
|
## 1. 准备环境变量
|
|
|
|
```bash
|
|
cp backend/.env.prod.example backend/.env
|
|
```
|
|
|
|
编辑 `backend/.env`,至少替换以下占位值:
|
|
|
|
```text
|
|
MYSQL_ROOT_PASSWORD
|
|
MYSQL_PASSWORD
|
|
MYSQL_DSN
|
|
JWT_SECRET
|
|
MINIO_ROOT_USER
|
|
MINIO_ROOT_PASSWORD
|
|
STORAGE_ACCESS_KEY_ID
|
|
STORAGE_SECRET_ACCESS_KEY
|
|
```
|
|
|
|
如果正式对外运营,还需要配置真实短信和实名服务,避免继续使用测试配置。
|
|
|
|
## 2. 一键部署
|
|
|
|
```bash
|
|
./scripts/deploy-prod.sh
|
|
```
|
|
|
|
脚本会自动完成:
|
|
|
|
- 检查 `backend/.env` 是否仍指向 `127.0.0.1`、`localhost` 或占位值。
|
|
- 构建并启动生产容器。
|
|
- 等待 MySQL、Redis、MinIO 就绪。
|
|
- 按顺序执行尚未应用的数据库迁移。
|
|
- 重启后端并检查 `http://127.0.0.1:7890/api/health`。
|
|
|
|
如需部署完成后直接跟随查看后端日志:
|
|
|
|
```bash
|
|
./scripts/deploy-prod.sh --logs
|
|
```
|
|
|
|
后端运行日志会同时输出到 Docker 控制台,并写入宿主机:
|
|
|
|
```text
|
|
backend/logs/app-YYYY-MM-DD.log
|
|
```
|
|
|
|
测试阶段需要清空并重建数据库时:
|
|
|
|
```bash
|
|
./scripts/deploy-prod.sh --reset-db
|
|
```
|
|
|
|
## 3. 手动启动服务
|
|
|
|
```bash
|
|
docker compose -f deploy/docker-compose.prod.yml up -d --build
|
|
```
|
|
|
|
## 4. 手动执行数据库迁移
|
|
|
|
通常直接使用一键部署脚本即可。确实需要手动迁移时,使用后端镜像内置的 goose:
|
|
|
|
```bash
|
|
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. 验证
|
|
|
|
```bash
|
|
curl http://127.0.0.1:7890/health
|
|
curl http://127.0.0.1:7890/api/health
|
|
```
|
|
|
|
浏览器访问:
|
|
|
|
```text
|
|
http://hfb.221329.cc.cd:7890
|
|
http://hfb.221329.cc.cd:7890/admin/login
|
|
```
|
|
|
|
服务器安全组或防火墙需要放行 `7890/tcp`。
|