1. 环境准备
1.1 更新系统
sudo apt update && sudo apt upgrade -y# Ubuntu/Debian
# 或
sudo yum update -y# CentOS/RHEL
1.2 安装必要工具
sudo apt install -ycurlwgetgit build-essential # Ubuntu/Debian
sudo yum install -ycurlwgetgitgcc# CentOS/RHEL
2. Go 环境安装
2.1 下载 Go
# 查看最新版本:https://golang.org/dl/
cd /tmp
wget https://golang.org/dl/go1.21.6.linux-amd64.tar.gz
# 或者指定版本(推荐)
GO_VERSION="1.21.6"
wget https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
2.2 安装 Go
# 删除旧版本(如果存在)
sudorm-rf /usr/local/go
# 解压到 /usr/local
sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
# 清理安装包
rm go${GO_VERSION}.linux-amd64.tar.gz
2.3 配置环境变量
# 编辑 ~/.bashrc 或 ~/.zshrc
echo'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo'export GOPATH=$HOME/go' >> ~/.bashrc
echo'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
# 立即生效
source ~/.bashrc
# 验证安装
go version
3. 部署 Go 应用
3.1 从源码部署
# 克隆项目(示例)
cd /opt
git clone https://github.com/yourusername/your-app.git
cd your-app
# 安装依赖
go mod tidy
# 编译
go build -o app .
# 直接运行
./app
4. 使用 Systemd 管理服务
4.1 创建 service 文件
sudovi /etc/systemd/system/go-app.service
4.2 Service 文件内容
[Unit]
Description=Go Application
After=network.target
[Service]
Type=simple
User=www-data # 根据实际情况修改
Group=www-data
WorkingDirectory=/opt/your-app
ExecStart=/opt/your-app/app
Restart=always
RestartSec=10
Environment="PORT=8080"
Environment="DATABASE_URL=postgres://user:pass@localhost/db"
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=go-app
[Install]
WantedBy=multi-user.target
4.3 启动服务
# 重载 systemd
sudo systemctl daemon-reload
# 启用服务(开机自启)
sudo systemctl enable go-app.service
# 启动服务
sudo systemctl start go-app.service
# 查看状态
sudo systemctl status go-app.service
# 查看日志
sudo journalctl -u go-app.service -f
5. 使用 Nginx 反向代理(推荐)
5.1 安装 Nginx
sudo apt install -y nginx # Ubuntu/Debian
sudo yum install -y nginx # CentOS/RHEL
5.2 配置 Nginx
sudovi /etc/nginx/sites-available/go-app
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}5.3 启用配置
# Ubuntu/Debian
sudoln-s /etc/nginx/sites-available/go-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# CentOS/RHEL
sudocp go-app.conf /etc/nginx/conf.d/
sudo nginx -t
sudo systemctl reload nginx
6. 常用命令总结
# 查看 Go 环境
go env
go version
# 模块管理
go mod init [module-name]
go mod tidy
go mod vendor
# 运行测试
go test ./...
go test -v ./...
# 性能分析
go tool pprof [options]
# 构建优化
# 减少二进制大小
go build -ldflags="-s -w"-o app .
# 禁用 CGO
CGO_ENABLED=0 go build -o app .
7. 监控和维护
# 查看应用运行状态
ps aux | grep app
netstat -tlnp | grep :8080
# 查看资源使用
top-p$(pgrep app)
htop
# 查看日志
tail -f /var/log/go-app/out.log
journalctl -u go-app -f--lines=50
# 健康检查(假设应用有 /health 端点)
curl http://localhost:8080/health
注意事项
权限管理:生产环境避免使用 root 运行应用
防火墙:确保端口开放
日志轮转:配置 logrotate 防止日志过大
备份:定期备份重要数据和配置文件
监控:设置监控告警(如使用 Prometheus + Grafana)