阅读量:33
CentOS Golang项目部署配置要点
1. 环境准备:安装Go及依赖
- 安装Go环境:通过YUM或手动下载安装包部署。例如,使用YUM命令
sudo yum install golang快速安装;或从官网下载对应版本(如go1.18.linux-amd64.tar.gz),解压至/usr/local,并配置环境变量(GOROOT=/usr/local/go、GOPATH=$HOME/go、PATH=$PATH:$GOROOT/bin:$GOPATH/bin),通过source ~/.bashrc生效。 - 安装编译依赖:若项目包含C代码(未禁用CGO),需安装编译工具链和库:
sudo yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel,确保交叉编译时能正确链接依赖。
2. 项目编译:生成可执行文件
- 初始化模块(若使用Go Modules):在项目根目录执行
go mod init(如example.com/myapp),生成go.mod文件管理依赖。 - 交叉编译(推荐):针对CentOS(Linux amd64架构)编译,关闭CGO以提升可移植性:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go。使用-ldflags="-s -w"去除调试信息和符号表,减小文件体积(如-ldflags="-s -w" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp)。
3. 部署与运行:基础执行配置
- 上传与授权:使用
scp将编译后的可执行文件上传至服务器(如scp myapp-linux-amd64 user@server_ip:/opt/myapp),并通过chmod +x /opt/myapp/myapp-linux-amd64赋予执行权限。 - 后台运行:通过
nohup命令让程序在后台持续运行,并将日志输出至文件:nohup /opt/myapp/myapp-linux-amd64 > /opt/myapp/log.log 2>&1 &。但此方式缺乏进程管理,仅适用于测试环境。
4. 进程管理:使用systemd实现守护进程
- 创建服务文件:在
/etc/systemd/system/下创建.service文件(如myapp.service),内容示例:[Unit] Description=My Golang Application After=network.target [Service] User=www # 建议使用非root用户(如www) Group=www WorkingDirectory=/opt/myapp # 项目工作目录 ExecStart=/opt/myapp/myapp-linux-amd64 # 可执行文件路径 Restart=always # 失败时自动重启 Environment="APP_ENV=production" "DATABASE_URL=mysql://user:pass@localhost/db" # 环境变量 [Install] WantedBy=multi-user.target - 启动与设置开机自启:执行
sudo systemctl daemon-reload重新加载配置,sudo systemctl start myapp.service启动服务,sudo systemctl enable myapp.service设置开机自启。通过systemctl status myapp.service查看状态。
5. 网络配置:防火墙与反向代理
- 开放防火墙端口:若项目监听8080端口,允许HTTP/HTTPS流量:
sudo firewall-cmd --permanent --add-service=http --add-service=https,sudo firewall-cmd --reload。若使用自定义端口(如8080),需添加--add-port=8080/tcp。 - 配置Nginx反向代理(可选):安装Nginx(
sudo yum install nginx),编辑配置文件(如/etc/nginx/conf.d/myapp.conf),添加反向代理规则:重启Nginx(server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://localhost:8080; # 转发至Go应用端口 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)后,可通过域名或IP访问应用。
6. 可选优化:Docker容器化部署
- 编写Dockerfile:在项目根目录创建
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应用)。