部署
1. 依赖服务
| 服务 | 版本 | 说明 |
|---|---|---|
| MySQL | 5.7+ / 8.x | 数据存储 |
| Redis | 7.x | 缓存/会话 |
2. 二进制部署
编译
bash
# 下载依赖
go mod tidy
# 编译
go build -o youlai-gin main.go部署
上传二进制与 configs/ 到服务器(示例 /opt/youlai-gin):
bash
/opt/youlai-gin/
├── youlai-gin # 二进制文件
└── configs/
└── prod.yaml # 生产环境配置启动
bash
chmod +x ./youlai-gin
export APP_ENV=prod
./youlai-ginsystemd 服务
创建服务文件 /etc/systemd/system/youlai-gin.service:
ini
[Unit]
Description=Youlai Gin Service
After=network.target
[Service]
Type=simple
User=app
WorkingDirectory=/opt/youlai-gin
Environment=APP_ENV=prod
ExecStart=/opt/youlai-gin/youlai-gin
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target启动服务:
bash
systemctl daemon-reload
systemctl start youlai-gin
systemctl enable youlai-gin3. Docker 部署
构建镜像
bash
docker build -t youlai-gin:latest .运行容器
bash
docker run -d --name youlai-gin \
-p 8000:8000 \
-e APP_ENV=prod \
-e APP_DATABASE_HOST=mysql \
-e APP_REDIS_HOST=redis \
youlai-gin:latestDocker Compose
yaml
version: '3.8'
services:
youlai-gin:
image: youlai-gin:latest
container_name: youlai-gin
restart: unless-stopped
ports:
- "8000:8000"
environment:
- APP_ENV=prod
- APP_DATABASE_HOST=mysql
- APP_DATABASE_PASSWORD=123456
- APP_REDIS_HOST=redis
volumes:
- ./logs:/app/logs
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
container_name: youlai-mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: youlai_admin
volumes:
- mysql_data:/var/lib/mysql
- ./sql/mysql/youlai_admin.sql:/docker-entrypoint-initdb.d/init.sql
redis:
image: redis:7-alpine
container_name: youlai-redis
volumes:
mysql_data:启动:
bash
docker-compose up -d4. Nginx 反向代理
nginx
# SSE 专用代理(必须在通用 /prod-api/ 前面)
location /prod-api/api/v1/sse/ {
proxy_buffering off; # 禁用缓冲,立即推送事件
proxy_cache off; # 不缓存
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 Connection ''; # 清除 Connection 头,避免 keepalive 中断
proxy_set_header X-Accel-Buffering no;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_read_timeout 86400s; # 长连接不超时(1天)
proxy_send_timeout 86400s;
proxy_pass http://127.0.0.1:8000/api/v1/sse/; # 换成你后端真实的 IP/域名与端口
}
# 接口反向代理
location /prod-api/ {
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_pass http://127.0.0.1:8000/; # 换成你后端真实的 IP/域名与端口
}5. 健康检查
bash
# 健康检查接口
curl http://localhost:8000/api/v1/health
# 响应
{"code":"00000","msg":"操作成功","data":{"status":"UP"}}6. Swagger 文档
访问地址:http://localhost:8000/swagger/index.html
7. 配置覆盖
通过环境变量覆盖配置:
bash
# 数据库配置
export APP_DATABASE_HOST=192.168.1.100
export APP_DATABASE_PORT=3306
export APP_DATABASE_USERNAME=root
export APP_DATABASE_PASSWORD=your-password
# Redis 配置
export APP_REDIS_HOST=192.168.1.101
export APP_REDIS_PASSWORD=your-redis-password
# JWT 配置
export APP_SECURITY_JWT_SECRETKEY=your-secret-key
# 启动
./youlai-gin8. 日志管理
日志路径
logs/
├── prod.log # 应用日志
└── prod-error.log # 错误日志日志查看
bash
# 实时查看
tail -f logs/prod.log
# 搜索错误
grep "ERROR" logs/prod.log
# Docker 日志
docker logs -f youlai-gin相关文件
| 文件 | 说明 |
|---|---|
Dockerfile | Docker 镜像构建 |
configs/prod.yaml | 生产环境配置 |
sql/mysql/youlai_admin.sql | 数据库初始化脚本 |
