利用Git的WebHooks實現自動部署並解決內網穿透問題
阿新 • • 發佈:2022-06-06
轉自:
https://www.qs5.org/Post/655.html
需求
在公司內網部署了一臺測試伺服器, 本地部署的GitLab速度太慢,
打算直接使用OSChina的Git託管服務(https://gitee.com)
問題
公司寬頻是內部網路, 無法獲取外網IP,
Git的WebHooks無法通知到內網伺服器.
解決實現思路
利用已有的外網伺服器作為外網跳板,
內網伺服器通過ssh隧道打通到外網伺服器並監聽7980埠
然後使用Nginx反向代理WebHooks的請求到7980埠隧道至內網Web服務上.
具體實現步驟
前提說明
假設:
內網伺服器IP為: 192.168.1.15 外網伺服器IP為: 114.115.116.117
內網伺服器準備
配置Git WebHooks自動部署工具到本地(實現回撥自動更新程式碼)
參考專案地址 https://github.com/imdong/GitWebHooks
假設已配置為 http://192.168.1.25/webhook/
安裝 autossh 實現ssh不間斷連線
autossh專案地址: http://www.harding.motd.ca/autossh/
安裝過程
wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz gunzip -c autossh-1.4e.tgz | tar xvf - cd autossh-1.4e ./configure make make install
建立 ssh-rsa 金鑰用來免密碼連線伺服器
已經建立過金鑰的可跳過
ssh-keygen -t rsa -C "[email protected]" # 連按三次回車 建立
儲存金鑰,接下來將會使用
cat ~/.ssh/id_rsa.pub
跳板伺服器準備
建立專用賬號
useradd local_company passwd local_company # 關閉命令執行許可權(安全) sudo chsh -s /bin/false local_company # 複製 剛才的 id_ras.pub 到 authorized_keys vi /home/local_company/.ssh/authorized_keys # 並設定 authorized_keys 許可權為 0600, 所有者 local_company chown local_company /home/local_company/.ssh/authorized_keys chmod 0600 chown local_company /home/local_company/.ssh/authorized_keys
解析域名到 外網伺服器
DNS local-company.qs5.org To 114.115.116.117
Nginx 配置反向代理
server
{
listen 80;
#listen [::]:80;
server_name local-company.qs5.org;
location / {
proxy_pass http://127.0.0.1:7980;
}
access_log /home/wwwlogs/qs5_local_company_org.log;
}
回到 內網伺服器上 打通隧道
利用 autossh 打通隧道
autossh -f -p 22 -TNnR 7980:localhost:80 [email protected]
結束
測試訪問 local-company.qs5.org 是否能達到 內網伺服器上面
整體流程解釋:
訪問域名 local-company.qs5.org 時會訪問到 114.115.116.117 的 Nginx上。
Nginx反向代理到 127.0.0.1:7980 上。
而內網伺服器 192.168.1.15 通過 SSH 隧道 連線到 114.115.116.117 並監聽了7980埠且對映到了本地的80埠上。
這樣 Nginx 反向代理到 127.0.0.1:7980 的資料會通過 SSH 隧道 流到 192.168.1.15:80 上.
然後就可以假設 local-company.qs5.org 是直接解析到 內網伺服器上面一樣使用即可.