服务器硬件选择
基础环境部署
# 下载最新稳定版Go(以1.21.0为例) wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz # 解压并配置环境变量 sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
# Nginx示例(代理Go应用端口8080) server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; } }
直接部署
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app
systemd
托管服务: # /etc/systemd/system/go-app.service [Unit] Description=Go Application [Service] ExecStart=/path/to/app Restart=always User=www-data Group=www-data [Install] WantedBy=multi-user.target
容器化部署(Docker)
编写Dockerfile:
FROM golang:1.21-alpine AS builder WORKDIR /app COPY . . RUN CGO_ENABLED=0 go build -o main . FROM alpine:latest COPY --from=builder /app/main /main EXPOSE 8080 CMD ["/main"]
启动容器:
docker build -t go-app . docker run -d -p 8080:8080 --name go-app-container go-app
自动化部署流程
# GitHub Actions示例 name: Deploy Go App on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build run: go build -o app - name: Deploy via SSH uses: appleboy/ssh-action@v0.1.10 with: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} script: | systemctl restart go-app
Go运行时调优
GOMAXPROCS
匹配CPU核心数:runtime.GOMAXPROCS(runtime.NumCPU())
import _ "net/http/pprof" go func() { http.ListenAndServe(":6060", nil) }()
数据库与连接池
sql.DB
配置连接池参数: db.SetMaxOpenConns(25) db.SetMaxIdleConns(25) db.SetConnMaxLifetime(5 * time.Minute)
静态资源加速
gzip on; gzip_types text/plain application/json image/png;
服务器防火墙
sudo ufw allow 22/tcp sudo ufw allow 80,443/tcp sudo ufw enable
HTTPS强制加密
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d example.com
权限与破绽管理
www-data
)。go list -m -u all
检查依赖库破绽。日志收集
logrus
或zap
结构化日志,对接ELK(Elasticsearch+Logstash+Kibana)。实时监控
备份与灾备
引用说明
本文涉及的技术文档参考自以下来源: