CentOS Golang項目部署配置要點
sudo yum install golang
快速安裝;或從官網下載對應版本(如go1.18.linux-amd64.tar.gz
),解壓至/usr/local
,并配置環境變量(GOROOT=/usr/local/go
、GOPATH=$HOME/go
、PATH=$PATH:$GOROOT/bin:$GOPATH/bin
),通過source ~/.bashrc
生效。sudo yum install -y gcc gcc-c++ autoconf automake make zlib zlib-devel openssl openssl-devel pcre pcre-devel
,確保交叉編譯時能正確鏈接依賴。go mod init <module-name>
(如example.com/myapp
),生成go.mod
文件管理依賴。CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.go
。使用-ldflags="-s -w"
去除調試信息和符號表,減小文件體積(如-ldflags="-s -w" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
)。scp
將編譯后的可執行文件上傳至服務器(如scp myapp-linux-amd64 user@server_ip:/opt/myapp
),并通過chmod +x /opt/myapp/myapp-linux-amd64
賦予執行權限。nohup
命令讓程序在后臺持續運行,并將日志輸出至文件:nohup /opt/myapp/myapp-linux-amd64 > /opt/myapp/log.log 2>&1 &
。但此方式缺乏進程管理,僅適用于測試環境。/etc/systemd/system/
下創建.service
文件(如myapp.service
),內容示例:[Unit]
Description=My Golang Application
After=network.target
[Service]
User=www # 建議使用非root用戶(如www)
Group=www
WorkingDirectory=/opt/myapp # 項目工作目錄
ExecStart=/opt/myapp/myapp-linux-amd64 # 可執行文件路徑
Restart=always # 失敗時自動重啟
Environment="APP_ENV=production" "DATABASE_URL=mysql://user:pass@localhost/db" # 環境變量
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
重新加載配置,sudo systemctl start myapp.service
啟動服務,sudo systemctl enable myapp.service
設置開機自啟。通過systemctl status myapp.service
查看狀態。sudo firewall-cmd --permanent --add-service=http --add-service=https
,sudo firewall-cmd --reload
。若使用自定義端口(如8080),需添加--add-port=8080/tcp
。sudo yum install nginx
),編輯配置文件(如/etc/nginx/conf.d/myapp.conf
),添加反向代理規則:server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://localhost:8080; # 轉發至Go應用端口
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;
}
}
重啟Nginx(sudo systemctl restart nginx
)后,可通過域名或IP訪問應用。Dockerfile
,內容示例:FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp .
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]
docker build -t myapp .
構建鏡像,docker run -d -p 8080:8080 --name myapp-container myapp
運行容器。通過Docker Compose可管理多容器(如Nginx+Go應用)。