在 Ubuntu 中使用 Golang 打包 Web 应用,通常包括 编译可执行文件、处理静态资源、设置运行环境 等步骤。下面按常见场景给你一个完整、实用的指南。
sudo apt update
sudo apt install -y golang-go
检查版本:
go version
建议 Go ≥ 1.20
如需新版本,可使用 https://go.dev/dl/
假设你的 Web 项目结构如下:
my-web-app/
├── main.go
├── go.mod
├── static/
│ └── style.css
├── templates/
│ └── index.html
main.go 示例:
package main
import (
"fmt"
"net/http"
)
func main() {
fs := http.FileServer(http.Dir("static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, Golang Web!")
})
http.ListenAndServe(":8080", nil)
}
go build -o myweb
./myweb
GOOS=linux GOARCH=amd64 go build -o myweb
GOOS=windows GOARCH=amd64 go build -o myweb.exe
GOOS=darwin GOARCH=amd64 go build -o myweb
Go Web 应用常见问题是:部署时找不到 static / templates 文件
embed(推荐)Go 1.16+ 支持 //go:embed
package main
import (
"embed"
"net/http"
)
//go:embed static templates
var content embed.FS
func main() {
fs := http.FileServer(http.FS(content))
http.Handle("/static/", fs)
http.ListenAndServe(":8080", nil)
}
✅ 优点:
部署时目录结构保持:
myweb
static/
templates/
运行:
./myweb
Go 默认不压缩,可用 upx:
sudo apt install upx
upx myweb
scp myweb user@server:/opt/myweb/
chmod +x /opt/myweb/myweb
/opt/myweb/myweb
创建服务文件:
sudo nano /etc/systemd/system/myweb.service
内容示例:
[Unit]
Description=My Golang Web App
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/opt/myweb
ExecStart=/opt/myweb/myweb
Restart=always
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl start myweb
sudo systemctl enable myweb
查看状态:
sudo systemctl status myweb
sudo apt install nginx
配置:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
✅ 使用 embed 或 绝对路径
✅ 检查防火墙:
sudo ufw allow 80
sudo ufw allow 8080
✅ 编写代码
✅ go build 编译
✅ 使用 embed 或保持目录
✅ systemd 管理
✅ Nginx 反向代理
如果你使用的是 Gin / Echo / Fiber 或想 Docker 打包,告诉我,我可以给你针对性方案。