首页 > 心得分享 > 利用Git的WebHooks实现自动部署并解决NAT3网络内网穿透问题

利用Git的WebHooks实现自动部署并解决NAT3网络内网穿透问题

需求

在公司内网部署了一台测试服务器, 本地部署的GitLab速度太慢, 
打算直接使用OSChina的Git托管服务(https://gitee.com)

问题

公司宽带是NAT3网络, 无法获取外网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 "local-company@qs5.org" # 连按三次回车 创建

保存密钥,接下来将会使用

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 local_company@114.115.116.117

结束

测试访问 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 是直接解析到 内网服务器上面一样使用即可.

上一篇: Nginx配置PHP文件/目录访问需要密码)来保护受限制的内容。

下一篇: 【脚本】优课在线自动看视频