生产环境部署

生产环境部署需要关注安全性、性能和可维护性。以下是关键配置建议。

安全配置

  • ✅ 修改 JWT_SECRET 为强随机字符串(建议 32 位以上)
  • ✅ 修改 ADMIN_PASSWORD 为复杂密码
  • ✅ MySQL 密码使用强密码(至少 12 位,包含大小写字母、数字和特殊字符)
  • ✅ 使用 HTTPS 反向代理(Nginx / Caddy)
  • ✅ 限制数据库端口仅允许内网访问
  • ✅ 设置 CONFIG_KEY 为自定义加密密钥

反向代理示例(Nginx)

如需在宿主机统一管理 HTTPS,可参考以下配置:

server {
    listen 443 ssl;
    server_name redirect.example.com;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

数据持久化

使用宿主机目录挂载,数据直接存储在 ./data/ 目录下:

volumes:
  # MySQL 数据
  - ./data/mysql:/var/lib/mysql
  # 应用数据(日志、配置等)
  - ./data/app:/app/data

日志管理

Redirect 使用 zap 结构化日志,同时输出到控制台和文件:

  • 控制台:可读格式,默认 INFO 级别
  • 文件:JSON 格式,默认 DEBUG 级别,自动轮转
# 查看后端容器控制台日志
docker logs -f redirect-backend

# 查看日志文件
docker exec redirect-backend cat /app/data/logs/app.log
💡
调试时可设置 LOG_CONSOLE_LEVEL=debug 在控制台输出 DEBUG 日志;生产环境可设置 LOG_FILE_LEVEL=info 减少文件体积。

加密配置文件机制

首次成功连接数据库后,程序会自动将数据库连接参数加密保存到 data/db.conf 文件中。

工作流程

  1. 启动时检测 data/db.conf 是否存在
  2. 存在则解密并尝试验证连接
  3. 连接失败则回退到环境变量配置
  4. 环境变量连接成功后自动生成/更新加密配置文件

加密私钥

  • 通过 CONFIG_KEY 环境变量指定自定义私钥
  • 未设置时使用程序内置默认密钥
  • 加密算法:AES-256-GCM + SHA-256 密钥派生
⚠️
生产环境建议设置 CONFIG_KEY 为自定义强密钥,并持久化挂载 /app/data 目录。