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);可执行文件部署后及时收回不必要权限。