在 Ubuntu 上发布 Golang 打包的应用,常见方式有几种,取决于你是否需要分发给其他用户、是否走官方渠道。下面按 从简单到规范 给你讲清楚。
GOOS=linux GOARCH=amd64 go build -o myapp main.go
建议加上:
go build -trimpath -ldflags="-s -w" -o myapp
-trimpath:去掉路径信息-s -w:减小体积、去掉调试信息sudo cp myapp /usr/local/bin/
用户直接运行:
myapp
✅ 优点:简单、快
❌ 缺点:不标准、不适合大规模分发
.deb(推荐 ✅,Ubuntu 标准方式)myapp_1.0.0/
├── DEBIAN
│ └── control
├── usr
│ └── local
│ └── bin
│ └── myapp
DEBIAN/controlPackage: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you <you@example.com>
Description: My Golang App
A simple golang application.
cp myapp myapp_1.0.0/usr/local/bin/
chmod 755 myapp_1.0.0/usr/local/bin/myapp
dpkg-deb --build myapp_1.0.0
生成:
myapp_1.0.0.deb
sudo dpkg -i myapp_1.0.0.deb
✅ 优点:
适合对外发布、长期维护。
使用 dh-make + debuild
sudo apt install dh-make devscripts
dh_make -s --indep --createorig
debuild -S
dput ppa:yourname/ppa myapp_1.0.0_source.changes
用户安装:
sudo add-apt-repository ppa:yourname/ppa
sudo apt update
sudo apt install myapp
✅ 优点:
apt install 即可❌ 缺点:流程偏复杂
sudo snap install snapcraft --classic
snapcraft init
snap/snapcraft.yamlname: myapp
version: "1.0.0"
summary: My Golang App
description: |
A golang application
base: core22
confinement: strict
parts:
myapp:
plugin: go
source: .
build-packages:
- golang-go
apps:
myapp:
command: bin/myapp
snapcraft
生成:
myapp_1.0.0_amd64.snap
sudo snap install myapp_1.0.0_amd64.snap --dangerous
✅ 优点:
❌ 缺点:
适合 无需安装
go build -o AppRun main.go
使用 appimagetool 打包成 AppImage
✅ 优点:
❌ 缺点:
| 场景 | 推荐方式 |
|---|---|
| 自己用 / 内网 | 二进制 |
| 给 Ubuntu 用户 | .deb |
| 长期维护、正式发布 | PPA |
| 跨发行版 | Snap |
| 便携式发布 | AppImage |
✅ 交叉编译
GOOS=linux GOARCH=amd64 go build
✅ 版本管理
go build -ldflags "-X main.Version=1.0.0"
✅ systemd 服务(后台程序)
[Unit]
Description=MyApp
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
如果你愿意,我可以:
你现在的应用是 CLI / GUI / 后台服务?