Files
relay-saas/docs/DEPLOYMENT.md
huangzhenpc 91cbf92c13
Some checks failed
CI / Unit tests (push) Has been cancelled
CI / commit_lint (push) Has been cancelled
[项目管理] 添加开发规范和任务管理文档
- 添加 Claude 项目开发指引 (.claude/project-instructions.md)
- 添加开发记录文档 (docs/DEVELOPMENT.md)
- 添加详细任务清单 (docs/TODO.md)
- 添加部署配置文档 (docs/DEPLOYMENT.md)

包含:开发流程规范、任务追踪、Git工作流、部署指南
2025-12-29 23:02:49 +08:00

7.1 KiB
Raw Blame History

部署配置文档

📦 部署架构

主系统部署

环境要求:

  • Go 1.19+
  • MySQL 8.0+ / PostgreSQL 13+
  • Redis 6.0+
  • 操作系统Linux / macOS / Windows

环境变量配置:

# .env

# 数据库配置
SQL_DSN=root:password@tcp(localhost:3306)/oneapi_master
LOG_SQL_DSN=root:password@tcp(localhost:3306)/oneapi_logs  # 可选

# Redis 配置
REDIS_CONN_STRING=redis://localhost:6379
SYNC_FREQUENCY=60  # 配置同步频率(秒)

# Session 密钥(重要:所有节点必须相同)
SESSION_SECRET=your_random_secret_here_change_it

# 节点类型
NODE_TYPE=master  # 主节点

# 服务端口
PORT=3000

# 时区
TZ=Asia/Shanghai

# 日志目录
LOG_DIR=./logs

# 可选:批量更新
BATCH_UPDATE_ENABLED=true
BATCH_UPDATE_INTERVAL=5

# 可选:渠道自动测试
CHANNEL_TEST_FREQUENCY=1440  # 每天
CHANNEL_UPDATE_FREQUENCY=1440  # 每天

Docker Compose 部署(推荐):

version: '3.4'

services:
  one-api-master:
    image: relay-saas:latest
    container_name: relay-saas-master
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data
      - ./logs:/app/logs
    environment:
      - SQL_DSN=root:123456@tcp(db:3306)/oneapi_master
      - REDIS_CONN_STRING=redis://redis:6379
      - SESSION_SECRET=your_random_secret
      - NODE_TYPE=master
      - TZ=Asia/Shanghai
    depends_on:
      - db
      - redis

  redis:
    image: redis:latest
    container_name: relay-saas-redis
    restart: always

  db:
    image: mysql:8.0
    container_name: relay-saas-mysql
    restart: always
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=oneapi_master
      - TZ=Asia/Shanghai

代理站点部署

环境变量配置:

# .env

# 代理模式开关
AGENT_MODE=true

# 主系统地址
MASTER_SYSTEM_URL=https://master.example.com

# 代理站点 API Key由主系统分配
AGENT_SITE_API_KEY=ask-xxxxxxxxxxxxxxxx

# 本地数据库(独立)
SQL_DSN=root:password@tcp(localhost:3306)/oneapi_agent_001

# 本地 Redis可选但推荐
REDIS_CONN_STRING=redis://localhost:6379
SYNC_FREQUENCY=60

# Session 密钥(与主系统相同)
SESSION_SECRET=your_random_secret_here_change_it

# 服务端口
PORT=3000

# 时区
TZ=Asia/Shanghai

Docker Compose 部署:

version: '3.4'

services:
  one-api-agent:
    image: relay-saas:latest
    container_name: relay-saas-agent-001
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./data:/data
      - ./logs:/app/logs
    environment:
      - AGENT_MODE=true
      - MASTER_SYSTEM_URL=https://master.example.com
      - AGENT_SITE_API_KEY=ask-xxxxxxxxxxxxxxxx
      - SQL_DSN=root:123456@tcp(db:3306)/oneapi_agent
      - REDIS_CONN_STRING=redis://redis:6379
      - SESSION_SECRET=your_random_secret  # 必须与主系统相同
      - TZ=Asia/Shanghai
    depends_on:
      - db
      - redis

  redis:
    image: redis:latest
    container_name: relay-saas-agent-redis
    restart: always

  db:
    image: mysql:8.0
    container_name: relay-saas-agent-mysql
    restart: always
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=oneapi_agent
      - TZ=Asia/Shanghai

🚀 部署步骤

1. 主系统部署

# 1. 克隆代码
git clone https://git.586vip.cn/oadmin/relay-saas.git
cd relay-saas

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 NODE_TYPE=master

# 3. 构建镜像(可选,如果不用官方镜像)
docker build -t relay-saas:latest .

# 4. 启动服务
docker-compose up -d

# 5. 查看日志
docker-compose logs -f

# 6. 访问系统
# http://localhost:3000
# 默认账号root / 123456

2. 代理站点部署

# 1. 在主系统中创建代理站点
# 登录主系统 → 代理管理 → 添加站点 → 获取 API Key

# 2. 克隆代码到新服务器
git clone https://git.586vip.cn/oadmin/relay-saas.git
cd relay-saas

# 3. 配置环境变量
cp .env.example .env
# 编辑 .env 文件:
# - AGENT_MODE=true
# - MASTER_SYSTEM_URL=主系统地址
# - AGENT_SITE_API_KEY=从主系统获取的密钥
# - SQL_DSN=独立的数据库连接

# 4. 启动服务
docker-compose up -d

# 5. 验证连接
curl http://localhost:3000/api/status

🔧 配置说明

重要配置项

SESSION_SECRET

  • 作用:用于加密 session 数据
  • 要求:主系统和所有代理站点必须使用相同的值
  • 生成:使用 openssl rand -hex 32 生成随机字符串

AGENT_SITE_API_KEY

  • 格式ask- 前缀 + 48位随机字符
  • 获取:在主系统中创建代理站点时自动生成
  • 安全:定期轮换,不要泄露

SQL_DSN

  • 主系统:连接主数据库
  • 代理站点:连接独立数据库(不同实例)
  • 格式
    • MySQL: user:password@tcp(host:port)/dbname
    • PostgreSQL: postgres://user:password@host:port/dbname

🔒 安全建议

网络安全

  1. 使用 HTTPS配置 Nginx 反向代理 + SSL
  2. 限制数据库访问(仅允许本地或内网)
  3. 配置防火墙规则
  4. 使用 VPN 或专线连接主从系统

应用安全

  1. 定期更新密钥
  2. 启用请求频率限制
  3. 配置 IP 白名单
  4. 监控异常请求

数据安全

  1. 定期备份数据库
  2. 加密敏感配置
  3. 日志脱敏处理
  4. 定期安全审计

📊 监控和运维

日志位置

  • 应用日志:./logs/
  • 访问日志:./logs/access.log
  • 错误日志:./logs/error.log

健康检查

# 检查服务状态
curl http://localhost:3000/api/status

# 检查数据库连接
docker-compose exec one-api-master ./one-api --version

性能监控

  • CPU 使用率:docker stats
  • 内存使用:docker stats
  • 数据库连接数MySQL SHOW PROCESSLIST;
  • Redis 状态:redis-cli INFO

常见问题

1. 服务无法启动

  • 检查端口是否被占用:netstat -tuln | grep 3000
  • 查看日志:docker-compose logs

2. 数据库连接失败

  • 检查 SQL_DSN 配置
  • 验证数据库是否启动:docker-compose ps

3. 代理站点无法连接主系统

  • 检查 MASTER_SYSTEM_URL 是否正确
  • 验证 AGENT_SITE_API_KEY 是否有效
  • 检查网络连通性:curl https://master.example.com/api/status

🔄 更新和回滚

更新步骤

# 1. 拉取最新代码
git pull origin main

# 2. 停止服务
docker-compose down

# 3. 备份数据库
mysqldump -u root -p oneapi_master > backup.sql

# 4. 重新构建(如需要)
docker-compose build

# 5. 启动服务
docker-compose up -d

# 6. 检查日志
docker-compose logs -f

回滚步骤

# 1. 停止服务
docker-compose down

# 2. 切换到旧版本
git checkout <commit-hash>

# 3. 恢复数据库(如需要)
mysql -u root -p oneapi_master < backup.sql

# 4. 启动服务
docker-compose up -d

📞 支持

  • 问题反馈Git Issues
  • 文档更新:提交 PR 到 docs/ 目录

最后更新2025-12-29 文档版本v1.0