下面按从编译到部署的完整流程,给你一个在 Ubuntu + Golang 上的实战指南,适合新手到生产环境。
sudo rm -rf /usr/local/go
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
验证:
go version
go build -o app main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w" -o app main.go
说明:
CGO_ENABLED=0:不依赖系统库-s -w:减小体积./app
后台运行:
nohup ./app > app.log 2>&1 &
sudo vim /etc/systemd/system/myapp.service
内容示例:
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/app
WorkingDirectory=/opt/myapp
User=www-data
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
查看状态:
sudo systemctl status myapp
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o app
FROM alpine
WORKDIR /app
COPY --from=build /src/app .
CMD ["./app"]
构建运行:
docker build -t myapp .
docker run -d -p 8080:8080 myapp
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
✅ Ubuntu 防火墙
sudo ufw allow 8080
✅ 端口被占用
lsof -i:8080
✅ 权限问题
chmod +x app
/opt/myapp/
├── app
├── config.yaml
└── logs/
如果你愿意,可以告诉我:
我可以直接给你一套最适合你的部署方案。