在Debian上部署Go應用的第一步是安裝Go語言環境,可選擇包管理器安裝(簡單快捷)或手動下載安裝(版本可控)。
golang-go
:sudo apt update && sudo apt install golang-go -y
https://golang.org/dl/
),獲取最新Linux版本安裝包(如go1.22.0.linux-amd64.tar.gz
),執行以下命令:wget https://golang.org/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
~/.profile
文件,添加Go路徑配置:echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
echo 'export GOPATH=$HOME/go' >> ~/.profile # 可選,用于管理第三方依賴
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.profile # 可選,方便使用go安裝的工具
source ~/.profile # 使配置立即生效
go version
,若輸出類似go version go1.22.0 linux/amd64
則表示安裝成功。進入項目目錄(包含main.go
文件),執行go build
命令生成可執行文件:
cd /path/to/your/project # 替換為項目實際路徑
go build -o myapp # 生成名為"myapp"的可執行文件
若項目使用Go Modules(推薦,管理依賴更方便),需先初始化模塊并下載依賴:
go mod init example.com/myapp # 初始化模塊(替換為你的模塊名)
go mod tidy # 自動下載并整理依賴
編譯時會自動處理依賴,生成的可執行文件可直接運行。
為了讓應用在后臺穩定運行,推薦使用systemd服務(系統級進程管理),也可選擇nohup
(簡單但不夠健壯)。
/etc/systemd/system/myapp.service
),內容如下:[Unit]
Description=My Go Application # 服務描述
After=network.target # 依賴網絡服務啟動
[Service]
User=yourusername # 替換為運行應用的用戶名(如"ubuntu")
Group=yourgroupname # 替換為用戶組名(如"ubuntu")
ExecStart=/path/to/your/myapp # 可執行文件路徑
Restart=always # 應用崩潰后自動重啟
Environment=PORT=8080 # 可選:設置環境變量(如端口)
[Install]
WantedBy=multi-user.target # 開機自啟的目標
執行以下命令激活服務:sudo systemctl daemon-reload # 重新加載systemd配置
sudo systemctl start myapp # 啟動服務
sudo systemctl enable myapp # 設置開機自啟
檢查服務狀態:sudo systemctl status myapp # 查看實時狀態
journalctl -u myapp -f # 查看日志(實時輸出)
nohup
運行:nohup ./myapp & # 后臺運行,輸出重定向到"nohup.out"
但這種方式無法自動重啟,不推薦生產環境使用。若應用需要對外提供服務(如HTTP接口),建議用Nginx作為反向代理,提升安全性(隱藏內部端口)和性能(負載均衡)。
sudo apt update && sudo apt install nginx -y
/etc/nginx/sites-available/default
),修改location
部分:server {
listen 80;
server_name your_domain_or_ip; # 替換為域名或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;
}
}
sudo systemctl restart nginx
sudo ufw allow 'Nginx Full' # 允許HTTP/HTTPS流量(若使用ufw防火墻)
此時可通過http://your_domain_or_ip
訪問Go應用。chmod +x myapp
),systemd服務中的用戶需有訪問項目文件的權限。netstat -tulnp | grep 8080
查找占用進程并終止,或修改應用端口。go mod init
+ go mod tidy
),避免手動下載依賴導致的版本不一致問題。