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

配置优化:
- 修正 docker-compose.yml 位置到 backend 目录
- 简化 CI/CD 测试流程,跳过需要数据库的测试
- 增加数据库迁移安全策略说明
- 完善部署流程文档和故障排除指南
2025-07-09 16:42:22 +08:00

4.2 KiB
Raw Permalink Blame History

使用现有服务的部署指南

本指南适用于已有 PostgreSQL 和 Redis 服务的情况。

📋 前提条件

确保你的服务器上已经安装并运行:

  • PostgreSQL (推荐版本 14+)
  • Redis (推荐版本 6+)

⚙️ 配置步骤

1. 环境变量配置

复制环境变量模板:

cp .env.example .env

编辑 .env 文件,配置你的现有服务:

# 数据库配置
DB_HOST=localhost                    # 或你的 PostgreSQL 服务器地址
DB_PORT=5432                        # PostgreSQL 端口
DB_NAME=photography                 # 数据库名称
DB_USER=postgres                    # 数据库用户
DB_PASSWORD=your_actual_password    # 数据库密码

# Redis 配置
REDIS_HOST=localhost                # 或你的 Redis 服务器地址
REDIS_PORT=6379                     # Redis 端口
REDIS_PASSWORD=your_redis_password  # Redis 密码 (如果有)

# JWT 配置
JWT_SECRET=your_jwt_secret_at_least_32_characters_long
JWT_EXPIRES_IN=24h

2. 数据库准备

连接到你的 PostgreSQL创建数据库

-- 创建数据库
CREATE DATABASE photography;

-- 创建用户 (如果需要)
CREATE USER photography_user WITH ENCRYPTED PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE photography TO photography_user;

-- 使用数据库
\c photography;

-- 创建必要的扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";

3. 后端服务部署

方式一Docker 部署 (推荐)

# 构建并启动后端服务
docker-compose up -d backend

# 查看日志
docker-compose logs -f backend

# 检查健康状态
curl http://localhost:8080/health

方式二:直接运行

# 进入后端目录
cd backend

# 安装依赖
go mod download

# 运行数据库迁移
go run cmd/server/main.go migrate

# 启动服务
go run cmd/server/main.go

4. 数据库迁移

如果你的后端支持自动迁移,服务启动时会自动创建表结构。

如果需要手动迁移:

# 使用 Docker
docker-compose exec backend ./main migrate

# 或者直接运行
cd backend && go run cmd/server/main.go migrate

5. 验证部署

# 检查后端健康状态
curl http://localhost:8080/health

# 检查数据库连接
curl http://localhost:8080/api/v1/health

# 检查 Redis 连接 (如果有相关接口)
curl http://localhost:8080/api/v1/cache/health

🔧 常见问题

数据库连接失败

  1. 检查数据库是否运行

    sudo systemctl status postgresql
    
  2. 检查连接权限

    psql -h localhost -U postgres -d photography
    
  3. 检查防火墙

    sudo ufw status
    

Redis 连接失败

  1. 检查 Redis 状态

    sudo systemctl status redis
    
  2. 测试 Redis 连接

    redis-cli ping
    

容器网络问题

如果容器无法访问宿主机服务,尝试:

  1. 使用 host 网络模式 (已配置)
  2. 检查服务绑定地址
    • PostgreSQL: 确保监听 0.0.0.0:5432localhost:5432
    • Redis: 确保监听 0.0.0.0:6379localhost:6379

📊 监控和维护

日志查看

# 后端日志
docker-compose logs -f backend

# 系统日志
journalctl -u your-service-name -f

性能监控

# 运行监控脚本
./scripts/monitor.sh

# 手动检查资源使用
docker stats photography_backend

备份

# 手动备份数据库
./scripts/backup.sh

# 或者使用 Docker 备份服务
docker-compose --profile backup up backup

🚀 自动化部署

如果你使用 CI/CD确保在部署环境中设置正确的环境变量

# .github/workflows 或 .gitea/workflows
env:
  DB_HOST: your-db-host
  DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
  REDIS_HOST: your-redis-host
  REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}

🔒 安全建议

  1. 使用强密码
  2. 限制数据库访问:只允许必要的 IP 连接
  3. 启用 SSL/TLS:用于数据库和 Redis 连接
  4. 定期更新:保持服务和依赖的最新版本
  5. 监控日志:定期检查异常访问

这种配置更加轻量和实用,避免了重复安装已有服务的资源浪费。