Go应用部署指南
📋 部署架构
本部署方案包含以下组件:
- Go应用服务 - 主应用服务
- MySQL数据库 - 数据存储
- Redis缓存 - 缓存服务
- Nginx反向代理 - 负载均衡和SSL终止
- Prometheus - 监控数据收集
- Grafana - 监控数据可视化
🚀 快速开始
1. 环境准备
确保系统已安装:
- Docker
- Docker Compose
2. 构建和启动
bash
# 进入部署目录
cd examples/06-deployment
# 构建并启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f go-app
3. 访问服务
- 应用服务: http://localhost:8080
- Nginx代理: http://localhost (重定向到HTTPS)
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000 (admin/admin)
🔧 配置说明
环境变量
在 docker-compose.yml
中配置应用环境变量:
yaml
environment:
- GIN_MODE=release
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=root
- DB_PASSWORD=password
- DB_NAME=go_demo
- REDIS_HOST=redis
- REDIS_PORT=6379
数据库配置
MySQL数据库会自动创建,初始配置:
- 数据库名:
go_demo
- 用户名:
go_user
- 密码:
go_password
SSL证书
在生产环境中,需要配置真实的SSL证书:
- 将证书文件放在
nginx/ssl/
目录 - 更新
nginx/nginx.conf
中的证书路径
📊 监控配置
Prometheus
Prometheus会自动收集以下指标:
- Go应用性能指标
- MySQL数据库指标
- Redis缓存指标
- 系统资源指标
Grafana
Grafana预配置了以下仪表板:
- 应用性能监控
- 数据库性能监控
- 系统资源监控
🔍 故障排查
查看服务状态
bash
# 查看所有服务状态
docker-compose ps
# 查看特定服务日志
docker-compose logs go-app
docker-compose logs mysql
docker-compose logs nginx
常见问题
端口冲突
bash# 检查端口占用 netstat -tulpn | grep :8080 # 修改docker-compose.yml中的端口映射
数据库连接失败
bash# 检查MySQL服务状态 docker-compose logs mysql # 进入MySQL容器 docker-compose exec mysql mysql -u root -p
应用启动失败
bash# 检查应用日志 docker-compose logs go-app # 检查配置文件 docker-compose exec go-app cat /app/config.yml
📈 性能优化
应用层面
连接池配置
go// 数据库连接池 db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) db.DB().SetConnMaxLifetime(time.Hour)
缓存策略
go// Redis缓存配置 redis.NewClient(&redis.Options{ Addr: "redis:6379", PoolSize: 10, })
系统层面
Nginx优化
- 启用Gzip压缩
- 配置缓存策略
- 调整worker进程数
容器资源限制
yamldeploy: resources: limits: cpus: '1.0' memory: 1G reservations: cpus: '0.5' memory: 512M
🔒 安全配置
网络安全
防火墙配置
bash# 只开放必要端口 ufw allow 80/tcp ufw allow 443/tcp ufw allow 22/tcp
SSL/TLS配置
- 使用强加密套件
- 启用HSTS
- 配置安全头
应用安全
环境变量管理
bash# 使用.env文件管理敏感信息 echo "DB_PASSWORD=your_secure_password" > .env
访问控制
- 配置API认证
- 限制请求频率
- 启用CORS
📝 部署脚本
自动化部署
创建部署脚本 deploy.sh
:
bash
#!/bin/bash
# 停止现有服务
docker-compose down
# 拉取最新代码
git pull origin main
# 构建新镜像
docker-compose build
# 启动服务
docker-compose up -d
# 等待服务启动
sleep 30
# 健康检查
curl -f http://localhost/health || exit 1
echo "部署完成!"
回滚脚本
创建回滚脚本 rollback.sh
:
bash
#!/bin/bash
# 回滚到上一个版本
docker-compose down
docker image tag go-app:previous go-app:latest
docker-compose up -d
echo "回滚完成!"
🧪 测试
功能测试
bash
# 运行API测试
curl -X GET http://localhost/api/v1/health
# 测试数据库连接
curl -X GET http://localhost/api/v1/users
# 测试缓存功能
curl -X GET http://localhost/api/v1/cache/test
性能测试
bash
# 使用ab进行压力测试
ab -n 1000 -c 10 http://localhost/api/v1/health
# 使用wrk进行负载测试
wrk -t12 -c400 -d30s http://localhost/api/v1/health
📚 相关文档
🤝 贡献
欢迎提交Issue和Pull Request来改进部署配置!