Go 项目在 Linux 系统中的部署指南
大约 2 分钟
Go 项目在 Linux 系统中的部署指南
一、项目打包
1.1 基础打包命令
go build -o project
- Windows 系统生成
.exe可执行文件 - Linux 系统生成可执行二进制文件
文件权限说明
Linux 系统生成的二进制文件需添加执行权限:
chmod +x project
1.2 交叉编译打包
在 Windows 系统编译 Linux 可执行文件:
set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -o project
交叉编译注意事项
- 建议显式禁用 CGO(CGO_ENABLED=0)
- 可根据目标架构调整 GOARCH 参数(amd64/arm64)
- 推荐在 Docker 容器中进行编译保证环境一致性
二、部署方案
2.1 nohup 后台运行方案
nohup ./project > nohup.out 2>&1 &
操作命令集
| 命令 | 说明 |
|---|---|
| ps -ef | grep project | 查看进程状态 |
| tail -f nohup.out | 实时查看日志输出 |
| kill -9 $(pgrep project) | 强制终止进程 |
方案特点
- 适合快速临时部署
- 无自动重启机制
- 日志文件可能无限增长,建议配合 logrotate 使用
2.2 systemd 服务化部署
1)创建服务文件
推荐存储路径:/etc/systemd/system/project.service
[Unit]
Description=Go Project Service
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/project
ExecStart=/opt/project/project -port=9090
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
2)关键配置说明
| 参数 | 说明 |
|---|---|
| Type=simple | 服务类型(推荐保持默认) |
| User | 指定运行用户(建议使用非root用户) |
| Restart | 重启策略(always | on-failure | no) |
| RestartSec | 服务重启间隔 |
| WorkingDirectory | 工作目录(影响相对路径和文件操作) |
3)服务管理命令
# 重载服务配置
sudo systemctl daemon-reload
# 服务启停管理
sudo systemctl start project.service
sudo systemctl stop project.service
sudo systemctl restart project.service
# 查看服务状态
systemctl status project.service
# 设置开机启动
systemctl enable project.service
4)日志管理
# 查看完整日志
journalctl -u project.service
# 实时追踪日志
journalctl -u project.service -f
# 按时间筛选日志
journalctl -u project.service --since "2023-07-01" --until "2023-07-02"
5)常见问题处理
① 服务配置更新后操作流程:
修改
.service文件执行重载配置:
systemctl daemon-reload systemctl restart project.service
② 服务启动失败排查
# 查看启动日志
journalctl -xe --unit project.service
三、部署方案对比
| 特性 | nohup方案 | systemd方案 |
|---|---|---|
| 自动重启 | ❌ | ✔️ |
| 开机启动 | 需手动配置 | ✔️ |
| 日志管理 | 单一文件 | 系统级管理 |
| 资源限制 | ❌ | 可配置CPU/内存限制 |
| 适合场景 | 快速测试 | 生产环境 |
四、扩展
重要服务建议配置资源限制:
[Service]
MemoryLimit=512M
CPUQuota=150%