在 Ubuntu 上“打包 Golang”通常指把 Go 程序编译成可执行文件,或做成 deb / 容器 / 发布包。下面按常见场景给你一套实用方案。
sudo apt update
sudo apt install golang-go
# 或官方版本
# https://go.dev/dl/
验证:
go version
cd your_project
go build -o myapp main.go
交叉编译(例如给 centos / arm):
GOOS=linux GOARCH=amd64 go build -o myapp
GOOS=linux GOARCH=arm64 go build -o myapp-arm
.deb 包 ✅ 推荐dpkg-deb(简单)目录结构:
myapp/
├── DEBIAN
│ └── control
├── usr
│ └── local
│ └── bin
│ └── myapp
control 文件示例:
Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Maintainer: you <you@mail.com>
Description: My Go app
打包:
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@mail.com>
description: My Go app
contents:
- src: ./myapp
dst: /usr/local/bin/myapp
mode: 0755
生成 deb:
nfpm pkg --target myapp.deb
build:
go build -o myapp main.go
deb:
nfpm pkg --target myapp.deb
clean:
rm -f myapp myapp.deb
make build
make deb
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM ubuntu:22.04
COPY --from=build /app/myapp /usr/local/bin/myapp
ENTRYPOINT ["myapp"]
docker build -t myapp .
✅ 静态编译(避免依赖 glibc):
CGO_ENABLED=0 go build -o myapp
✅ 权限问题:
chmod +x myapp
如果你告诉我:
我可以直接给你完整模板。