CentOS Golang项目部署配置要点
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生效。sudo yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel,确保交叉编译时能正确链接依赖。go mod init <module-name>(如example.com/myapp),生成go.mod文件管理依赖。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)。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 &。但此方式缺乏进程管理,仅适用于测试环境。/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查看状态。sudo firewall-cmd --permanent --add-service=http --add-service=https,sudo firewall-cmd --reload。若使用自定义端口(如8080),需添加--add-port=8080/tcp。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; # 转发至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;
}
}
重启Nginx(sudo systemctl restart nginx)后,可通过域名或IP访问应用。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应用)。