n8n工作流自动化平台的实操:本地化高级部署

n8n工作流平台本地化高级部署实操

一、本地高级部署

1.下载

docker pull docker.n8n.io/n8nio/n8n

2.运行

docker volume create n8n_data

docker run -dit   --name n8n  -p 5678:5678  -v n8n_data:/home/node/.n8n  -e N8N_SECURE_COOKIE=false  -e N8N_RUNNERS_ENABLED=true -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true -e NODE_FUNCTION_ALLOW_EXTERNAL=iconv-lite -e DB_TYPE=postgresdb  -e DB_POSTGRESDB_DATABASE=langfuse_db -e DB_POSTGRESDB_HOST=192.168.1.101 -e DB_POSTGRESDB_PORT=5432 -e DB_POSTGRESDB_USER=langfuse -e DB_POSTGRESDB_SCHEMA=n8n -e DB_POSTGRESDB_PASSWORD=1234~ -e GENERIC_TIMEZONE="Asia/Shanghai"   -e TZ="Asia/Shanghai" --restart=always docker.n8n.io/n8nio/n8n

2.1.部分参数说明

-e N8N_SECURE_COOKIE=false:

这个选项控制是否启用安全 Cookie 标志。如果设置为 true,n8n 会将 Secure 属性添加到其 session cookies 中,这意味着 cookies 只能通过 HTTPS 协议发送。当设置为 false 时,即使你的站点通过 HTTP 访问,cookies 也会被发

<think>我们正在讨论如何开发自定义n8n节点以实现自动化配置和流程搭建。根据用户的问题,他想要通过自定义节点来自动化生成工作流配置,这通常涉及到将结构化的数据(如JSON)转换为n8n的工作流节点配置。 参考之前的对话,我们知道用户希望利用MCP客户端来自动化理解需求并搭建工作流,但MCP本身不具备自然语言理解能力,因此需要外部AI服务将自然语言需求转换为结构化配置,然后通过自定义节点将结构化配置转换为n8n工作流。 现在,用户的问题聚焦在如何开发这样的自定义节点上。 步骤: 1. 了解n8n节点的基本结构 2. 创建自定义节点项目 3. 编写节点逻辑:将输入的结构化配置(例如JSON)转换为n8n节点数组 4. 测试节点 5. 在n8n中安装自定义节点 详细步骤: 1. **节点基本结构**: n8n节点是一个npm包,包含以下关键文件: - `package.json`:定义节点名称、版本和依赖 - `节点名.node.js`:节点主文件,包含节点定义 - `节点名.html`:节点的UI界面(可选,用于参数输入) 2. **创建项目**: ```bash mkdir n8n-nodes-automation-builder cd n8n-nodes-automation-builder npm init -y ``` 3. **编写节点主文件(例如:AutomationBuilder.node.js)**: ```javascript const { Node } = require('n8n-workflow'); class AutomationBuilder extends Node { constructor() { super(); // 节点属性定义 this.name = 'automationBuilder'; this.displayName = 'Automation Builder'; this.icon = 'fa:robot'; this.group = ['transform']; this.version = 1; this.description = 'Convert structured configuration to n8n workflow nodes'; this.inputs = ['main']; this.outputs = ['main']; this.properties = [ { displayName: 'Configuration JSON', name: 'json', type: 'string', typeOptions: { rows: 5, }, default: '', description: 'Structured JSON configuration for the workflow', }, ]; } async execute() { // 获取输入数据 const items = this.getInputData(); const returnItems = []; for (let i = 0; i < items.length; i++) { try { const jsonConfig = this.getNodeParameter('json', i, ''); const workflowConfig = JSON.parse(jsonConfig); // 这里应该包含将配置转换为节点数组的逻辑 // 例如,workflowConfig 可能是一个节点数组,我们可以直接输出 // 但注意:节点需要符合n8n节点数据格式 // 将转换后的节点数组作为输出 returnItems.push({ json: { nodes: workflowConfig } }); } catch (error) { // 处理错误 if (this.continueOnFail()) { returnItems.push({ json: { error: error.message } }); } else { throw error; } } } return [returnItems]; } } module.exports = AutomationBuilder; ``` 4. **测试节点**: 在开发过程中,可以将节点链接到本地n8n实例进行测试。在n8n的用户设置中,启用自定义节点,并指定自定义节点的路径。 5. **安装自定义节点**: 将节点打包发布到npm(可选),然后通过npm安装在n8n的相同环境中,或者直接将节点文件夹放在n8n的`custom`目录下(需要配置n8n的`N8N_CUSTOM_EXTENSIONS`环境变量)。 6. **使用节点**: 在n8n编辑器中,添加自定义节点“Automation Builder”,在节点的配置框中输入结构化的JSON配置(这个JSON配置应该由之前的AI服务生成),然后节点会输出一个包含节点数组的对象。这个输出可以连接到其他节点,或者通过n8n的REST API动态创建工作流。 注意:动态创建工作流需要调用n8n的REST API(需要管理员权限)。在自定义节点中,我们可以添加一个HTTP请求节点来调用n8n的API,将生成的节点数组作为请求体发送到`POST /workflows`端点。 但是,在节点中直接调用API需要处理认证(例如使用API密钥)。因此,我们可以在自定义节点中生成工作流配置,然后通过HTTP请求节点发送。 另一种做法:自定义节点只负责生成工作流配置,然后由用户手动复制或通过另一个HTTP请求节点发送。 考虑到安全性和流程的清晰性,建议将生成工作流配置和部署工作流分为两个步骤。 因此,我们可以设计两个自定义节点: 1. **配置解析节点**:将JSON配置转换为n8n节点数组(如上述节点)。 2. **工作流部署节点**:接收节点数组,调用n8n的REST API创建或更新工作流工作流部署节点的实现(伪代码): - 输入:节点数组(来自上一个节点) - 属性:n8n实例的URL和API密钥 - 执行:发送POST请求到`{{url}}/rest/workflows`,请求体为`{ "nodes": 节点数组, "name": "动态生成的工作流" }` 这样,用户就可以构建一个工作流:AI解析服务生成配置 -> 配置解析节点 -> 工作流部署节点。 由于n8n节点不能直接返回节点数组并创建新的工作流(在同一个工作流执行中),所以工作流部署节点需要调用外部API(即n8n自己的API)来创建新的工作流。 关于n8n的REST API,参考[^1]和[^2]中提到的内容,具体可查看官方文档。 总结步骤: 1. 开发配置解析节点(将JSON字符串转换为节点数组对象) 2. 开发工作流部署节点(将节点数组发送到n8n API) 3. 在n8n中组合使用这两个节点,实现从配置到工作流部署自动化 注意:在调用n8n API时,需要处理认证。可以在工作流部署节点的属性中设置API密钥(使用密码类型字段)。 下面是一个工作流部署节点的简单示例: ```javascript const { Node } = require('n8n-workflow'); const axios = require('axios'); class WorkflowDeployer extends Node { constructor() { super(); // 节点属性定义 this.name = 'workflowDeployer'; this.displayName = 'Workflow Deployer'; this.icon = 'fa:cloud-upload-alt'; this.group = ['output']; this.version = 1; this.description = 'Deploy a workflow to n8n via REST API'; this.inputs = ['main']; this.outputs = ['main']; this.properties = [ { displayName: 'n8n URL', name: 'url', type: 'string', default: 'http://localhost:5678', required: true, }, { displayName: 'API Key', name: 'apiKey', type: 'string', typeOptions: { password: true, }, default: '', required: true, }, { displayName: 'Workflow Name', name: 'name', type: 'string', default: 'Dynamic Workflow', required: true, }, ]; } async execute() { const items = this.getInputData(); const returnItems = []; for (let i = 0; i < items.length; i++) { try { const url = this.getNodeParameter('url', i, ''); const apiKey = this.getNodeParameter('apiKey', i, ''); const workflowName = this.getNodeParameter('name', i, ''); // 从输入数据中获取节点数组 const nodes = items[i].json.nodes; // 假设上一个节点输出的json字段包含nodes数组 const response = await axios.post( `${url}/rest/workflows`, { name: workflowName, nodes }, { headers: { 'X-N8N-API-KEY': apiKey, 'Content-Type': 'application/json', }, } ); returnItems.push({ json: { success: true, workflowId: response.data.data.id } }); } catch (error) { if (this.continueOnFail()) { returnItems.push({ json: { error: error.message } }); } else { throw error; } } } return [returnItems]; } } module.exports = WorkflowDeployer; ``` 注意:这个节点假设输入项中包含一个`nodes`属性,即节点数组。同时,它需要用户提供n8n的URL和API密钥。 这样,用户就可以构建一个自动化流程: 1. 使用HTTP请求节点调用AI服务,将自然语言需求转换为结构化的节点配置(JSON字符串)。 2. 使用配置解析节点将JSON字符串解析为节点数组(并可能进行一些验证和转换)。 3. 使用工作流部署节点将节点数组发送到n8n API,创建新的工作流。 最后,需要提醒用户,动态创建工作流需要谨慎,因为错误的配置可能导致工作流无法运行。建议在正式使用前进行充分的测试。 相关问题: 1. 如何保护n8n API密钥的安全? 2. n8n的工作流节点配置有哪些必填字段? 3. 如何调试自定义节点? 4. 自定义节点支持哪些类型的参数输入?</think>以下是开发自定义n8n节点实现自动化配置的完整指南,结合技术原理和实操步骤: ### 一、自定义节点开发流程 #### 1. **环境准备** ```bash # 创建节点模板 npx n8n-node-dev init # 安装依赖 cd your-node-name && npm install ``` #### 2. **核心文件结构** ``` your-node-name/ ├── package.json # 节点元数据 ├── YourNodeName.node.js # 节点主逻辑 ├── YourNodeName.html # 节点UI配置 └── icons/ # 节点图标 ``` #### 3. **节点逻辑开发(示例:自动化配置生成器)** ```javascript // AutomationBuilder.node.js const { Node } = require('n8n-workflow'); module.exports = class AutomationBuilder extends Node { constructor() { super(); this.name = 'automationBuilder'; this.displayName = '自动化构建器'; this.icon = 'fa:robot'; this.group = ['transform']; this.version = 1; this.description = '将JSON配置自动转换为工作流节点'; // 定义输入参数 this.properties = [ { displayName: '配置JSON', name: 'configJson', type: 'json', default: '', description: '工作流配置的JSON数据', } ]; } async execute() { const configJson = this.getNodeParameter('configJson', 0); const workflowConfig = JSON.parse(configJson); // 核心转换逻辑 const nodes = workflowConfig.actions.map(action => { return { type: action.nodeType, parameters: action.params }; }); // 返回节点数组 return [{ json: { nodes } }]; } }; ``` #### 4. **UI界面配置(HTML文件)** ```html <!-- AutomationBuilder.html --> <div class="form-item"> <label>工作流配置</label> <textarea rows="8" :value="parameters.configJson" @input="updateParameter('configJson', $event.target.value)" ></textarea> </div> ``` ### 二、自动化配置实现原理 1. **配置输入** 用户输入结构化JSON(可由AI生成): ```json { "actions": [ { "nodeType": "n8n-nodes-base.httpRequest", "params": { "url": "https://api.example.com" }}, { "nodeType": "n8n-nodes-base.if", "params": { "condition": "data > 50" }} ] } ``` 2. **动态节点生成** 通过`execute()`方法将JSON转换为n8n节点数组,遵循格式: ```javascript { type: 'n8n-nodes-base.httpRequest', // 官方节点类型ID parameters: { url: '...' } // 节点参数 } ``` 3. **工作流部署** 结合n8n REST API动态创建: ```bash POST /rest/workflows { "name": "AI生成工作流", "nodes": [...] // 自定义节点输出 } ``` ### 三、关键集成技术 1. **AI配置生成器** 使用OpenAI节点生成结构化配置: ```prompt 用户需求:"当温度超过40℃时发送邮件告警" ↓ AI输出: { "actions": [ { "nodeType": "n8n-nodes-base.mcpRead", "params": { "sensor": "temp" }}, { "nodeType": "n8n-nodes-base.if", "params": { "condition": "data > 40" }}, { "nodeType": "n8n-nodes-base.emailSend", "params": { "to": "admin@plant.com" }} ] } ``` 2. **MCP客户端集成** 在自定义节点中嵌入MCP SDK: ```javascript const mcpClient = require('mcp-sdk'); async execute() { const deviceData = await mcpClient.readSensor('CNC_Machine_7'); // 处理设备数据... } ``` ### 四、调试与部署 1. **本地测试** 在`~/.n8n/custom`目录添加节点文件,重启n8n 2. **生产部署** ```bash # 打包节点 npm pack # 在n8n服务器安装 npm install ./your-node-name-1.0.0.tgz ``` 3. **权限配置** 在`docker-compose.yml`添加: ```yaml environment: N8N_CUSTOM_EXTENSIONS: /data/custom-extensions volumes: - ./custom-nodes:/data/custom-extensions ``` ### 五、最佳实践案例 **工业设备监控自动化**: 1. AI解析需求 → 生成JSON配置 2. 自定义节点转换配置 → 节点数组 3. 调用n8n API部署工作流 4. MCP节点实时读取设备数据 5. 条件节点触发告警 > 注:完整实现需配合n8n的[节点开发文档](https://docs.n8n.io/integrations/creating-nodes/)和[REST API](https://docs.n8n.io/api/)[^1][^2]。 --- **相关问题**: 1. 如何保证自定义节点与n8n版本的兼容性? 2. 自定义节点如何实现OAuth2认证? 3. 在工业场景中如何调试MCP节点通信? 4. n8n工作流版本控制有哪些最佳实践?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值