ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

n8n 生产部署实操指南:加密密钥持久化、PostgreSQL 切换与权限加固一次讲清

n8n 生产部署实操指南:加密密钥持久化、PostgreSQL 切换与权限加固一次讲清 n8n 生产部署实操指南加密密钥持久化、PostgreSQL 切换与权限加固一次讲清【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400 integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n这篇文章从一次真实事故讲起某团队的 n8n 生产部署因为重建容器漏挂了一个目录所有凭证当场解密失败。下面是我们后来固化的上线做法覆盖 Docker 部署命令、PostgreSQL 切换、会话与 MFA 加固、权限边界和备份清单。n8n 的数据分两部分搞清楚这一点后面才不容易踩坑工作流、执行记录和凭证本身可以放进 PostgreSQL但解密密钥永远在本地文件系统里。Docker 卷n8n_data挂载到容器内的/home/node/.n8n目录里面是 SQLite 库未切换时、webhook URL 和加密密钥文件。凭证用 AES 加密落库密钥丢了库里那些密文就是死数据。一个 64 字节的文件为什么值得单独备份丢了会怎样n8n 启动时如果找不到已有密钥会自动生成一把新的。对平台本身来说这叫自恢复对存量凭证来说这叫全灭旧密钥加密的密文用新密钥解不开没有任何后门可走。我们那次事故就是这种情况——容器重建后n8n_data卷没挂回去平台正常起来了登录正常点进任何一条凭证提示解密失败。数据库里什么都还在就是全解不开。所以结论很直接密钥文件必须离线备份且优先级高于数据库备份。密钥文件到底在哪里就是/home/node/.n8n目录下的config文件加密密钥存在其中。两个实操点恢复时数据库快照和密钥文件必须来自同一时点的状态。库是新备份、密钥是旧备份或反过来凭证照样对不上。备份脚本里最好把两者打成一个归档。这个目录要设访问权限密钥文件只给应用账号读别让它出现在任何镜像层或日志里。 生产环境最小部署命令与 PostgreSQL 切换清单数据库怎么切n8n 默认用 SQLite 存工作流和凭证生产上把它换成 PostgreSQL 是最值得做的一步多个 n8n 实例才能共享同一个库这是横向扩容和故障切换的前提。完整环境变量说明见仓库内的 docker/images/n8n/README.md核心就六个DB_POSTGRESDB_*项加一个DB_TYPE。下面这段是我们上线时实际在跑的组合改完占位符直接执行docker volume create n8n_data docker run -d --name n8n \ -p 5678:5678 \ -e DB_TYPEpostgresdb \ -e DB_POSTGRESDB_HOSTpg-master \ -e DB_POSTGRESDB_PORT5432 \ -e DB_POSTGRESDB_DATABASEn8n_prod \ -e DB_POSTGRESDB_USERn8n_user \ -e DB_POSTGRESDB_PASSWORD_FILE/run/secrets/db_password \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8n注意两点卷必须挂到/home/node/.n8n前面说的密钥就在里面端口5678对外暴露前确认前面有反向代理n8n 本体不做 TLS 终结。多实例场景下每个实例都挂同一个持久化存储NFS 或对象存储同步保证密钥文件一致。敏感配置怎么注入把数据库密码写进命令行或编排文件是内网扫描的高频发现项。n8n 支持在部分环境变量名后加_FILE后缀取值改为文件路径启动时读取文件内容。数据库相关六项HOST、DATABASE、PORT、USER、PASSWORD、SCHEMA 加各自_FILE版本都支持这个写法配合 Docker secrets 或 Kubernetes Secret 挂载到/run/secrets/即可。上例里DB_POSTGRESDB_PASSWORD_FILE就是这个用法密码本体不落编排文件。 登录与凭证的三层加固Cookie、MFA 与 RBAC会话安全的第一层是 Cookie 属性。生产上把 n8n 放在 HTTPS 后面然后收紧会话默认值N8N_COOKIE_SECUREtrue让认证 Cookie 只走加密通道N8N_COOKIE_SAMESITEstrict压缩跨站请求可利用的窗口。相关逻辑在packages/cli/src/auth/auth.service.ts里会话由 JWT 签发密码校验走哈希比对有效期可用配置文件里userManagement下的jwtSessionDurationHours与jwtRefreshTimeoutHours调整——默认偏宽松生产建议按团队规模收紧。MFA 怎么开、能不能强制第二层是 TOTP 多因素认证基于时间的一次性口令配合手机验证器 App。用户在个人设置里开启后系统生成密钥和扫码用的 QR 码并一次性给出 10 个恢复码用掉即失效。全员强制由packages/cli/src/mfa/mfa.service.ts里的isMFAEnforced判定看许可证状态和全局设置命令行入口是n8n settings set mfa.enforce true。上线前把恢复码的存放规则定下来建议进团队密码管理器否则强制 MFA 反而制造新的锁死场景。角色和工作流权限怎么分工第三层是 RBAC基于角色的访问控制。管理员持有全局管理权限工作流和凭证按项目授权项目内分所有者、编辑、只读三档分别决定谁能改流程、谁能跑、谁只能看。外部协作者只进白名单项目凭证只在项目内共享。这套分工在库里的落点可以参考docs/generated/postgres-schema/下的role、role_scope、project_relation、shared_workflow、shared_credentials等表结构权限改动后对着表查一遍比只靠 UI 更稳。 上线后第一周健康检查、备份习惯与三个高频故障探针端点怎么选n8n 暴露两个健康端点实现在packages/cli/src/abstract-server.ts/healthz是存活探针进程活着就返回/healthz/readiness是就绪探针实例完成全部初始化才放行。负载均衡器挂 readiness重启挂 liveness这样发布窗口期流量不会打进还没初始化完的实例。备份要覆盖哪几块备份对象位置方式频率PostgreSQL 主库数据库实例pg_dump 全量落对象存储每日加密密钥文件/home/node/.n8n内 config离线单独归档与库备份同批次变更时二进制数据卷独立存储目录按执行数据保留策略同步每周故障从哪查起现象先看哪里凭证解密失败密钥文件是否挂对、是否与库备份同时点登录后提示 MFA 错误恢复码是否可用、强制开关是否误改工作流不执行执行历史定位失败节点再查docker logs里的报错行监控侧把错误率告警挂在执行日志上即可不必单独搭一套指标体系升级前先看仓库里的CHANGELOG.md和packages/cli/BREAKING-CHANGES.md把破坏性变更在测试环境跑一遍再上生产。以上清单按顺序做完单实例就能稳定跑起来多实例共享库的扩展只在网络存储和负载均衡两处多做事密钥和备份规则完全不变。【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400 integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表