温馨提示×

在Linux上部署Go语言应用的步骤

小樊
50
2025-10-26 19:55:55
栏目: 编程语言

1. 安装Go语言环境

在Linux上部署Go应用前,需先安装Go环境。步骤如下:

  • 安装依赖:确保系统有gccmake等编译工具,执行sudo apt-get update && sudo apt-get install build-essential(Ubuntu/Debian)或对应发行版的包管理命令。
  • 下载并解压Go:从Go官网下载对应Linux架构的安装包(如go1.20.4.linux-amd64.tar.gz),解压至/usr/local目录:sudo tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz
  • 配置环境变量:编辑~/.bashrc(或/etc/profile)文件,添加以下内容:
    export PATH=$PATH:/usr/local/go/bin
    export GOPATH=$HOME/go
    export GOROOT=/usr/local/go
    
    执行source ~/.bashrc使配置生效。
  • 验证安装:运行go version,若输出Go版本信息则安装成功。

2. 编译Go应用

  • 开发环境编译:在项目目录下(如myapp),执行go build -o myapp,生成可执行文件myapp(Windows下为myapp.exe)。
  • 交叉编译(可选):若需在Linux服务器上运行,可直接在开发机器上指定目标平台编译(避免服务器安装Go环境):
    GOOS=linux GOARCH=amd64 go build -o myapp
    
    其中GOOS为目标系统(如linuxwindows),GOARCH为目标架构(如amd64arm64)。

3. 部署可执行文件到服务器

将编译好的myapp文件传输到Linux服务器,常用方法:

  • scp命令scp myapp user@your_server_ip:/path/to/deployuser为服务器用户名,/path/to/deploy为目标路径)。
  • rsync命令rsync -avz myapp user@your_server_ip:/path/to/deploy(支持增量同步)。
    传输后,登录服务器,执行chmod +x /path/to/deploy/myapp赋予执行权限。

4. 运行Go应用

  • 直接运行:在终端执行/path/to/deploy/myapp,应用会在当前终端运行(若关闭终端,应用会终止)。
  • 后台运行:使用nohup命令让应用在后台持续运行:nohup /path/to/deploy/myapp > app.log 2>&1 &(日志输出到app.log文件)。
  • systemd服务(推荐):实现开机自启、进程监控和自动重启,步骤如下:
    1. 创建服务文件:sudo nano /etc/systemd/system/myapp.service,内容如下:
      [Unit]
      Description=My Go Application
      After=network.target
      
      [Service]
      Type=simple
      User=your_user  # 替换为实际用户(如ubuntu)
      Group=your_group  # 替换为实际组(如ubuntu)
      WorkingDirectory=/path/to/deploy  # 应用所在目录
      ExecStart=/path/to/deploy/myapp  # 启动命令
      Restart=always  # 崩溃后自动重启
      RestartSec=5  # 重启间隔5秒
      Environment=ENV_VAR_NAME=value  # 设置环境变量(可选)
      
      [Install]
      WantedBy=multi-user.target
      
    2. 启用并启动服务:
      sudo systemctl daemon-reload
      sudo systemctl start myapp
      sudo systemctl enable myapp  # 开机自启
      
    3. 查看状态:sudo systemctl status myapp(显示active (running)表示运行正常)。

5. 配置反向代理(可选,生产环境推荐)

若需通过HTTP/HTTPS访问应用(如http://your_domain.com),可使用Nginx作为反向代理,步骤如下:

  • 安装Nginxsudo apt install nginx(Ubuntu/Debian)。
  • 配置Nginx:编辑/etc/nginx/sites-available/myapp(或/etc/nginx/conf.d/myapp.conf),添加以下内容:
    server {
        listen 80;
        server_name your_domain_or_ip;  # 替换为域名或IP
    
        location / {
            proxy_pass http://localhost:8080;  # 转发到Go应用的端口(需与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 ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    sudo nginx -t  # 测试配置语法
    sudo systemctl restart nginx
    
    此时,访问http://your_domain_or_ip会转发到Go应用的8080端口(需确保Go应用监听0.0.0.0:8080,而非127.0.0.1:8080)。

6. 防火墙配置

若服务器开启了防火墙(如ufw),需允许应用端口(如8080)的流量:

sudo ufw allow 8080/tcp  # 允许TCP协议的8080端口
sudo ufw enable  # 启用防火墙(若未启用)
sudo ufw status  # 查看防火墙状态

若使用Nginx反向代理,还需允许80(HTTP)或443(HTTPS)端口:sudo ufw allow 80/tcp

7. 日志与监控

  • 应用日志:若使用nohup或直接运行,日志会输出到终端或app.log文件;若使用systemd,日志可通过journalctl查看:sudo journalctl -u myapp -f(实时查看)。
  • 监控进程:使用systemctl status myapp查看进程状态,或用tophtop命令监控系统资源占用。

以上步骤覆盖了Linux环境下Go应用部署的全流程,从环境安装到服务化管理,确保应用稳定运行。

0