# 通过代理主机在内网部署应用
#### 应用场景
通过代理主机在内网部署应用，能有效控制内外网通信，增强数据安全与网络性能，同时满足合规性要求；这一策略广泛应用于资源访问控制、数据中心间安全通信、内容缓存加速、环境隔离、安全审计及敏感数据处理等多个关键场景。
#### 方案架构
采用squid代理服务中的Internet正向代理功能，在代理主机上指定目标主机的地址和端口，实现目标主机的公网访问。
想了解squid更多相关知识，请前往[squid官网](https://www.squid-cache.org/)。下面以Linux系统机器进行演示。
图1在代理主机上指定目标主机原理   
![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000002776963843.png "点击放大")
#### 前提条件
- 一台绑定公网IP的"代理主机-B"，若无主机可参考[申请ECS](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_0018.html#section0)。
- 一台未绑定公网IP的"目标主机-A"。
- "代理主机-B"与"目标主机-A"可通过内网进行互相访问。
 
#### 操作流程
本节介绍如何将应用通过代理主机部署到内网的主机或服务器。
图2操作流程示意图   
![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000002003410037.png "点击放大")
1. 安装squid代理服务。 
   进入"代理主机-B"的命令行工具，执行以下命令：
   ```
   yum install squid -y
   ```
   若回显最后为**"Complete"**，可继续执行以下命令：
   ```
   yum install iptables-services
   ```
   回复**"Y"** ，回显最后为**"Complete"**，即为安装完成。
   
   
2. 编辑squid配置文件。 
   1. 进入"代理主机-B"的命令行工具，执行以下命令：
      ```
      vim /etc/squid/squid.conf
      ```
      ![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000001919180220.png "点击放大")
      
   
   2. 在上图红框位置添加以下命令：
      ```
      acl local src 主机的内网IP/24
      ```
      
   
   3. 按**"ESC"** 键，输入**"：wq"**,退出并保存。
   
   
   
   
3. 配置"代理主机-B"防火墙。 
   进入"代理主机-B"的命令行工具，依次执行以下命令：
   ```
   systemctl stop firewalld.service 
   systemctl disable firewalld.service
   yum install iptables-services iptables-devel -y
   systemctl enable iptables.service
   systemctl start iptables.service
   iptables -I INPUT 1 -s 主机的内网IP/24 -p tcp --dport 3128 -j ACCEPT
   iptables -I INPUT 2 -p tcp --dport 3128 -j DROP
   ```
   其中倒数第二行的IP需配置为"目标主机-A"的内网IP网段或IP，3128是squid的代理端口。
   
   
4. 安装openssl。 
   进入"代理主机-B"的命令行工具，执行以下命令：
   ```
   yum install openssl
   ```
   回显最后为**"Complete"**，即为安装完成。
   
   
5. 启动squid代理服务。 
   进入"代理主机-B"的命令行工具，执行以下命令：
   ```
   systemctl start squid     //启动squid代理服务
   systemctl status squid    //检查squid状态
   ```
   ![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000001919020296.png "点击放大")
   启动squid代理服务失败，请参见[启动squid代理服务异常](https://support.huaweicloud.com/deployman_faq/deployman_faq_2013.html)。
   
   
6. 配置正向代理。 
   进入"目标主机-A"的命令行工具，执行以下命令：
   ```
   echo "export http_proxy=http://代理机的内网IP:3128" >>/etc/profile
   echo "export https_proxy=http://代理机的内网IP:3128" >>/etc/profile
   echo "export http_proxy=http://代理机的内网IP:3128" >>~/.bashrc
   echo "export https_proxy=http://代理机的内网IP:3128" >>~/.bashrc
   echo "export http_proxy=http://代理机的内网IP:3128" >>~/.bash_profile
   echo "export https_proxy=http://代理机的内网IP:3128" >>~/.bash_profile
   source /etc/profile
   source ~/.bashrc
   source ~/.bash_profile
   ```
   
   
7. 新建基础资源。 
   1. 单击"**首页**"可以查看已创建的所有项目，进入目标项目下。
   
   2. 单击菜单**"设置 \> 通用设置 \> 基础资源管理"** ，默认进入**"主机集群"**页面。
   
   3. 单击**"新建主机集群"** ，填写以下信息后，单击**"保存"** ，完成主机集群的创建。
      
      | 参数项    | 是否必填 | 说明                                          |
      |:---|:---|:---|
      | 集群名称   | 是    | 请输入自定义的主机集群名称。                              |
      | 操作系统     | 是   | 根据即将添加主机的操作系统，选择**"Linux"**。                |
      | 主机连通方式 | 是    | 选择代理模式。                                    |
      | 执行主机    | 是    | 资源池是部署软件包时执行部署命令的物理环境的集合，本场景执行主机采用**默认资源池**。 |
      | 描述     | 否       | 请输入对主机集群的描述。                                |
         
      
   
   4. 单击**"添加或导入主机"** ，**"** **选择添加方式** **"** 选择**"** **通过IP手动添加** **"** ，填写以下信息后，单击**"确定"** ，完成代理主机的创建。
      表1Linux系统代理主机参数说明 
      | 参数项    | 是否必填 | 说明                                      |
      |:---|:---|:---|
      | 主机名  | 是     | 请输入自定义的代理主机名称，示例：代理主机-B。              |
      | IP    | 是   | 请输入**"代理主机-B"**所绑定的公网IP地址。                |
      | 操作系统 | 是     | 不可更改，默认为当前主机集群的操作系统。                   |
      | 认证方式  | 是    | 本场景使用**密码** 进行认证，输入的是**"代理主机-B"**的用户名及密码。 |
      | SSH端口 | 是     | 推荐使用22端口。                                |
         
      
   
   5. 单击**"添加或导入主机"** ，**"** **选择添加方式** **"** 选择**"** **通过IP手动添加** **"** ，填写以下信息后，单击**"确定"** ，完成目标主机的创建。
      表2Linux系统目标主机参数说明 
      | 参数项   | 是否必填  | 说明                                     |
      |:---|:---|:---|
      | 主机名   | 是 | 请输入自定义的目标主机名称，示例：目标主机-A。                 |
      | 代理主机     | 是   | 请选择**"代理主机-B"**为无法连接公网的目标主机进行网络代理。       |
      | IP      | 是    | 请输入**"目标主机-A"**的私有IP地址。                    |
      | 操作系统  | 是    | 不可更改，默认为当前主机集群的操作系统。                    |
      | 认证方式    | 是   | 本场景使用**密码** 进行认证，输入的是**"目标主机-A"**的用户名及密码。 |
      | SSH端口 | 是   | 推荐使用22端口。                               |
         
      
   
   6. 单击某个主机操作列的![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000001919020292.png)图标，即可启动该主机进行连通性验证操作。关于连通性验证问题，请参考[主机管理常见问题](https://support.huaweicloud.com/deployman_faq/deployman_faq_0000.html)排查。
   
   
   
   
8. 
   1. 登录CodeArts首页，单击目标项目名称，进入项目首页。
   
   2. 单击菜单"**持续交付 \> 部署**"，进入项目下部署服务界面。
   
   3. 单击"**新建应用** "，进入**"基本信息"**页面，可根据需要修改名称、描述、执行主机等基本信息。
   
   4. 完成应用基本信息的编辑后，单击**"下一步"** ，进入选择部署模板页面，选择"**空白模板** "，单击"**确定**"。
   
   5. 进入"**部署步骤** "页面，在右侧步骤列表中，单击目标步骤的"**添加**"键，可将该部署步骤添加到左侧的步骤编排区中。
   
   6. 进入"**环境管理** "页面，单击**"新建环境"** ，输入环境基本信息，单击"**保存**"完成新建。
   
   7. 单击**"导入主机"** ，系统已自动筛选符合当前环境的所有集群，在弹框中选择目标主机集群，将**"代理主机-B"** 、**"目标主机-A"**导入环境中。
   
   
   
   
9. 部署应用，详细操作可参考[部署CodeArts Deploy应用](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_00005.html)。
   
   1. 应用列表中选择待部署应用，单击![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000001950476028.png)图标，即可部署该应用。
   
   2. 部署完成后，单击应用名称，单击目标部署记录，应用状态栏的颜色变成绿色，并显示"部署成功"，则表示此次部署应用成功。
   
   
   ![](https://support.huaweicloud.com/bestpractice-deployman/zh-cn_image_0000001919180224.png "点击放大")
   更多部署问题，请参考[应用部署常见问题](https://support.huaweicloud.com/deployman_faq/deployman_faq_00002.html)排查。
   
   
 
