在 Ubuntu(以及其它 Linux 发行版)上,**“打 Golang 编译出来的包”**通常有几种理解,我分场景给你说明,你对照用哪种。
如果你只是想 在 Ubuntu 上编译 Go 程序,不需要“打包”:
# 安装 Go(以 Ubuntu 为例)
sudo apt update
sudo apt install golang-go
# 编译
cd your_project
go build -o myapp
# 运行
./myapp
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
如果你要在 Ubuntu 上 像 apt 安装软件一样分发,用 .deb 包。
dpkg-deb(最基础)目录结构:
myapp/
├── DEBIAN
│ └── control
├── usr
│ └── local
│ └── bin
│ └── myapp
DEBIAN/control 示例:
Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you <you@example.com>
Description: My Go application
构建:
dpkg-deb --build myapp
安装:
sudo dpkg -i myapp.deb
nfpm(Go 官方社区推荐)go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest
nfpm.yaml:
name: myapp
arch: amd64
platform: linux
version: 1.0.0
maintainer: you <you@example.com>
description: My Go app
contents:
- src: ./myapp
dst: /usr/local/bin/myapp
打包:
nfpm package -f nfpm.yaml -t myapp.deb
- name: Build
run: |
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
- name: Package deb
run: |
nfpm package -f nfpm.yaml -t myapp.deb
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app
FROM ubuntu
COPY --from=build /src/app /usr/local/bin/app
snapcraft
| 需求 | 推荐方式 |
|---|---|
| 只是运行 | go build |
| 服务器部署 | 静态编译 + systemd |
| 软件分发 | .deb(nfpm) |
| CI 自动发布 | GitHub Actions + nfpm |
如果你能说清楚:
我可以直接给你一套完整示例。