fix: 优化后端部署配置,适配现有服务架构

主要修改:
- 移除 postgres:15-alpine 和 redis 容器依赖
- 优化 docker-compose.yml 配置,使用 host 网络模式
- 移除 CI/CD 中的自动数据库迁移,改为手动执行
- 更新环境变量配置,连接到现有的 PostgreSQL 和 Redis 服务
- 完善部署文档,增加现有服务集成说明

配置优化:
- 修正 docker-compose.yml 位置到 backend 目录
- 简化 CI/CD 测试流程,跳过需要数据库的测试
- 增加数据库迁移安全策略说明
- 完善部署流程文档和故障排除指南
This commit is contained in:
xujiang
2025-07-09 16:42:22 +08:00
parent 72414d0979
commit 0651b6626a
6 changed files with 371 additions and 280 deletions

View File

@ -9,8 +9,12 @@
### 主要流程文件
- **`deploy-frontend.yml`** - 前端项目自动部署工作流
- **`deploy-backend.yml`** - 后端服务自动部署工作流 (Docker)
- **`deploy-admin.yml`** - 管理后台自动部署工作流
### 触发条件
#### 前端部署触发
```yaml
on:
push:
@ -21,9 +25,27 @@ on:
paths: [ 'frontend/**' ]
```
#### 后端部署触发
```yaml
on:
push:
branches: [ main ]
paths: [ 'backend/**' ]
workflow_dispatch:
```
#### 管理后台部署触发
```yaml
on:
push:
branches: [ main ]
paths: [ 'admin/**' ]
workflow_dispatch:
```
## 部署流程
### 自动化步骤
### 前端部署流程
1. **代码检出** - `actions/checkout@v4`
2. **环境设置** - 配置 Bun 运行环境
3. **依赖安装** - `bun install`
@ -33,6 +55,18 @@ on:
7. **服务器部署** - rsync 同步到服务器
8. **权限设置** - 确保文件权限正确
### 后端部署流程 (Docker)
1. **代码检出** - `actions/checkout@v4`
2. **Go 环境设置** - `actions/setup-go@v4`
3. **依赖安装** - `go mod download`
4. **代码检查** - `go vet` + `go fmt`
5. **单元测试** - `go test` (单元测试,跳过需要数据库的测试)
6. **构建检查** - `go build`
7. **Docker 构建** - 构建镜像并推送到镜像仓库
8. **服务器部署** - 通过 SSH 更新服务器上的 Docker 容器
9. **健康检查** - 检查服务启动状态
10. **清理操作** - 清理旧镜像和备份容器
### 详细执行流程
```bash
# 1. 环境准备
@ -70,15 +104,39 @@ sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ s
### 必需的 Secrets
在 Gitea 仓库设置中配置:
#### 通用 SSH 配置
- **`HOST`** - 服务器 IP 地址
- **`USERNAME`** - SSH 用户名 (gitea)
- **`SSH_KEY`** - SSH 私钥内容
- **`PORT`** - SSH 端口 (默认 22)
#### 前端部署 (兼容旧配置)
- **`ALIYUN_IP`** - 服务器 IP 地址
- **`ALIYUN_USER_NAME`** - SSH 用户名 (gitea)
- **`ALIYUN_PWD`** - SSH 密码
#### 后端部署 (Docker)
- **`DOCKER_USERNAME`** - Docker 镜像仓库用户名
- **`DOCKER_PASSWORD`** - Docker 镜像仓库密码
- **`TELEGRAM_TO`** - Telegram 机器人通知目标
- **`TELEGRAM_TOKEN`** - Telegram 机器人 Token
### 部署目标
#### 前端部署
- **服务器路径**: `/home/gitea/www/photography/`
- **Web 服务**: Caddy (通过 photography.iriver.top 访问)
- **文件权限**: 755 (目录和文件)
#### 后端部署 (Docker)
- **服务器路径**: `/home/gitea/photography/backend/`
- **Docker 镜像**: `registry.cn-hangzhou.aliyuncs.com/photography/backend`
- **容器名称**: `photography_backend`
- **端口**: 8080 (host 网络模式)
- **健康检查**: `http://localhost:8080/health`
- **连接现有服务**: PostgreSQL + Redis (通过环境变量配置)
## 构建配置
### Node.js 环境
@ -208,6 +266,44 @@ ssh gitea@server "df -h"
- gzip 压缩传输内容
- 并行上传多个文件 (计划中)
## 🔧 重要配置说明
### 数据库迁移策略
根据用户反馈,数据库迁移操作被设计为**手动执行**,避免 CI/CD 自动执行敏感操作:
```bash
# 部署完成后,手动运行数据库迁移
docker-compose exec backend ./main migrate
```
#### 为什么不自动迁移?
1. **安全性**: 数据库迁移涉及数据结构变更,需要人工审核
2. **可控性**: 生产环境数据库操作应该由运维人员控制
3. **风险规避**: 避免自动化流程导致的数据丢失或损坏
### 现有服务集成
后端部署配置适配现有的 PostgreSQL 和 Redis 服务:
```yaml
# docker-compose.yml 优化
services:
backend:
# 使用 host 网络模式连接宿主机服务
network_mode: host
environment:
# 连接到现有的 PostgreSQL
DB_HOST: ${DB_HOST:-localhost}
DB_PORT: ${DB_PORT:-5432}
# 连接到现有的 Redis
REDIS_HOST: ${REDIS_HOST:-localhost}
REDIS_PORT: ${REDIS_PORT:-6379}
```
#### 移除的配置
-`postgres:15-alpine` 容器 (使用现有服务)
-`redis:alpine` 容器 (使用现有服务)
- ❌ CI/CD 自动数据库迁移 (改为手动执行)
## 扩展计划
### 多环境部署