# 下载最新版 Go (请替换为最新版本号)
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
# 解压到 /usr/local
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
# 设置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
source ~/.bashrc
# 验证安装
go version
sudo apt update
sudo apt install -y git make gcc
# 克隆你的项目
git clone https://github.com/yourusername/yourproject.git
cd yourproject
# 构建项目 (假设 main.go 是入口文件)
go build -o yourservice main.go
# 运行服务 (前台运行)
./yourservice
# 后台运行 (使用 nohup)
nohup ./yourservice > service.log 2>&1 &
创建服务配置文件 /etc/systemd/system/yourservice.service
:
[Unit]
Description=Your Go Application
After=network.target
[Service]
User=youruser
Group=yourgroup
WorkingDirectory=/path/to/yourproject
ExecStart=/path/to/yourproject/yourservice
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=yourservice
Environment=GIN_MODE=release
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable yourservice
sudo systemctl start yourservice
# 查看状态
sudo systemctl status yourservice
sudo apt install supervisor
创建配置文件 /etc/supervisor/conf.d/yourservice.conf
:
[program:yourservice]
command=/path/to/yourproject/yourservice
directory=/path/to/yourproject
autostart=true
autorestart=true
stderr_logfile=/var/log/yourservice.err.log
stdout_logfile=/var/log/yourservice.out.log
user=youruser
environment=GIN_MODE=release
启动服务:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start yourservice
创建 Dockerfile:
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o yourservice .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/yourservice .
EXPOSE 8080
CMD ["./yourservice"]
构建并运行:
docker build -t yourservice .
docker run -d -p 8080:8080 --name yourservice-container yourservice
构建优化:
# 禁用调试信息减小二进制大小
go build -ldflags="-s -w" -o yourservice main.go
# 使用 upx 进一步压缩
upx yourservice
环境变量:
GIN_MODE=release
(如果使用 Gin 框架)GOGC=50
可以调整垃圾回收频率反向代理:
# 使用 logrotate 管理日志
sudo nano /etc/logrotate.d/yourservice
添加内容:
/var/log/yourservice.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
# 安装 Prometheus node exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
./node_exporter
端口冲突:
netstat -tulnp | grep :8080
kill -9 <PID>
依赖问题:
go mod tidy
权限问题:
sudo chown -R youruser:yourgroup /path/to/yourproject
内存泄漏检查:
go tool pprof http://localhost:6060/debug/pprof/heap
按照这些步骤,你应该能够在 Linux 系统上成功部署并维护你的 Golang 服务。根据你的具体需求选择最适合的部署方式。