Golang 本地打包后上传到 Linux 服务器上运行
笔记 创建于: , 更新于: | Golang将 Go(Golang)程序从本地打包并部署到 Linux 服务器上非常简单,因为 Go 支持交叉编译,可以直接在 Windows 或 macOS 上生成 Linux 可执行的二进制文件,无需在服务器上安装 Go 环境,并使用 systemd 服务运行。
1. 本地交叉编译
Go 通过两个环境变量来控制编译的目标系统和架构:GOOS(目标操作系统)和 GOARCH(目标芯片架构)。
打开本地终端(Terminal 或 PowerShell),进入你的项目根目录,根据你的本地系统执行以下命令:
在 Windows (CMD / PowerShell) 上打包:
| |
在 macOS / Linux 上打包:
| |
注意: CGO_ENABLED=0 表示关闭 C 语言工具链的依赖,这样编译出来的二进制文件是完全静态的,可以在任何 Linux 发行版(如 Ubuntu, CentOS)上直接运行,避免因链接库版本不同而报错。
2. 将二进制文件上传到 Linux 服务器
使用 scp、sftp 或任何图形化工具(如 FileZilla、Xftp)将本地生成的 myapp 上传到服务器。 使用 scp 命令上传示例:
| |
如果你的程序包含配置文件(如 config.yaml)或静态资源(如 html/、static/ 文件夹),记得把它们也一并上传到服务器的同级目录下。
3. 在服务器上配置并运行
使用 SSH 登录到你的 Linux 服务器。
- 赋予执行权限 刚上传的文件通常没有执行权限,需要先解锁:
| |
- 测试运行
先在前台运行一下,看看是否能正常启动(按 Ctrl + C 可以退出):
| |
4. 后台持续运行(推荐方案)
在生产环境中,你不能直接在前台运行程序,否则关闭 SSH 终端后程序就退出了。推荐使用以下两种方式:
1. 使用 nohup(简单快捷), 适合临时测试或小型项目。
| |
> output.log:将标准输出日志重定向到 output.log 文件。
2>&1:将错误日志也写入同一个文件。
&:在后台运行。
停止程序: 先用 ps aux | grep myapp 找到进程 ID (PID),然后执行 kill PID。
2. 使用 systemd 服务(专业、生产环境推荐)
将 Go 程序注册为 Linux 系统服务,支持开机自启和自动崩溃重启。
- 创建服务配置文件:
| |
- 写入以下内容(根据实际情况修改路径和用户名):
| |
- 管理服务命令:
| |
完成。

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