内网离线部署RPA:打包EXE+本地激活+数据零上云方案

领导给了一周,我前三天全耗在这个报错上:

复制代码
无法连接到 activation.xxx.com
请检查网络连接后重试

2024年5月,我用的蓝印RPA物理隔离内网部,处理核心业务数据,要求"数据不出本机,流程不外传,审计能溯源"。

第一坑:假离线激活

某工具宣传"支持本地部署",安装后首次启动弹出连接license服务器窗口。内网直接报错。

翻文档找"离线激活",需要三步:联网机器生成请求文件→传外网换激活文件→传回内网导入。本质上还是依赖外网,只是换了种形式。

真正离线的工具:安装包内置激活模块,输入license密钥后本地校验通过,全程零外网。后来找到的那款,安装完断网状态直接激活,没有任何弹窗。

第二坑:流程文件默认云同步

某工具保存流程后抓包发现,有流量往sync.xxx.com走。

排查:设置->高级->数据管理->同步偏好,buried在三层菜单里,默认开启。关掉后重启软件,同步选项又自动打开。

解决:防火墙阻断该域名,观察三天确认无异常流量。同时修改默认保存路径到加密磁盘。

第三坑:组件运行时拉取资源

设计流程时用了某"智能识别"组件,本机测试正常。搬到内网后报错:

复制代码
无法下载模型文件 ocr_model_v3.dat
请检查网络连接或联系管理员

原来组件首次使用时要联网下载AI模型,本地无缓存。内网环境下直接卡死。

解决:联网环境预装所有组件,找到缓存目录(C:\ProgramData\XXX\Components\),整体打包搬进内网。或者弃用"云增强"组件,改用基于本地Windows API的传统识别方案。

部署架构

复制代码
┌─────────────────────────────────────────┐
│         内网终端 / 服务器               │
│                                         │
│  ┌─────────────┐    ┌───────────────┐   │
│  │ RPA主程序   │←──→│ 本地流程仓库   │   │
│  │ (离线激活)  │    │ (加密磁盘路径) │   │
│  └──────┬──────┘    └───────────────┘   │
│         │                               │
│  ┌──────┴──────┐    ┌───────────────┐   │
│  │ Python 3.10  │←──→│ 本地组件库    │   │
│  │ (Anaconda离线)│    │ (预装完整包)  │   │
│  └──────┬──────┘    └───────────────┘   │
│         │                               │
│  ┌──────┴──────┐    ┌───────────────┐   │
│  │ 输入数据源   │    │ 输出/日志留存  │   │
│  │ (本地Excel   │───→│ (本地目录结构) │   │
│  │  /数据库直连)│    │ (按日期归档)   │   │
│  └─────────────┘    └───────────────┘   │
│                                         │
│  [防火墙规则:阻断所有外网出站连接]        │
└─────────────────────────────────────────┘

关键配置与代码

1. 流程打包EXE

实际工具中通过GUI配置,审计时需提供参数清单。Python调用示例:

复制代码
# 调用打包API生成独立EXE
from rpa_sdk import Packager

pkg = Packager()
pkg.set_source(r"D:\Flows\Auto_Reconcile.flow")
pkg.set_output(r"D:\Deploy\Auto_Reconcile.exe")

# 加密与授权配置
pkg.set_encryption(
    password="user_defined",      # 自定义密码
    machine_bind=True,              # 绑定设备
    expire_date="2025-12-31"        # 有效期
)

# 运行时约束
pkg.set_runtime(
    network_required=False,         # 运行时无需联网
    local_logs=True,                # 日志本地留存
    screenshot_local_only=True      # 截图仅本地
)

# 打包:生成绿色EXE,对方无需安装运行环境
pkg.build()

打包后的Auto_Reconcile.exe可在未安装RPA环境的机器上直接运行,双击即执行。

2. 日志本地化管理

复制代码
import os
import shutil
from datetime import datetime, timedelta

LOG_BASE = r"D:\RPA_Logs"
RETENTION_DAYS = 30

def get_log_dir(flow_name):
    today = datetime.now().strftime("%Y%m%d")
    log_dir = os.path.join(LOG_BASE, flow_name, today)
    os.makedirs(log_dir, exist_ok=True)
    return log_dir

def cleanup_logs():
    cutoff = datetime.now() - timedelta(days=RETENTION_DAYS)
    for flow in os.listdir(LOG_BASE):
        flow_path = os.path.join(LOG_BASE, flow)
        if not os.path.isdir(flow_path):
            continue
        for date_dir in os.listdir(flow_path):
            try:
                dir_date = datetime.strptime(date_dir, "%Y%m%d")
                if dir_date < cutoff:
                    shutil.rmtree(os.path.join(flow_path, date_dir))
            except ValueError:
                continue

# 流程中调用
current_log = get_log_dir("Auto_Reconcile")
# 所有日志、截图写入 current_log
# 流程结束后执行 cleanup_logs()

3. Python环境离线化

联网机器准备:

复制代码
conda create -n rpa_env python=3.10 pandas openpyxl sqlalchemy cx_Oracle pywin32
conda pack -n rpa_env -o rpa_env.tar.gz

内网解压后,RPA配置解释器路径:D:\Anaconda\envs\rpa_env\python.exe

额外踩坑:Oracle客户端版本。内网预装Oracle 11g客户端,但cx_Oracle需对应版本DLL。报错ORA-12154时,不是代码问题,是PATH环境变量没指向正确的instantclient目录。折腾半天才找到原因。

4. 数据库直连

复制代码
import cx_Oracle
import pandas as pd
import win32cred  # 从Windows凭据管理器读取密码

# 读取存储的凭据,禁止硬编码密码
cred = win32cred.CredRead("ORACLE_RPA", win32cred.CRED_TYPE_GENERIC)
password = cred["CredentialBlob"].decode("utf-16")

conn = cx_Oracle.connect(
    user="rpa_user",
    password=password,
    dsn="internal-db:1521/PROD",
    encoding="UTF-8"
)

# 内存处理,不落临时文件
df = pd.read_sql("SELECT * FROM transactions WHERE status='PENDING'", conn)
df_filtered = df[df['amount'] > 1000]

# 结果写回数据库
df_filtered.to_sql("high_value", conn, if_exists="append", index=False)
conn.close()

安全加固清单

加固项 操作 验证
运行账号最小权限 创建专用账号rpa_svc,仅授权必要目录和DB 尝试访问无关目录,应被拒绝
敏感信息存储 密码存入Windows凭据管理器 流程文件中无硬编码
网络行为审计 防火墙阻断所有出站,仅保留内网DB端口 Wireshark抓包72小时零外联
流程文件防拷贝 打包EXE启用机器绑定+密码 未授权设备运行应报错
日志完整性 本地按日期归档,定期哈希校验 SHA256值比对一致

验收实录

安全部张工话少,验收时只列清单,我手心全是汗:

**物理断网测试:**拔网线,安装、激活、设计流程、运行任务、导出结果,全程无报错

**流量监控:**Wireshark抓包一周,零外网IP连接

**日志溯源:**随机抽查三个月前记录,本地目录完整调取,含时间戳、步骤、输入输出摘要

**权限验证:**打包的EXE拷到个人笔记本运行,提示"未授权设备,拒绝执行"

四项全过,审计材料盖章。张工难得说了句:"这个可以写进材料。"

内网部署RPA,最大的敌人是"伪本地"------名义上本地安装,实则处处依赖外网。选型时务必实测:断网能不能活?保存后有没有外网流量?组件运行时会不会偷偷下载资源?

把RPA当成完全离线的单机软件用,所有数据路径对IT可见、可控、可审计,才是内网合规的正确打开方式。

相关推荐
天空属于哈夫克35 小时前
3分钟快速接入!实现企业微信外部群主动调用能力
自动化·企业微信·api·rpa
wjc12313138 小时前
蓝印RPA|飞书应用机器人Agent配置说明
机器人·飞书·rpa
Mininglamp_27188 小时前
GUI 自动化的三条路径:RPA 脚本 vs API 注入 vs 纯视觉 Agent
rpa·ai agent·gui自动化·视觉agent
2501_941982051 天前
通过 API 实时监听企业微信外部群变更事件并同步本地数据库
android·自动化·企业微信·rpa
阿达hi1 天前
RPA 自动化SAP 流程授权
运维·自动化·rpa
LT10157974442 天前
2026年国产兼容RPA选型指南:国产系统与软件全适配
自动化·rpa
2501_941982052 天前
如何将企业微信 RPA 抽象为高可用的外部群自动化 API?
企业微信·rpa
Maydaycxc2 天前
跨境电商多账号自动化:RPA对接指纹浏览器与OCR识图实战
自动化·ocr·rpa
梦想的旅途22 天前
基于 RPA 自动化技术的外部群主动消息推送实现指南
前端·自动化·rpa