从零部署n8n:两种本地部署方案详解及上手实践

216 阅读7分钟

hello,大家好,我是'华尔街之狼'!

只需几分钟,无论是选择简单直接的npx方式,还是环境隔离更好的Docker部署,你都能轻松拥有这个强大的自动化工作流工具。

首先,我们简单了解一下什么是n8n。

n8n(发音为“n-eight-n”)是一款功能强大且完全开源的工作流自动化工具,它凭借直观的可视化拖放界面、丰富的预制节点和强大的数据集成能力,已经成为个人开发者和企业团队解放生产力、告别重复性工作的首选工具之一。

通过连接400多个不同的服务和API,你可以构建从简单的自动化提醒到复杂的企业级数据处理的任何流程。


部署准备:理解两种方式的核心差异

在开始具体部署前,了解npx与Docker这两种部署方式的差异,能帮助你做出更适合自己的选择。它们各有适用场景,并非简单的“好与坏”之分。

npx部署方案是直接在操作系统上运行n8n,需要预装Node.js环境。这种方式启动速度快、资源占用少,非常适合快速原型开发、个人学习或临时性的自动化任务。

它的主要缺点是工作流数据默认存储在本地运行目录,如果清理不当容易丢失,且进程管理相对简单。

Docker部署方案通过容器化技术将n8n及其所有依赖打包成一个独立的运行单元。这种方式最大的优势是环境隔离和一致性,彻底解决了“在我机器上能运行”的经典问题。

数据通过卷挂载持久化保存,即使容器删除,你的工作流和配置也不会丢失。它也更适合团队协作和后续迁移到生产环境

npx部署:最轻量的上手方案

如果你的开发环境已经配置了Node.js,或者你追求最快的部署体验,那么npx部署方式是最佳选择。以下是详细步骤。

首先是环境准备。你需要安装Node.js,其版本需要在v20以上。对于追求稳定性的用户,可以选择LTS(长期支持)版本。

安装完成后,打开终端或命令提示符,运行 node -v 和 npx -v 命令来验证安装是否成功。

执行安装与启动。环境就绪后,只需一条命令即可启动n8n。在终端中执行:

bash

npx n8n

如果之前全局安装过n8n,也可以使用 n8n start 命令。执行后,npx会自动处理依赖下载,最后输出访问地址信息。

当看到终端显示“n8n is ready”之类的提示,并给出 http://localhost:5678 地址时,就说明启动成功了。

优化与持久化。基础命令虽然简单,但默认配置存在两个主要问题:一是工作流数据易丢失,二是运行在非持久化模式。对于想认真使用的场景,建议在启动时指定外部数据库以实现数据持久化:

bash

npx n8n start --tunnel --env=DB_TYPE=postgresdb --env=DB_POSTGRESDB_DATABASE=n8n

此命令将n8n连接到PostgreSQL数据库,确保工作流、凭证等数据安全存储。

对于一些Windows用户,如果C盘空间紧张,可以通过 npm config set prefix "D:\npm-global" 命令修改npm全局安装路径,将依赖包安装到其他磁盘分区。

Docker部署:推荐的生产级方案

Docker部署是大多数生产环境和团队协作场景下的首选方案。它不仅解决了环境依赖问题,还提供了更好的可移植性和数据管理能力。

安装与配置Docker。首先确保你的系统已安装Docker Desktop或Docker Engine。对于Windows用户,需要启用WSL 2(Windows Subsystem for Linux)或Hyper-V作为后端

国内用户常因网络问题无法拉取镜像,可通过修改Docker镜像源解决:在Docker Desktop设置中,找到Docker Engine选项,添加镜像加速地址,大家可以使用我的镜像地址:

image.png

json

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://your_preferred_mirror",
    "https://dockerhub.icu",
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
  ]
}

基础容器运行。配置好Docker环境后,通过一条命令即可启动n8n容器:

bash

docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

参数解析:

  • -p 5678:5678:将容器内n8n服务的5678端口映射到主机的相同端口。
  • -v ~/.n8n:/home/node/.n8n:将主机目录挂载到容器,保证数据持久化
  • --name n8n:为容器命名,便于管理

启动后,在浏览器中访问 http://localhost:5678,看到n8n的欢迎界面即表示安装成功。

使用Docker Compose进行高级部署(推荐,我本人就使用这部署本地的)。对于需要数据库支持的生产环境,使用Docker Compose是更专业的做法。创建一个本地N8N文件夹,里面新建一个 docker-compose.yml 文件:

base

#docker-compose.yml  以下是我个人配置,大家按需可以配置
version: '3.8'

services:
  n8n:
    image: n8nio/n8n  # 可以指定版本,避免自动升级
    container_name: n8n-local
    hostname: n8n-server
    restart: unless-stopped  # 自动重启策略
    ports:
      - "5678:5678"  # Web界面端口
      - "5679:5679"  # Webhook端口(如果需要)
    environment:
      # 基础认证(强烈建议启用)
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD:-ChangeMe123!}
      
      # 服务器配置
      - NODE_ENV=production
      - N8N_PROTOCOL=http
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
      - WEBHOOK_URL=http://localhost:5678/
      
      # 数据库配置 - SQLite
      - DB_TYPE=sqlite
      - DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite
      
      # 执行数据清理(防止数据库过大)
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168  # 保留7天
      - EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000
      
      # 时区设置
      - GENERIC_TIMEZONE=Asia/Shanghai
      
      # 性能优化
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_METRICS=false
      - N8N_PERSONALIZATION_ENABLED=false
      
      # 安全设置
      - N8N_SECURE_COOKIE=false  # 本地开发设为false
      - N8N_USER_MANAGEMENT_DISABLED=false
      
      # 路径配置
      - N8N_USER_FOLDER=/home/node/.n8n
      - N8N_CUSTOM_EXTENSIONS=/usr/local/lib/node_modules/n8n/nodes
      
      # 日志级别
      - N8N_LOG_LEVEL=info
      - N8N_LOG_OUTPUT=file
      
    volumes:
      # 持久化数据
      - ./data:/home/node/.n8n
      
      # 自定义节点(如果需要)
      - ./n8n/custom-nodes:/usr/local/lib/node_modules/n8n/nodes/custom
      
      # 本地日志
      - ./logs:/home/node/.n8n/logs
      
      # 本地工作流存储目录(可选)
      - ./workflows:/home/node/workflows
      
      # Docker socket(用于在n8n中使用Docker节点)
      - /var/run/docker.sock:/var/run/docker.sock
      
    networks:
      - n8n-network
      
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5678/healthz"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
      
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G
          
    # 优化设置
    ulimits:
      nofile:
        soft: 65536
        hard: 65536

networks:
  n8n-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

进入创建的n8n文件夹目录使用命令执行刚才创建的yml:

image.png

bash

    docker-compose up -d

执行完成后,打开你的docker容器,images应该已经有n8nio/n8n包了。

image.png

接下来你可以在Containers里面来启动我们的n8n本都服务,可是设置我们本地启动的端口号,下图55000是我本地的端口号,默认端口应该是5678。

image.png

启动完成后,我们直接访问我们的本地地址:

    http://localhost:55000/

访问成功后应该显示下图:

image.png

至此,我们的本地化部署n8n 已经正式成功啦!对你有帮助,别忘记点个赞哦!!! 下一篇我们将带大家熟悉N8N的面板功能使用!尽情期待哦!!!