利用Git的WebHooks實現自動部署並解決內網穿透問題

轉自:

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 是直接解析到 內網服務器上面一樣使用即可.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章