温馨提示×

Go语言项目在CentOS上如何部署

小樊
45
2025-12-27 05:15:21
栏目: 编程语言

在 CentOS 上部署 Go 项目的实用流程

一 准备与编译

  • 安装 Go 环境(两种常用方式)
    • YUM 安装:sudo yum install -y golang
    • 手动安装:下载对应版本(如 go1.21.0.linux-amd64.tar.gz),解压至 /usr/local,并配置环境变量(GOROOT、GOPATH、PATH),执行 source 使其生效,最后用 go version 验证。
  • 使用 Go Modules 管理依赖
    • 在项目根目录执行:go mod init ;如需加速依赖下载,可执行:go env -w GOPROXY=https://goproxy.cn,direct。
  • 编译为 Linux 可执行文件(推荐静态编译)
    • 纯 Go 项目:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-s -w” -o myapp main.go
    • 若包含 C 代码需启用 CGO,请先在目标系统或兼容环境中安装编译工具链与依赖库(gcc、gcc-c++、make、openssl-devel 等)。

二 部署与运行

  • 上传与授权
    • 将二进制与配置上传至目标目录(如 /opt/myapp),执行:chmod +x /opt/myapp/myapp。
  • 临时运行与日志
    • 简单方式:nohup /opt/myapp/myapp > /opt/myapp/log.log 2>&1 &
    • 查看进程与日志:ps -ef | grep myapp;tail -f /opt/myapp/log.log
  • 生产级进程管理(推荐 systemd)
    • 创建服务文件:/etc/systemd/system/myapp.service
      • [Unit] Description=My Go Application;After=network.target
      • [Service] User=www;Group=www;WorkingDirectory=/opt/myapp;ExecStart=/opt/myapp/myapp;Restart=always;Environment=“APP_ENV=production” “DATABASE_URL=…”
      • [Install] WantedBy=multi-user.target
    • 启动与自启:sudo systemctl daemon-reload;sudo systemctl start myapp;sudo systemctl enable myapp
    • 查看状态与日志:sudo systemctl status myapp;sudo journalctl -u myapp -f。

三 网络与反向代理

  • 防火墙放行
    • HTTP/HTTPS:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
    • 自定义端口(如 8080):sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
  • Nginx 反向代理(可选)
    • 安装:sudo yum install nginx
    • 配置示例(/etc/nginx/conf.d/myapp.conf):
      • server { listen 80; server_name your_domain_or_ip; location / { 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; } }
    • 生效:sudo systemctl restart nginx。

四 容器化部署

  • 多阶段构建(减小镜像体积,提升可移植性)
    • Dockerfile 示例:
      • FROM golang:1.18 AS builder
      • WORKDIR /app
      • COPY . .
      • RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp .
      • FROM alpine:latest
      • WORKDIR /app
      • COPY --from=builder /app/myapp .
      • EXPOSE 8080
      • CMD [“./myapp”]
    • 构建与运行:docker build -t myapp .;docker run -d -p 8080:8080 --name myapp-container myapp
    • 可使用 Docker Compose 管理多容器(如 Nginx + Go 应用)。

五 常见问题与优化

  • GLIBC 兼容性
    • CentOS 7 自带 glibc 版本较旧(如 2.17)。若新版本 Go 编译的二进制在目标机无法运行,优先在目标 CentOS 上编译,或使用 Docker 在兼容环境编译;纯 Go 项目建议 CGO_ENABLED=0 生成静态二进制以避免依赖系统库。
  • 依赖与网络
    • 国内环境建议设置 GOPROXY=https://goproxy.cn,direct 加速模块下载。
  • 编译与运行优化
    • 使用 -ldflags “-s -w” 去除符号与调试信息,显著减小体积;按需调整 GOGC(如 GOGC=200)降低 GC 频率,提升吞吐(需结合实际内存与延迟目标测试)。
  • 安全与权限
    • 避免使用 root 运行服务,创建专用用户(如 www);配置文件与密钥设置最小权限(如 600);可执行文件部署后及时收回不必要权限。

0