工作流自动化:本地和服务器上安装n8n

近年来,出现了许多“无代码”或“低代码”的自动化平台(工作流自动化),它们允许连接应用程序(网络和桌面)、API服务,无需编写复杂代码。n8n就是其中之一,它是开源的、免费的、易于使用且非常灵活。只需点击几下,就可以创建在应用程序、API或数据库之间交换数据的流程,自动化重复性任务,如发送电子邮件、更新电子表格或集成企业系统。

在接下来的几周里,我将使用它来测试一些流程的自动化,并验证目前在MulesoftESB上运行的一些流程是否可以迁移到这个平台。

因此,我需要在我的Windows PC上(使用已安装的Node.js解释器)和Ubuntu服务器上(使用Docker容器)安装它,在这篇文章中,我描述了完成这些安装的步骤。

1. 工作流自动化:与NodeRed和Mulesoft ESB的区别

在流程自动化方面,我曾使用过多种产品,其中包括:n8nNode-REDMuleSoft ESB。虽然它们有一些相似的功能,但它们是具有非常不同理念的工具。

  • n8n旨在轻量且灵活,允许通过连接API、服务和脚本来创建自动化流程,而无需编写过多代码。它非常适合测试、快速集成或个人自动化,如Gmail、社交应用(FacebookX等)、Gdrive、通信平台(SlackDiscord)、消息应用(WhatsAppTelegram等)、AI API等。
  • Node-RED是一款用于物联网的产品,作为图形界面来设计实时处理事件和数据的流程。它非常适合传感器、Raspberry Pi或响应持续外部输入的系统。
  • MuleSoft ESB是一款商业产品(尽管有CE版本),作为企业服务总线,用于在企业系统之间协调复杂集成,集中管理API、安全、日志等。Mule ESB非常适合:让用不同语言编写或使用不同格式数据的应用程序通信,逐步掩盖和现代化过时系统,并防止应用程序通过点对点连接通信,而是通过集中式“总线”通信。

这三种产品都提供了一个仪表板,可以通过拖放小块”来连接,每个小块执行某项活动或处理数据,然后传递给下一个小块。三者都可以从包含许多现成可配置和使用的小块的库中获取这些小块。

选择这三种产品之一取决于项目的复杂性、领域和目的。

2. 使用Node.js和PM2的本地安装和配置

以下是我在Windows 11上安装n8n的步骤:

我们的PC上需要有Node.js,它包含包管理器npm,如果已经安装,可以跳过以下步骤:

  1. 安装Node.js:对于Windows,有一个安装包可以下载并执行。[5]
  2. 安装n8npm2(这是一个方便的进程管理器,用于启动使用Node.js的程序)。在终端(例如PowerShell)中输入命令:
    npm install -g n8n pm2
  3. 仍然在终端中,我们可以使用以下命令启动n8n
    n8n
  4. 如果程序启动,还可以通过在键盘上输入字母“o”在浏览器中打开它,如以下消息所示:
  5. 此时,程序在端口5678上运行(http://localhost:5678),并显示一个表单以设置管理员帐户。
  6. CTRL+C停止执行。
  7. 查看n8n的安装目录(我们需要配置pm2):
    PS C:\SPAZIODATI> where.exe n8n C:\Users\claudio\AppData\Roaming\npm\n8n C:\Users\claudio\AppData\Roaming\npm\n8n.cmd
  8. 此时,我们可以引入pm2,它是一个程序,方便启动和监控Node.js应用程序。因此,在工作目录中创建文件ecosystem.config.json,并写入启动n8n的命令:
    { "apps": [ { "name": "n8n", "script": "C:\\Users\\claudio\\AppData\\Roaming\\npm\\node_modules\\n8n\\bin\\n8n", "env": { "N8N_PORT": 5678, "N8N_EDITOR_BASE_URL": "http://localhost:5678" } } ]}
  9. 保存并关闭文件后,可以使用以下两个命令之一启动n8n
    pm2 start C:\SPAZIODATI\ecosystem.config.js #从任何文件夹。 pm2 start ecosystem.config.js #从文件所在的文件夹。

  10. 这是管理进程的命令列表:
    pm2 list        #显示PM2管理的进程列表,包括状态、运行时间和CPU/RAM。 pm2 stop n8n    #停止n8n pm2 restart n8n #重启n8n pm2 delete n8n # 删除n8n pm2 logs n8n # 实时显示日志 pm2 show n8n    #显示“n8n”进程的完整详细信息(路径、日志、环境变量等)。 pm2 monit       #打开一个交互界面以监控资源和日志。 pm2 reload all  #重新加载所有进程而不中断(适用于生产环境)。 pm2 env 0       #显示ID为0的进程的环境变量。 pm2 update      #更新PM2并重新加载所有进程。 pm2 save        #保存当前进程状态以便在启动时自动重启。 pm2 startup     #配置PM2以便在系统重启时自动启动。它会显示一个命令供复制和粘贴。

请注意,如果我们需要其他基于Node.js的应用程序,我们可以将启动命令添加到ecosystem.config.json中,并使用pm2命令管理所有这些应用程序,并为每个应用程序使用我们在JSON文件中“name”属性中给出的名称。还可以使应用程序在操作系统启动时启动。

 

2. 使用Docker Compose在Ubuntu服务器上安装

我还在我的服务器上安装了n8n,以便有一个可以从互联网访问的版本。众所周知,我在Aruba上有一个虚拟服务器,运行Ubuntu,我在上面进行各种测试和实验。

在这个服务器上,我安装了Docker以便运行容器。以下是我使用的命令,请注意:

  • 我选择使用一个可在不进入容器的情况下访问的文件夹作为持久卷(绑定挂载):/home/n8n/data。
  • 为了方便,服务器上的Docker以root身份运行,这不是生产环境,容器仅在我使用时开启。

步骤:

  1. 我创建了文件夹/home/n8n/data,并将写权限授予用户1000,在容器中,这个用户是运行n8n的用户,而在我的服务器上是Ubuntu用户:
    sudo mkdir /home/n8n sudo mkdir /home/data sudo chown -R 1000:1000 /home/n8n cd /home/n8n sudo vi docker-compose.yml
  2. /home/data中,我创建了文件docker-compose.yml,内容如下:
    services: n8n: image: n8nio/n8n:latest container_name: n8n ports: - "127.0.0.1:5678:5678" # 仅在本地主机上暴露,通过Apache environment: - N8N_HOST=n8n.claudiobattaglino.it - N8N_PROTOCOL=https - WEBHOOK_URL=https://n8n.claudiobattaglino.it - N8N_EDITOR_BASE_URL=https://n8n.claudiobattaglino.it - N8N_PORT=5678 - N8N_USER_MANAGEMENT_DISABLED=false - N8N_SECURE_COOKIE=true - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - N8N_PROXY_HOPS=1 volumes: - /home/n8n/data:/home/node/.n8n # SQLite, 配置, 密钥 volumes: {}
  3. 保存并关闭文件后,我执行了以下命令以创建加密密钥:
    root@quercia:/home/n8n# openssl rand -base64 32
  4. 将此命令的输出保存并复制到文件/home/n8n/.env中,使其内容如下:
    root@quercia:/home/n8n# cat .env N8N_ENCRYPTION_KEY=eGKkIs......Myd7cOmQ=
  5. 此时,可以创建在端口5678上监听的容器(http://127.0.0.1:5678)。
    docker compose up -d
  6. 现在容器正在运行。
  7. 这些是可以用于管理的命令:
    docker ps           # 显示活动容器。 docker ps -a        # 显示所有容器,包括已停止的。 docker start n8n    # 启动n8n容器(如果已创建)。 docker stop n8n     # 停止容器。 docker restart n8n  # 重启容器。 docker rm n8n       # 删除容器(必须停止)。 docker logs -f n8n  # 实时显示容器日志。

这些是其他用于管理、维护和调试Docker容器的命令:

注意!!!我所指的是用于测试n8n的实例的说明,而不是用于创建生产服务。

 

3. 配置Apache以便从互联网访问n8n

Ubuntu服务器上的容器中安装n8n后,程序仅在本地可访问,地址为:http://127.0.0.1:5678

服务器上安装了Apache 2,证书由Let’s EncryptCertbot管理。

为了使其从互联网可见,需要执行以下步骤:

  1. DNS修改:添加A记录以将地址n8n.claudiobattaglino.it指向此服务器的IP地址。
  2. Apache模块:在服务器上安装以下模块:
    sudo a2enmod proxy proxy_http proxy_wstunnel headers rewrite sudo apachectl configtest sudo systemctl reload apache2
  3. 安装SSL证书:
    sudo certbot --apache 
  4. 配置虚拟主机:创建文件004-n8n.claudiobattaglino.it.conf 和文件004-n8n.claudiobattaglino.it-le-ssl.conf: 
    root@quercia:/etc/apache2/sites-available# cat 004-n8n.claudiobattaglino.it.conf <VirtualHost *:80> ServerName n8n.claudiobattaglino.it RewriteEngine On RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] ErrorLog ${APACHE_LOG_DIR}/n8n_error.log CustomLog ${APACHE_LOG_DIR}/n8n_access.log combined </VirtualHost>
    root@quercia:/etc/apache2/sites-available# cat 004-n8n.claudiobattaglino.it-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> ServerName n8n.claudiobattaglino.it ProxyPreserveHost On ProxyRequests Off ProxyAddHeaders On RequestHeader set X-Forwarded-Proto "https" # --- WebSocket for n8n Push channel --- ProxyPass /rest/push  ws://127.0.0.1:5678/rest/push ProxyPassReverse /rest/push  ws://127.0.0.1:5678/rest/push # --- Normal HTTP traffic --- ProxyPass / http://127.0.0.1:5678/ connectiontimeout=5 timeout=600 ProxyPassReverse / http://127.0.0.1:5678/ ErrorLog ${APACHE_LOG_DIR}/n8n_error.log CustomLog ${APACHE_LOG_DIR}/n8n_access.log combined SSLCertificateFile /etc/letsencrypt/live/n8n.claudiobattaglino.it/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/n8n.claudiobattaglino.it/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
  5. 重启Apache:检查配置是否正确并重启Apache:
    sudo apachectl configtest sudo systemctl reload apache2
  6. 此时,网站可以通过以下地址访问:https://n8n.claudiobattaglino.it

应用程序的一些截图:

来源和参考

  1. n8n,官方网站。
  2. n8n社区:连接、学习和分享自动化见解,官方网站。
  3. n8n教程播放列表,官方YouTube频道。
  4. 用于物联网领域流程设计的Node-RED安装,在此博客上。
  5. Node.js,官方网站。
  6. PM2,官方网站。
  7. PM2进程管理快速入门,官方网站。
  8. 什么是Mule ESB?,官方网站。
  9. Node Red,官方网站。
  10. 介绍 – Node-RED基础YouTube
  11. Node-RED意大利语基础课程 – 介绍 – 1RobotProjectsYouTube

*** 注意:本文通过使用n8n和OpenAI的自动流程翻译。

7 months ago

Leave a Reply

Your email address will not be published. Required fields are marked *

评论审核已启用。您的评论可能需要一段时间后才能被显示。