Golang 本地打包后上传到 Linux 服务器上运行

笔记 创建于: , 更新于: | Golang

将 Go(Golang)程序从本地打包并部署到 Linux 服务器上非常简单,因为 Go 支持交叉编译,可以直接在 Windows 或 macOS 上生成 Linux 可执行的二进制文件,无需在服务器上安装 Go 环境,并使用 systemd 服务运行。

1. 本地交叉编译

Go 通过两个环境变量来控制编译的目标系统和架构:GOOS(目标操作系统)和 GOARCH(目标芯片架构)。

打开本地终端(Terminal 或 PowerShell),进入你的项目根目录,根据你的本地系统执行以下命令:

在 Windows (CMD / PowerShell) 上打包:

1
2
3
4
5
6
# 设置目标操作系统为 Linux
$env:GOOS="linux"
# 设置目标架构为 amd64 (大多数 Linux 服务器适用)
$env:GOARCH="amd64"
# 编译生成二进制文件(假设叫 myapp)
go build -o myapp main.go

在 macOS / Linux 上打包:

1
2
# 一行命令搞定
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go

注意: CGO_ENABLED=0 表示关闭 C 语言工具链的依赖,这样编译出来的二进制文件是完全静态的,可以在任何 Linux 发行版(如 Ubuntu, CentOS)上直接运行,避免因链接库版本不同而报错。

2. 将二进制文件上传到 Linux 服务器

使用 scp、sftp 或任何图形化工具(如 FileZilla、Xftp)将本地生成的 myapp 上传到服务器。 使用 scp 命令上传示例:

1
2
# 语法:scp 本地文件路径 用户名@服务器IP:服务器目标路径
scp ./myapp [email protected]:/www/wwwroot/myapp_dir/

如果你的程序包含配置文件(如 config.yaml)或静态资源(如 html/、static/ 文件夹),记得把它们也一并上传到服务器的同级目录下。

3. 在服务器上配置并运行

使用 SSH 登录到你的 Linux 服务器。

  1. 赋予执行权限 刚上传的文件通常没有执行权限,需要先解锁:
1
2
cd /www/wwwroot/myapp_dir/
chmod +x myapp
  1. 测试运行

先在前台运行一下,看看是否能正常启动(按 Ctrl + C 可以退出):

1
./myapp

4. 后台持续运行(推荐方案)

在生产环境中,你不能直接在前台运行程序,否则关闭 SSH 终端后程序就退出了。推荐使用以下两种方式:

1. 使用 nohup(简单快捷), 适合临时测试或小型项目。

1
nohup ./myapp > output.log 2>&1 &

2. 使用 systemd 服务(专业、生产环境推荐)

将 Go 程序注册为 Linux 系统服务,支持开机自启和自动崩溃重启。

  1. 创建服务配置文件:
1
sudo nano /etc/systemd/system/myapp.service
  1. 写入以下内容(根据实际情况修改路径和用户名):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=My Golang Application
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/www/wwwroot/myapp_dir
ExecStart=/www/wwwroot/myapp_dir/myapp
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. 管理服务命令:
1
2
3
4
5
sudo systemctl daemon-reload      # 重载配置
sudo systemctl start myapp        # 启动服务
sudo systemctl enable myapp       # 设置开机自启
sudo systemctl status myapp       # 查看运行状态
sudo systemctl restart myapp      # 重启服务

完成。

笔记标签:

评论 ( 如有任何问题,请在下方留言和讨论 )