温馨提示×

Golang在CentOS上如何部署

小樊
44
2025-12-19 10:41:47
栏目: 编程语言

在 CentOS 上部署 Golang 的完整流程

一 安装 Go 环境

  • 方式一 YUM 安装(快速、版本可能较旧)
    • 执行:sudo yum install -y golang
    • 验证:go version
  • 方式二 二进制安装(指定版本、推荐)
    • 安装工具:sudo yum -y install wget git
    • 下载(示例为 go1.21.6,可按需替换版本):wget https://golang.org/dl/go1.21.6.linux-amd64.tar.gz -P /usr/local/src
    • 解压:sudo tar -C /usr/local -xzf /usr/local/src/go1.21.6.linux-amd64.tar.gz
    • 配置环境变量(全局生效):
      echo 'export GOROOT=/usr/local/go' | sudo tee -a /etc/profile
      echo 'export PATH=$PATH:$GOROOT/bin' | sudo tee -a /etc/profile
      source /etc/profile
      
    • 验证:go version(应输出版本号)

二 配置模块与国内代理

  • 启用 Go Modules(Go 1.11+ 默认开启,建议保持):go env -w GO111MODULE=on
  • 设置国内模块代理(提升拉取依赖速度):go env -w GOPROXY=https://goproxy.cn,direct
  • 可选:设置常用全局变量(写入 ~/.bashrc/etc/profile
    echo 'export GOPATH=$HOME/go' >> ~/.bashrc
    echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
    source ~/.bashrc
    
  • 说明:现代 Go 开发以模块为主,GOPATH 非必需,但设置后可方便使用 go install 等命令。

三 编译与运行示例

  • 本地或服务器上创建测试程序:cat > main.go << 'EOF'
    package main
    import "fmt"
    func main() { fmt.Println("Hello, 世界") }
    EOF
    
  • 构建:go build -o myapp main.go
  • 运行:./myapp(预期输出:Hello, 世界)
  • 交叉编译示例(在 macOS/Linux 上为 Linux amd64 构建):GOOS=linux GOARCH=amd64 go build -o dist/app-linux-amd64 main.go

四 部署为系统服务

  • 使用 Systemd 管理(推荐)
    • 创建服务文件:sudo tee /etc/systemd/system/myapp.service << 'EOF'
      [Unit]
      Description=My Go Application
      After=network.target
      
      [Service]
      User=youruser
      Group=yourgroup
      ExecStart=/opt/myapp/myapp
      Restart=always
      Environment=GO_ENV=production
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
    • 启动与开机自启:
      sudo systemctl daemon-reload
      sudo systemctl start myapp
      sudo systemctl enable myapp
      sudo systemctl status myapp
      sudo journalctl -u myapp -f
      
  • 使用 Supervisor(CentOS 9 常见替代方案)
    • 安装:sudo yum install -y supervisor
    • 配置:sudo tee /etc/supervisord.d/app.ini << 'EOF'
      [program:app]
      directory=/opt/myapp
      command=/opt/myapp/myapp
      autostart=true
      autorestart=true
      stderr_logfile=/opt/myapp/log/app.err
      stdout_logfile=/opt/myapp/log/app.log
      environment=ENV_VAR1="value1"
      EOF
      
    • 启动:sudo systemctl start supervisord && sudo systemctl enable supervisord
    • 常用:supervisorctl start|stop|restart app

五 网络与反向代理

  • 防火墙放行端口(示例为 8080):
    sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
    sudo firewall-cmd --reload
    
  • Nginx 反向代理(可选,端口 80 转发到 8080
    • 安装:sudo yum install -y nginx
    • 配置:sudo tee /etc/nginx/conf.d/myapp.conf << 'EOF'
      server {
        listen 80;
        server_name yourdomain.com;
        location / {
          proxy_pass http://127.0.0.1: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;
        }
      }
      EOF
      
    • 生效:sudo systemctl reload nginx && sudo systemctl enable nginx

0