← 返回技术札记
运维实践

Go 项目在 Linux 系统中的部署指南

本文系统讲解 Go 应用程序在 Linux 环境下的完整部署方案,涵盖两大主流部署方式和工程化实践要点。

goLinux

Go 项目在 Linux 系统中的部署指南

一、项目打包

1.1 基础打包命令

go build -o project
  • Windows 系统生成.exe可执行文件
  • Linux 系统生成可执行二进制文件

tip 文件权限说明

Linux 系统生成的二进制文件需添加执行权限:

chmod +x project

1.2 交叉编译打包

在 Windows 系统编译 Linux 可执行文件:

set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -o project

warning 交叉编译注意事项

  1. 建议显式禁用 CGO(CGO_ENABLED=0)
  2. 可根据目标架构调整 GOARCH 参数(amd64/arm64)
  3. 推荐在 Docker 容器中进行编译保证环境一致性

二、部署方案

2.1 nohup 后台运行方案

nohup ./project > nohup.out 2>&1 &

操作命令集

命令 说明
ps -ef | grep project 查看进程状态
tail -f nohup.out 实时查看日志输出
kill -9 $(pgrep project) 强制终止进程

tip 方案特点

  • 适合快速临时部署
  • 无自动重启机制
  • 日志文件可能无限增长,建议配合 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%

参考1:易懂的 Systemd 服务管理教程