跳至主要內容

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

逸尘.Lycodx大约 2 分钟后端goLinux

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

交叉编译注意事项

  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)强制终止进程

方案特点

  • 适合快速临时部署
  • 无自动重启机制
  • 日志文件可能无限增长,建议配合 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 服务管理教程 open in new window

上次编辑于: