Skip to content

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. 访问服务

🔧 配置说明

环境变量

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证书:

  1. 将证书文件放在 nginx/ssl/ 目录
  2. 更新 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

常见问题

  1. 端口冲突

    bash
    # 检查端口占用
    netstat -tulpn | grep :8080
    
    # 修改docker-compose.yml中的端口映射
  2. 数据库连接失败

    bash
    # 检查MySQL服务状态
    docker-compose logs mysql
    
    # 进入MySQL容器
    docker-compose exec mysql mysql -u root -p
  3. 应用启动失败

    bash
    # 检查应用日志
    docker-compose logs go-app
    
    # 检查配置文件
    docker-compose exec go-app cat /app/config.yml

📈 性能优化

应用层面

  1. 连接池配置

    go
    // 数据库连接池
    db.DB().SetMaxIdleConns(10)
    db.DB().SetMaxOpenConns(100)
    db.DB().SetConnMaxLifetime(time.Hour)
  2. 缓存策略

    go
    // Redis缓存配置
    redis.NewClient(&redis.Options{
        Addr:     "redis:6379",
        PoolSize: 10,
    })

系统层面

  1. Nginx优化

    • 启用Gzip压缩
    • 配置缓存策略
    • 调整worker进程数
  2. 容器资源限制

    yaml
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 512M

🔒 安全配置

网络安全

  1. 防火墙配置

    bash
    # 只开放必要端口
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw allow 22/tcp
  2. SSL/TLS配置

    • 使用强加密套件
    • 启用HSTS
    • 配置安全头

应用安全

  1. 环境变量管理

    bash
    # 使用.env文件管理敏感信息
    echo "DB_PASSWORD=your_secure_password" > .env
  2. 访问控制

    • 配置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来改进部署配置!