在 Ubuntu 上部署 Golang 应用,通常分为准备环境 → 构建应用 → 运行/守护 → (可选)反向代理几个步骤。下面给你一套实战可用、由简到优的方案。
sudo apt update
sudo apt install -y golang-go
验证:
go version
如果需要新版本 Go,建议从 https://go.dev/dl 下载官方包。
scp -r your_project user@server:/opt/yourapp
cd /opt/yourapp
go mod tidy
CGO_ENABLED=0 GOOS=linux go build -o app main.go
生成的 app 就是可执行文件。
./app
❌ 问题:终端关闭就停了
✅ 适合:临时测试
sudo vim /etc/systemd/system/yourapp.service
内容示例:
[Unit]
Description=Golang App
After=network.target
[Service]
User=www
WorkingDirectory=/opt/yourapp
ExecStart=/opt/yourapp/app
Restart=always
Environment=GO_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable yourapp
sudo systemctl start yourapp
sudo systemctl status yourapp
journalctl -u yourapp -f
sudo apt install nginx
sudo vim /etc/nginx/sites-available/yourapp
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
.env + godotenvEnvironment=sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
FROM golang:1.22 as build
WORKDIR /app
COPY . .
RUN go build -o app
FROM alpine
COPY --from=build /app/app /app
CMD ["/app"]
❌ permission denied → 用非 root 用户运行
❌ 端口被占用 → lsof -i:8080
❌ CGO 报错 → CGO_ENABLED=0
❌ 防火墙 → ufw allow 80/443
Go 编译 → systemd 守护 → Nginx 反代 → Certbot HTTPS
如果你愿意,可以告诉我:
我可以直接给你一套定制部署模板。