为什么非要在内网运行 RPA?
接手公司税务自动化项目的第一年,最大的阻力不是技术选型,而是安全合规。财务部划下三条硬性底线:税务数据严禁外传内网,不得依赖任何外部 SaaS 服务,部署方案必须足够简单,财务同事能直接上手操作。这三条红线直接淘汰了市面上绝大多数云端 RPA 方案。试过某知名国产 RPA 的企业版,报价六位数起,还必须连接它的管控平台,数据需经公网同步——财务总监当场否决。
最终决定自建。选型阶段对比了四五款工具,最终锁定一款支持内网离线运行、可打包导出 EXE、数据全程保存在本地的方案。下文会详细说明为什么选它。
内网 RPA 自动化架构设计
部署架构本身非常简洁,核心只有两层:
┌─────────────────────────────────────┐
│ 阿里云 ECS(内网 VPC,无公网 IP) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Windows │ │ RPA 自动化 │ │
│ │ Server │ │ 执行节点 │ │
│ │ (财务跳板) │ │ (定时任务) │ │
│ └─────────────┘ └─────────────┘ │
│ ↑ │
│ ┌─────────────┐ │
│ │ 阿里云 OSS │ ← 报表输出存储 │
│ │ (内网端点)│ │
│ └─────────────┘ │
└─────────────────────────────────────┘
关键设计点:ECS 实例部署在无公网 IP 的私有子网,通过堡垒机跳转管理;RPA 流程包预先在开发机打包,经内网上传部署;执行日志和输出报表写入阿里云 OSS 内网端点,财务同事通过内部系统下载;定时触发走阿里云云监控的内网 API 调用,不依赖外部定时服务。
ECS 环境准备
实例选型
选用 ecs.g7.large(2 核 8G),Windows Server 2022 数据中心版。为什么不上更高配置?RPA 本身对 CPU 消耗不大,但内存必须充足——浏览器自动化场景下,Chrome 同时打开十几个标签页是常态。实测 8G 内存运行三个并发流程,稳定不崩。
网络配置
VPC 网段规划:VPC CIDR 设为 172.16.0.0/16,私有子网 172.16.1.0/24(无公网路由),堡垒机子网 172.16.2.0/24(绑定公网 EIP)。安全组规则只开放两部分:堡垒机子网到私有子网的 3389(RDP),以及私有子网到 OSS 内网端点的 443。拒绝所有出向公网流量。
系统初始化
登录 ECS 后,先安装基础环境:
# 安装 Chrome(RPA 自动化大多基于浏览器)
# 下载企业版离线安装包,通过堡垒机 SCP 传入
chrome_installer.exe --system-level --silent --install
# 关闭 Windows 自动更新(避免执行期间重启)
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU" /v NoAutoUpdate /t REG_DWORD /d 1 /f
# 配置高性能电源计划(防止休眠导致流程中断)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
RPA 工具选型与部署
选型过程
列出需求清单,逐条打分:
最终选定的这款工具,最吸引人的是部署方式:无需在 ECS 上安装开发环境,不需要数据库,不需要连接授权服务器。在本地开发机编排好流程,打包导出成 EXE,直接丢到 ECS 上,财务同事双击即可运行。
流程打包与部署
开发阶段在本地完成,流程涉及登录电子税务局、自动填写增值税申报表、截图保存申报结果、生成 Excel 汇总报表。打包配置要点如下:
# 打包参数(工具界面配置后自动生成)
output: 税务申报自动化.exe
include_runtime: true # 自带运行时,目标机零依赖
encryption: true # EXE 加密,防止反编译
auto_update: true # 支持在线推送更新
trigger_config:
api_endpoint: /run/tax
schedule: "0 9 1 * *" # 每月1号上午9点定时执行
打包后的 EXE 约 180MB,通过堡垒机 SCP 传到 ECS:
scp -J bastion@eip 税务申报自动化.exe admin@172.16.1.10:C:/RPA/
内网触发方案
ECS 没有公网 IP,无法使用外部定时服务。搭建了两套触发机制。
方案一:阿里云云监控内网 HTTP 调用。
# 部署在 ECS 上的轻量触发服务(Flask)
from flask import Flask
import subprocess
app = Flask(__name__)
@app.route('/run/tax', methods=['POST'])
def run_tax():
# 调用打包的 EXE
subprocess.Popen(['C:/RPA/税务申报自动化.exe', '--headless'])
return {'status': 'started'}
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
云监控配置定时任务,每月 1 号 09:00 通过内网 HTTP 调用 http://172.16.1.10:8080/run/tax。
方案二:钉钉/飞书机器人回调(可选)。财务总监希望手动触发时,在钉钉群里发指令。借助这款工具自带的 Agent 功能,对接了钉钉机器人:钉钉消息 → 内网回调 → ECS 上的 EXE 执行,执行结果截图自动回传钉钉群。配置时使用自接 DeepSeek API,费用按实际调用量计费,比购买 SaaS 套餐便宜得多。
内网 RPA 自动化踩坑记录
坑 1:Chrome 版本兼容性。RPA 工具自带的浏览器驱动与 ECS 上手动安装的 Chrome 版本不匹配,导致元素定位失败。解决:使用工具自带的“本地智能生成”功能重新抓取元素路径,它会根据当前浏览器版本自动生成稳定的 XPath,无需手动修改代码。
坑 2:OSS 内网端点域名解析。一开始写死了 OSS 外网域名,ECS 没有公网,上传报表失败。解决:换成 OSS 内网端点 oss-cn-hangzhou-internal.aliyuncs.com,同时给 ECS 实例绑定 OSS 的 VPC 端点。
坑 3:Windows 会话 0 隔离。RPA 流程作为后台服务运行时,Chrome 弹窗无法截图,UI 自动化失效。解决:不采用 Windows Service 方式启动,改用计划任务(Task Scheduler)配置“只在用户登录时运行”,配合堡垒机保持 RDP 会话存活。或者直接使用这款工具的 API 触发模式,它内部已处理会话隔离问题。
坑 4:EXE 更新分发。流程修改了十几次,每次手动上传 EXE 到 ECS 非常繁琐。解决:开启打包时的在线推送更新功能。开发机重新打包后,EXE 自动检测新版本并下载,财务同事完全无感知。
运行效果
上线三个月后的数据:
财务总监的评价很实在:“以前月底三个人加班,现在一个人偶尔看看日志就行。”
内网 RPA 自动化的核心难点从来不是技术有多复杂,而是选型阶段就要厘清部署约束:能否离线运行?能否零依赖分发?数据能否不出域?后期更新是否麻烦?我们最终用的这款工具,在这几点上确实省了不少事。它支持打包导出 EXE、内网离线使用、数据本地保存、API 触发和定时执行,对个人开发者、小团队、中小企业而言,免费就能用,无需走采购流程。
如果你也在寻找内网 RPA 自动化的落地方案,建议将“部署友好度”放在选型权重的前三位。工具再强大,部署不进去、财务同事不会用,都是白搭。