在Linux系统上部署Golang服务,核心流程包含程序编译、文件传输、服务配置三个主要环节,每个环节都有需要注意的细节,才能保证服务稳定运行。

环境准备
首先需要确认本地开发环境和目标Linux服务器的基础环境。本地需要有Golang开发环境用于编译程序,目标Linux服务器建议使用主流的发行版比如Ubuntu、CentOS等,同时需要拥有服务器的SSH登录权限,方便后续传输文件和配置服务。
交叉编译Golang程序
Golang支持交叉编译,不需要在Linux服务器上安装Golang环境,只需要在本地编译出适配Linux系统的二进制文件即可。编译时需要注意设置正确的环境变量,确保生成的程序能在目标Linux架构上运行。
如果是64位Linux系统,在本地终端执行以下命令编译:
# 设置目标系统为Linux,架构为amd64 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.go
编译完成后会生成名为app的二进制文件,这个文件就是可以直接在Linux上运行的程序。如果目标服务器是arm架构,只需要把GOARCH参数改成arm64即可。
传输二进制文件到Linux服务器
编译好的二进制文件需要传输到Linux服务器上,常用的传输方式有两种,一种是使用scp命令,另一种是通过可视化工具比如FileZilla传输。
使用scp命令传输的示例如下,假设本地文件路径是./app,服务器用户是root,服务器IP是192.168.0.1,目标目录是/opt/golang_app:
scp ./app root@192.168.0.1:/opt/golang_app/
传输完成后,需要登录服务器给二进制文件添加可执行权限,执行以下命令:
chmod +x /opt/golang_app/app
此时可以先手动运行程序测试是否正常启动:
/opt/golang_app/app
如果程序启动后输出正常的日志,说明二进制文件可以正常运行,接下来需要配置服务持久化运行。
配置systemd管理服务
手动启动的程序在终端关闭后就会停止运行,也不支持开机自启,因此需要用systemd来管理Golang服务,实现服务的后台运行、开机自启和异常自动重启。
首先在/etc/systemd/system目录下创建服务配置文件,比如命名为golang_app.service:
vim /etc/systemd/system/golang_app.service
在文件中添加以下内容,根据实际情况修改路径和用户信息:
[Unit] # 服务描述 Description=Golang Application Service # 服务在网络服务启动后运行 After=network.target [Service] # 服务运行用户,建议使用非root用户提高安全性 User=root # 工作目录 WorkingDirectory=/opt/golang_app # 启动命令,填写二进制文件的完整路径 ExecStart=/opt/golang_app/app # 程序异常退出时自动重启 Restart=always # 重启等待时间 RestartSec=5 # 环境变量配置,比如端口、数据库连接等 Environment="APP_PORT=8080" Environment="DB_HOST=127.0.0.1" [Install] # 多用户模式下开机自启 WantedBy=multi-user.target
配置文件保存后,执行以下命令重新加载systemd配置:
systemctl daemon-reload
然后启动服务并设置开机自启:
# 启动服务 systemctl start golang_app # 设置开机自启 systemctl enable golang_app
服务状态检查与常用操作
服务启动后可以通过以下命令检查运行状态:
systemctl status golang_app
如果状态显示active (running),说明服务正常运行。常用的服务操作命令如下:
- 停止服务:systemctl stop golang_app
- 重启服务:systemctl restart golang_app
- 查看服务日志:journalctl -u golang_app -f
常见问题排查
如果服务启动失败,首先查看服务日志定位问题,常见的问题有以下几类:
- 二进制文件没有可执行权限,重新执行chmod +x命令添加权限即可
- 配置文件中的路径错误,检查ExecStart和WorkingDirectory的路径是否正确
- 程序依赖的环境变量没有配置,在service文件的Environment字段补充对应的环境变量
- 端口被占用,修改程序监听的端口或者停止占用端口的进程
按照以上步骤操作,就可以完成Golang服务在Linux上的完整部署,服务会自动在后台运行,出现异常也会自动重启,同时支持服务器重启后自动启动。