资讯动态

AstronRPA 自托管 HTTPS 部署指南:OpenResty 网关 TLS 终结、HTTP 迁移与证书续期

发布时间:2026/10/10 6:30:11 来源:尧图企业网站定制
工作流自动化桌面应用AI 应用企业应用后端前端【免费下载链接】astron-rpaAgent-ready RPA suite with out-of-the-box automation tools. Built for individuals and enterprises.项目地址https://gitcode.com/bijinfeng/astron-rpa点击查看免费下载本篇指南完整讲解 AstronRPA 开源仓库自托管场景下的 HTTPS 部署方案公网 TLS 由 OpenResty 网关统一终结容器之间继续走私有 Docker 网络与 HTTP 服务名默认部署模式为httpslegacy-http是显式的明文兼容模式。读完本文你将掌握DNS 与证书的准备工作、.env关键变量与自定义端口配置、凭据初始化与签名证书轮换、部署验证、存量 HTTP 环境的迁移步骤、临时回滚以及证书续期后如何安全热加载。架构总览TLS 在哪里终结AstronRPA 的 HTTPS 设计遵循一个清晰的分层原则公网入口的 TLS 由 OpenResty 网关统一终结docker-compose.yml中的openresty-nginx服务镜像openresty/openresty:1.27.1.1-alpine承载全部对外流量RPA 各服务ai-service、openapi-service、resource-service、robot-service、rpa-auth与 Casdoor 之间则继续使用已有的私有 Docker 网络与 HTTP 服务名通信例如 docker-compose.yml 中http-common.conf定义的 upstreamresource-service:8030、robot-service:8040、ai-service:8010、openapi-service:8020、rpa-auth:10251、casdoor:8000这种边缘终结 TLS、内部明文 HTTP的模式避免在每一个业务容器里重复配置证书同时把 WebSocket 升级、MCP 流式转发、Cookie 安全标志等边界问题集中收敛到网关一层。默认模式是httpslegacy-http是显式、未加密的兼容模式仅供受控迁移或本地开发。需要强调的是这是一套自托管部署服务器、域名注册、DNS 记录、证书/私钥、暴露端口与证书续期都由部署方自行提供和维护项目只提供应用与配置不提供共享的托管端点或共享 TLS 凭据。文档中的域名与服务器 IP 均为示例请全部替换为你实际控制的值。从实现细节看网关的配置渲染与校验逻辑集中在 render-config.sh容器启动时entrypoint 为[/bin/sh, /etc/nginx/render-config.sh]根据DEPLOYMENT_MODE选择模板并用sed把RPA_SERVER_NAME、CASDOOR_SERVER_NAME、RPA_HTTPS_REDIRECT_AUTHORITY、TLS_CERTIFICATE_FILE等占位符替换为.env传入的环境变量生成conf.d/default.conf后启动 OpenResty。脚本在渲染前还会做三类校验render-config.shvalidate_name服务名必须是单个 DNS 名、IPv4 地址或下划线validate_authority重定向 authority 只允许主机名加可选端口validate_file_name证书文件名必须落在/etc/nginx/certs目录内防止路径逃逸。在https分支中脚本还会检查证书文件是否存在且非空render-config.sh任一条件不满足都会以非零状态退出容器即启动失败——这是网关的 fail-closed 行为。1. 准备公网名称与证书1.1 配置 DNS首先为网关与认证服务选择公网名称例如rpa.example.com与auth.example.com然后完成以下三步确认权威 NS在域名注册商处查看域名当前的权威名称服务器NS。保留注册商默认 DNS 服务即可只有把 DNS 托管迁移到其他提供商时才需要修改 NS。注意 NS 分配只决定由哪家 DNS 提供商解析并不会把某个应用名称指向某台服务器。添加应用记录在权威 DNS 提供商处为两个名称分别添加记录。对于拥有公网 IPv4 地址的服务器典型配置如下example.com区域中的记录名类型值TTLrpaA203.0.113.10提供商默认authA203.0.113.10提供商默认203.0.113.10是保留的示例地址TEST-NET请替换为你服务器可达的公网 IP 或你运营的入口地址。部分 DNS 控制台要求填写完整名称而非相对名称当子域指向已有入口主机名时也可改用 CNAME但不要在同一名称下同时创建 A 与 CNAME。只有入口、监听器与网络路由都已针对 IPv6 配置并验证后才发布 AAAA 记录——过期的 AAAA 记录即使在 A 记录正确时也可能导致连接失败。验证解析在配置 TLS 之前从客户端网络与 n8n 网络分别验证两个名称nslookup -typeNS example.com nslookup rpa.example.com nslookup auth.example.com若返回NXDOMAIN或旧地址先核对记录名与 NS 委派是否生效再与权威服务器或公共解析器对比nslookup rpa.example.com ns1.dns-provider.example nslookup rpa.example.com 1.1.1.1把ns1.dns-provider.example替换为你实际的权威服务器。若权威服务器返回正确记录而递归解析器没有需等待其缓存包括缓存的否定答案过期企业 DNS 策略或 split DNS 可能还需要网络管理员协助反复修改记录并不能清除这些缓存。认证服务名称也要同样验证。关键认知DNS 记录里只放 IP 地址或主机名不能包含https://、端口或 URL 路径。端口在 Compose 与公网 URL 中另行配置DNS 解析成功本身并不能证明端口可达或 HTTPS 正常工作。1.2 获取并安装证书从目标客户端信任的 CA 获取证书可通过 ACME 客户端或证书提供商的登记流程办理并按提供商的指引完成对两个名称的控制权验证DNS-01把提供商给出的 TXT 挑战值发布到_acme-challenge.rpa.example.com与_acme-challenge.auth.example.com。这些临时 TXT 记录与应用 A/CNAME 记录是并存关系并非替代。该方法适用于公网 80/443 端口不可用、或应用使用自定义 HTTPS 端口的场景。提交验证前先确认权威 TXT 解析验证完成后移除过期的挑战值。HTTP-01CA 需要能通过公网 TCP 80 端口访问指定挑战路径。默认 Compose HTTP 映射是仅回环的宿主机 32742 端口且不提供 ACME 挑战处理器因此只有当你完全掌控所需公网入口并已配置挑战路由时才使用 HTTP-01不要为了让它生效而替换其他应用在 80 端口的监听器。证书的Subject Alternative NameSAN必须同时覆盖 AstronRPA 与 Casdoor 两个公网名称。将完整证书链与匹配的私钥复制到docker/certs/默认文件名为docker/certs/tls.crt与docker/certs/tls.key可用TLS_CERTIFICATE_FILE/TLS_CERTIFICATE_KEY_FILE修改。真实证书与私钥会被 Git 忽略certs/README.md 也明确要求不得提交真实证书。提供的网关配置对两个监听器使用同一套证书/私钥HTTPS 模式下任一文件缺失、为空或路径配置在/etc/nginx/certs之外容器都会拒绝启动见前文 render-config.sh 的 fail-closed 检查。域名写入证书 SAN端口号不写入。私钥应在其部署密钥管理中生成和保存限制文件系统访问并确保网关可读取。TLS 参数方面tls-settings.conf 仅启用TLSv1.2 TLSv1.3开启共享 session 缓存shared:TLS:10m、超时 1 天并关闭 session tickets。1.3 初始化与轮换认证凭据网关 TLS 证书与 Casdoor 的 token 签名证书职责分离bootstrap JSONinit_data_dump.json只提供证书元数据密钥材料与应用密钥为空Casdoor 会在自己的数据库中生成独立的签名密钥对与应用密钥。initDataNewOnlytrue见 docker-compose.yml保证跨重启保留已有密钥、用户与应用设置——导入 JSON不是数据库迁移不要通过关闭该开关来应用配置变更。新部署流程按第 2 节配置.env后先初始化私有服务再启动 RPA同步命令要求 Python 3.6docker compose up -d mysql casdoor # 等待 Casdoor 完成初始化然后复制本部署的值。 python3 scripts/sync-casdoor-credentials.py docker compose up -d以上命令需在docker/目录下执行。sync-casdoor-credentials.py的源码逻辑sync-casdoor-credentials.py值得展开说明通过docker compose config --format json读取rpa-auth服务环境中的CASDOOR_APPLICATION_NAME向本项目的 MySQL 容器执行一条 SQL取回应用的client_id、client_secret与所绑定公共签名证书的 PEMHEX 解码写入.env的CASDOOR_CLIENT_ID、CASDOOR_CLIENT_SECRET、CASDOOR_CERTIFICATE更新采用原子替换tempfile.mkstempos.replace写入模式0600不打印任何凭据、不导出签名私钥、不留备份副本初始化不完整时如证书不完整、应用/证书缺失或存在歧义会直接退出且不修改.env等 Casdoor 就绪后重试即可若 Compose 调用设置了项目名使用--project-name existing-project保持项目一致脚本固定操作docker/.env因为服务通过x-env-file加载它仅用 CLI--env-file不会改变服务挂载来源所有命令需使用相同的 Compose overrides例如.env中的COMPOSE_FILEWindows 上还需限制该文件的 ACLPOSIX 模式位不能替代 Windows 访问控制。初始化期间应保持公网入口受限。在 Casdoor 管理界面必须在开放公网访问前替换默认管理员密码并删除或锁定未使用的示例用户——生成的签名密钥并不能保护仍使用公开默认密码的管理员账号。同时把 Casdoor 数据库及其备份视同私钥库保护。切勿发布.env、数据库导出或docker compose config的输出。存量部署从旧 bootstrap 升级时按以下步骤修复备份本项目的 Casdoor 数据库与.env限制访问。应用净化后的 bootstrap JSON 与initDataNewOnlytrue配置仅重建 Casdoor。这保留了已有数据但不会轮换已导入的公共密钥或密钥。通过 Casdoor 已认证的管理 API为每个受影响的签名证书包括cert-built-in与example-cert重新生成certificate与privateKey。Casdoor 的update-cert会在这些字段为空时生成一对新密钥。保持证书名称与签名算法一致使应用绑定与 default-certificate 回退能选中替换后的密钥。不要保留旧公钥作为可信回退并单独审查自定义应用/证书。轮换受影响的客户端密钥包括内置应用并替换任何仍为默认值的管理员密码——这是同一次修复的一部分已知的应用 Secret 可授权 Casdoor API 访问签名材料。保持应用/用户 ID 稳定并撤销受影响的 OAuth token 与 refresh token仅轮换签名密钥并不能自动撤销所有已存会话或 refresh-token 记录。用选定应用的凭据同步 RPA 并重建它python3 scripts/sync-casdoor-credentials.py docker compose up -d --no-deps --force-recreate rpa-authSDK 的casdoor.certificate现在来自CASDOOR_CERTIFICATE不再有共享公钥回退见 application-casdoor.yml 中casdoor.certificate: ${CASDOOR_CERTIFICATE:}。当前桌面端登录使用 Casdoor 会话离线 JWT 消费方也必须替换其信任的公钥。同步命令本身不轮换凭据也不重启服务同时它也支持内部 HTTP/legacy 模式部署。验证应用绑定与导出的公钥、新 token 能否被接受、旧签名与旧 Secret 是否被拒绝、客户端登录/WSS 以及 n8n MCP 是否正常重启 Casdoor 后再次验证以证明持久性。已有 RPA 会话与 n8n API Key 是独立的凭据签名密钥轮换并不会使它们失效。所有生成的凭据都应保存在部署存储中、位于受跟踪源码之外。恢复轮换前的数据库备份也会恢复被泄露的签名材料此类备份只能用于隔离的恢复场景并在重新开放入口前再次轮换。2. 配置 HTTPS复制.env.example为.env至少设置以下变量完整模板见 .env.exampleDEPLOYMENT_MODEhttps RPA_SERVER_NAMErpa.example.com CASDOOR_SERVER_NAMEauth.example.com # 端口不是标准 HTTPS 端口时必须包含端口。 RPA_HTTPS_REDIRECT_AUTHORITYrpa.example.com CASDOOR_HTTPS_REDIRECT_AUTHORITYauth.example.com:8443 RPA_HTTPS_PORT443 CASDOOR_HTTPS_PORT8443 CASDOOR_EXTERNAL_ENDPOINThttps://auth.example.com:8443 TLS_CERTIFICATE_FILEtls.crt TLS_CERTIFICATE_KEY_FILEtls.key SESSION_COOKIE_SECUREtrue各变量语义务必区分清楚RPA_SERVER_NAME与CASDOOR_SERVER_NAME只含主机名*_HTTPS_REDIRECT_AUTHORITY含外部主机名及任何非标准端口不带scheme 或路径CASDOOR_EXTERNAL_ENDPOINT是完整的公网 HTTPS origin包括非标准端口SESSION_COOKIE_SECUREtrue使会话 Cookie 带 Secure 标志由 docker-compose.yml 注入 rpa-auth并落到 application-casdoor.yml 的session-cookie-secure: ${SESSION_COOKIE_SECURE:true}https.conf.template中还会用proxy_cookie_flags casdoor_session_id secure httponly在网关注入 Secure/HttpOnly 标志。Compose 中网关的端口映射docker-compose.yml为RPA_HTTP_BIND_ADDRESS:32742 → 容器 80、RPA_HTTPS_BIND_ADDRESS:443 → 容器 443、CASDOOR_HTTP_BIND_ADDRESS:8000 → 容器 8080、CASDOOR_HTTPS_BIND_ADDRESS:8443 → 容器 8443。若直接使用提供的 Compose 网关需要在云安全组/防火墙必要时加 NAT 规则中放行所选 HTTPS 宿主端口。若 443/8443 已被占用选择可用端口并同步更新所有相关值例如设置自定义端口示例RPA_HTTPS_PORT9443CASDOOR_HTTPS_PORT9444RPA_HTTPS_REDIRECT_AUTHORITYrpa.example.com:9443CASDOOR_HTTPS_REDIRECT_AUTHORITYauth.example.com:9444CASDOOR_EXTERNAL_ENDPOINThttps://auth.example.com:9444客户端remote_addrhttps://rpa.example.com:9443/n8n MCP 端点https://rpa.example.com:9443/api/rpa-openapi/mcp/后端与数据库端口保持私有共享宿主机上只修改本部署分配到的端口与文件。若使用独立入口如外部负载均衡需一致地配置其外部 URL 与端口转发并支持 WSS 与 MCP 流式传输——DNS 不会自动配置该入口。CASDOOR_ENDPOINT必须保持内部 HTTP 地址CASDOOR_ENDPOINThttp://rpa-opensource-casdoor:8000旧的 HTTP 端口默认仅回环绑定并返回308重定向见 https.conf.template 中两个return 308 https://...$request_uri的 server 块。迁移期间可临时更改绑定地址将其暴露但任何凭据都不应发往 HTTP URL。3. 验证与启动首次安装需先完成第 1.3 节的 Casdoor 初始化与凭据同步再启动全栈docker compose config --quiet docker compose up -d docker compose ps docker compose logs openresty-nginx curl -I http://127.0.0.1:32742/health curl https://rpa.example.com/health第一条回环 HTTP必须返回308重定向第二条必须返回healthy且证书有效、受信任。注意容器自身的健康检查走的是内部 8090 端口docker-compose.yml 与模板中的server { listen 8090; }内部健康块不会削弱公网 TLS。随后配置已安装的客户端指向 HTTPS 网关remote_addr: https://rpa.example.com/n8n MCP Client 的 Streamable HTTP 端点配置为https://rpa.example.com/api/rpa-openapi/mcp/在其 Bearer Credential 中使用 API KeyKey 应保存在凭据库中而不是 URL 或工作流参数里。自定义端口时按上文表格同步更新客户端、n8n 与验证 URL。使用正常的证书校验SSH 隧道不是部署要求。客户端/Scheduler 的远程传输如何从该值派生协议可在 remote_transport.py 中看到实现remote_addr只允许 http/https 且不含凭据与查询参数ws_url按wss if origin.scheme https else ws派生remote_transport.pyHTTPS 客户端通过ssl.create_default_context()使用标准 Python TLS 信任上下文——包含系统根部署使用私有 CA 时也会加载显式配置的SSL_CERT_FILE。会话 Cookie 按 origin 存储在客户端工作目录的.remote-cookies目录SessionCookies以sha256(remote_addr)命名 jar 文件目录权限0700且只会迁移所配置 origin 的旧.cookie.json会话不会把临时回环代理的 Cookie 混入其中。捆绑的二进制仍保留本地模块路由并通过回环连接该传输直接把该二进制连到 HTTPS 的旧客户端会跳过证书校验必须升级。Chromium 也必须去掉历史遗留的ignore-certificate-errors开关运行若使用私有 CA应按该 CA 配置 Chromium 的信任库而不是关闭校验。4. 迁移现有 HTTP 部署备份.env与当前 Compose 配置。不需要数据库变更。在修改公网 URL 之前准备并验证证书名称。更新 HTTPS 变量与CASDOOR_EXTERNAL_ENDPOINT。启动默认 HTTPS 模式验证/health、登录、MCP Streamable HTTP 与 WebSocket 路由。把所有调用方更新为 HTTPS 网关地址。旧 HTTP 端口只保留重定向功能迁移完成后把其绑定地址恢复为127.0.0.1。5. 显式 legacy HTTP 兼容模式legacy-http通过 OpenResty 恢复旧的网关与 Casdoor 明文协议同时为旧会话 Cookie 关闭 Secure 标志。该模式未加密仅适用于受控迁移或本地开发。docker compose -f docker-compose.yml -f docker-compose.legacy-http.yml up -d该 overridedocker-compose.legacy-http.yml使用 Compose 的!override标签因此要求 Docker Compose 2.24.4 或更新它移除未使用的 HTTPS 端口映射使 legacy 回滚不会占用 443/8443。文件内将DEPLOYMENT_MODE置为legacy-http、SESSION_COOKIE_SECURE置为false并把CASDOOR_EXTERNAL_ENDPOINT指向LEGACY_CASDOOR_EXTERNAL_ENDPOINT。已有远端部署若确需明文暴露必须显式配置RPA_HTTP_BIND_ADDRESS0.0.0.0 CASDOOR_HTTP_BIND_ADDRESS0.0.0.0 LEGACY_CASDOOR_EXTERNAL_ENDPOINThttp://YOUR_SERVER:8000然后用同样的两个 Compose 文件启动。切勿将这种配置用于新的公网安装。6. 回滚 HTTPS 配置若因部署特有的证书或名称问题需要临时回滚docker compose down docker compose -f docker-compose.yml -f docker-compose.legacy-http.yml up -d同时把调用方恢复为旧的 HTTP 网关 URL并将LEGACY_CASDOOR_EXTERNAL_ENDPOINT设为之前的 Casdoor URL。此回滚不需要恢复数据库也不会删除 Docker 卷。证书或名称问题解决后应尽快切回 HTTPS。7. 证书续期与替换提供的 Compose 栈不负责签发或自动续期证书部署方必须监控到期时间并在 CA 截止日期前安排续期。仅安装 ACME 客户端或添加网关 reload 钩子并不能证明无人值守续期真正可用手动 DNS-01CA 要求重新验证时需再次完成 TXT 挑战自动 DNS-01使用所选 ACME 客户端支持的 DNS 提供商把其 API 凭据保存在源码控制之外并授予最低所需 DNS 权限配置由部署方拥有的续期计划。不要假设手动 TXT 配置可以无人值守续期。续期成功后对当前证书与密钥保留受保护备份。把新的完整链与匹配密钥安装到docker/certs/下配置的路径保持原有权限。ACME 客户端自己目录里的证书在完成此复制/安装步骤之前并未安装到网关。校验网关配置仅在校验成功后 reload 本部署的网关docker compose exec -T openresty-nginx openresty -t # 仅在前一条命令成功后才执行。 docker compose exec -T openresty-nginx openresty -s reload对两个公网名称建立全新 HTTPS 连接核对所服务证书的 SAN、链与有效期复查客户端登录/WSS 与 n8n MCP 初始化/发现无需启动 RPA 任务。仅本地检查证书文件成功不能证明新证书已在提供服务。若校验失败保留正在运行的网关恢复已保存的文件并修正证书/密钥配置。不要通过禁用 TLS 校验或经 HTTP 发送凭据来绕过续期失败。ACME 账户密钥、DNS API token、续期状态与私钥备份都应存放在部署的受保护存储中并记录续期负责人与计划方便后续运维人员维护。附常用运维命令速查# 查看服务状态 docker compose ps # 跟踪网关日志 docker compose logs -f openresty-nginx # 替换证书前先校验仅在校验成功后 reload docker compose exec -T openresty-nginx openresty -t docker compose exec -T openresty-nginx openresty -s reload # 停止服务且不删除数据卷 docker compose down快速起步流程可参考 QUICK_START.mdDNS 设置、证书签发/续期、自定义端口、迁移步骤、验证与回滚的完整细节均以本文HTTPS_DEPLOYMENT.md为准。部署的所有命令都应从docker/目录执行并在整个生命周期内保持相同的项目名、环境与 overrides。赞分享工作流自动化桌面应用AI 应用企业应用后端前端【免费下载链接】astron-rpaAgent-ready RPA suite with out-of-the-box automation tools. Built for individuals and enterprises.项目地址https://gitcode.com/bijinfeng/astron-rpa点击查看免费下载相关推荐AstronRPA安全部署指南HTTPS网关、Casdoor认证与OpenResty一键配置实战AstronRPA安全部署指南HTTPS网关、Casdoor认证与OpenResty一键配置实战 在 企业级RPA 场景中登录凭据和工作流数据是安全部署的重RPA工作流自动化低代码桌面应用后端前端企业应用JumpServer证书管理SSL/TLS证书配置与自动续期JumpServer证书管理SSL/TLS证书配置与自动续期 引言为什么证书管理如此重要 在当今数字化时代SSL/TLS证书已成为保障Web应用安全通信后端认证鉴权运维网络安全一文吃透 HTTPS 部署原理从 TLS 终结代理到 FastAPI 应用的证书、续期与转发头配置一文吃透 HTTPS 部署原理从 TLS 终结代理到 FastAPI 应用的证书、续期与转发头配置 HTTPS 的部署绝不是简单地打开开关证书从哪来、为后端Web框架API设计上一篇如何利用Laguna XS 2.1的滑动窗口注意力机制提升AI模型效率下一篇【亲测免费】 Comic-DL轻松下载漫画和漫画的命令行工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑