欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > gin + es 实践 05

gin + es 实践 05

2025/5/10 1:14:47 来源:https://blog.csdn.net/m0_73516381/article/details/147712522  浏览:    关键词:gin + es 实践 05

部署指南

本文档提供了 Go-ES 项目的完整部署指南,包括环境准备、应用构建、数据库和 Elasticsearch 设置以及服务启动流程。

环境要求

部署 Go-ES 项目需要以下软件环境:

  • Go 1.21 或更高版本
  • MySQL 5.7 或更高版本
  • Elasticsearch 8.x
  • Docker 和 Docker Compose(可选,用于容器化部署)

部署前准备

1. 安装 Go 环境

访问 Go 官方网站 下载并安装适合您操作系统的 Go 版本。

安装完成后,验证安装:

go version

2. 安装 MySQL

可以通过以下方式安装 MySQL:

  • 在 Linux 上使用包管理器安装
  • 在 Windows 或 macOS 上使用官方安装程序
  • 使用 Docker 运行 MySQL 容器

启动 MySQL 服务后,创建数据库:

CREATE DATABASE go_es CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. 安装 Elasticsearch

本项目提供了一个便捷的脚本 es.sh 用于使用 Docker 快速部署 Elasticsearch 和 Kibana:

# 赋予脚本执行权限
chmod +x es.sh# 运行脚本
./es.sh

该脚本会:

  • 检查 Docker 和 Docker Compose 是否已安装
  • 创建必要的目录结构
  • 生成 Docker Compose 配置文件
  • 启动 Elasticsearch 和 Kibana 容器

如果您希望手动安装 Elasticsearch,可以参考 Elasticsearch 官方文档。

应用部署

1. 获取源代码

从 Git 仓库克隆项目:

git clone https://github.com/saixiaoxi/go-es.git
cd go-es

2. 配置应用

复制示例配置文件并修改:

cp config.example.yaml config.yaml

编辑 config.yaml 文件,配置应用参数:

# 应用配置
app:env: production   # 设置环境为生产环境port: 8080        # 应用端口# 数据库配置 
database:host: localhost   # 修改为您的数据库主机port: 3306        # 数据库端口user: root        # 数据库用户名password: your_password # 修改为您的数据库密码name: go_es       # 数据库名称# Elasticsearch 配置
elasticsearch:addresses:        # 修改为您的 ES 地址- http://localhost:9200username: ""      # 如果有认证,填写用户名password: ""      # 如果有认证,填写密码index_prefix: go_es_  # 索引前缀

3. 构建应用

在项目根目录下构建应用:

# 下载依赖
go mod tidy# 构建应用
go build -o bin/go-es cmd/api/main.go

4. 启动应用

# 直接运行
./bin/go-es# 或者在开发环境直接使用 go run
go run cmd/api/main.go

应用启动后,将在配置的端口上运行,并自动连接数据库和 Elasticsearch:

  • API 服务地址:http://localhost:8080/api/v1
  • Swagger 文档地址:http://localhost:8080/swagger/index.html

容器化部署

为简化部署流程,我们提供了使用 Docker 和 Docker Compose 的完整部署方案。

创建 Dockerfile

在项目根目录创建 Dockerfile

# 构建阶段
FROM golang:1.21-alpine AS builder# 设置工作目录
WORKDIR /app# 复制依赖文件
COPY go.mod go.sum ./# 下载依赖
RUN go mod download# 复制源代码
COPY . .# 构建应用
RUN CGO_ENABLED=0 GOOS=linux go build -o go-es cmd/api/main.go# 运行阶段
FROM alpine:latest# 安装 CA 证书
RUN apk --no-cache add ca-certificates# 设置工作目录
WORKDIR /app# 从构建阶段复制二进制文件
COPY --from=builder /app/go-es .# 复制配置文件
COPY config.example.yaml config.yaml# 暴露端口
EXPOSE 8080# 运行应用
CMD ["./go-es"]

创建 Docker Compose 配置

创建 docker-compose.yml 文件,包含完整的应用栈:

version: '3'services:# MySQL 服务mysql:image: mysql:8.0restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: passwordMYSQL_DATABASE: go_esports:- "3306:3306"volumes:- mysql-data:/var/lib/mysqlhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-ppassword"]interval: 5stimeout: 5sretries: 5# Elasticsearch 服务elasticsearch:image: elasticsearch:8.12.2environment:- "ES_JAVA_OPTS=-Xms512m -Xmx512m"- "discovery.type=single-node"- "ELASTIC_PASSWORD=elastic_password"- "xpack.security.enabled=true"ports:- "9200:9200"volumes:- es-data:/usr/share/elasticsearch/datahealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9200"]interval: 30stimeout: 10sretries: 5# Kibana 服务kibana:image: kibana:8.12.2environment:- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"- "I18N_LOCALE=zh-CN"ports:- "5601:5601"depends_on:- elasticsearch# 应用服务app:build: .restart: alwaysports:- "8080:8080"depends_on:- mysql- elasticsearchenvironment:- TZ=Asia/Shanghaivolumes:- ./config.yaml:/app/config.yamlhealthcheck:test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/api/v1/health"]interval: 10stimeout: 5sretries: 5volumes:mysql-data:es-data:

启动容器化应用

使用 Docker Compose 启动整个应用栈:

# 构建并启动服务
docker-compose up -d# 查看容器状态
docker-compose ps# 查看应用日志
docker-compose logs -f app

生产环境部署建议

对于生产环境,我们建议以下部署实践:

1. 使用反向代理

在前端放置 Nginx 反向代理,提供以下功能:

  • TLS 终止 (HTTPS)
  • 负载均衡
  • 静态资源服务
  • 请求限流

Nginx 配置示例:

server {listen 80;server_name api.example.com;# 重定向到 HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl;server_name api.example.com;# SSL 配置ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;# 反向代理到应用location /api/ {proxy_pass http://localhost:8080;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;}# Swagger 文档location /swagger/ {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

2. 数据库优化

对于生产环境 MySQL,建议:

  • 启用连接池
  • 优化 MySQL 配置参数
  • 设置适当的缓存大小
  • 配置定期备份策略

3. Elasticsearch 集群

对于生产环境 Elasticsearch,建议:

  • 部署至少 3 节点的集群
  • 使用专用主节点和数据节点
  • 配置索引生命周期管理
  • 配置安全认证和授权

4. 监控和日志

建立完善的监控和日志系统:

  • 使用 Prometheus + Grafana 监控应用指标
  • 使用 ELK 栈收集和分析日志
  • 设置合适的告警阈值和通知渠道

故障排查

常见问题解决

  1. 应用无法连接数据库

    • 检查数据库连接参数
    • 确认数据库服务运行状态
    • 检查防火墙或网络限制
  2. 应用无法连接 Elasticsearch

    • 检查 Elasticsearch 地址和认证信息
    • 确认 Elasticsearch 服务运行状态
    • 检查 Elasticsearch 日志是否有错误
  3. API 请求返回 500 错误

    • 检查应用日志查找详细错误信息
    • 验证请求参数是否正确
    • 确保数据库和 Elasticsearch 可用
  4. 搜索结果不准确

    • 检查索引映射和分析器配置
    • 尝试重建索引(POST /api/v1/products/reindex
    • 验证搜索查询参数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词