🍞Ubuntu24.04/中文版n8n/docker compose 部署

79 阅读4分钟

简介

n8n 是一款开源的、基于节点的工作流自动化平台,它允许你通过拖放不同的“节点”来构建复杂的自动化流程,将各种应用程序和服务连接起来,无需编写大量代码即可实现任务自动化。

⚙️ n8n 是什么?

n8n(读作 "n-eight-n")是 “nodemation” 的简写,意为基于节点(node)的自动化(automation)。它的核心价值在于将重复性的手动操作转变为可视化、可管理的自动化工作流。

✨ 核心特点与优势

n8n 在自动化工具中脱颖而出,主要得益于以下几点:

  • 开源与自托管:n8n 是开源的,你可以将其免费部署在自己的服务器上,从而完全掌控自己的数据,满足高标准的隐私和安全需求。
  • 可视化低代码/无代码操作:通过直观的拖放界面连接节点来构建流程,大大降低了使用门槛。同时,它也支持通过 JavaScript 代码节点实现高度自定义逻辑,兼顾了灵活性与易用性。
  • 丰富的集成能力:内置超过 300 种应用/服务的节点,涵盖常见的办公协作、社交媒体、数据库、云服务等(如 Slack、Google Sheets、Notion、MySQL)。对于未内置的服务,可以通过 HTTP Request 节点调用任何 API。
  • 灵活的触发方式:工作流可以由多种方式触发,例如定时任务(Cron)、Webhook 回调、收到新邮件等,适应不同业务场景。
  • 强大的社区支持:拥有活跃的开源社区,提供大量的社区贡献节点和问题解决方案。

🎯 主要应用场景

n8n 的应用范围非常广泛,几乎可以自动化任何涉及多个系统协作的任务:

  • 营销自动化:如新邮件订阅者自动收到欢迎信,或监控社交媒体提及并自动通知。
  • 数据同步与管理:在不同系统(如 CRM、数据库、云存储)间自动同步和备份数据。
  • 客户服务:自动处理客户工单,并根据关键词将问题路由到正确的支持团队。
  • 内部流程自动化:自动化报告生成与分发、审批流程管理等。
  • 智能 AI 工作流:集成 OpenAI/Claude 等 AI 模型,实现文本摘要、情感分析、内容创作等智能流程。

Docker Compose 部署

直接部署

  • 创建项目:

    mkdir n8n && cd n8n
    
  • 编写相关配置文件:

    # docker-compose.yml
    services:
      n8n:
        image: n8nio/n8n:latest  # 生产环境建议固定版本号
        container_name: n8n-production
        restart: unless-stopped
        ports:
          - "5678:5678"  # 建议只绑定到本地回环,通过反向代理暴露
        environment:
          # 基础配置
          - TZ=Asia/Shanghai
          - GENERIC_TIMEZONE=Asia/Shanghai
          - N8N_DEFAULT_LOCALE=zh-CN
          - N8N_LANG=zh-CN
          - LC_ALL=zh_CN.UTF-8
          - LANG=zh_CN.UTF-8
          - LANGUAGE=zh_CN:zh
          # 数据库配置 - 使用PostgreSQL
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_DATABASE=n8ndb
          - DB_POSTGRESDB_USER=n8nuser
          - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}  # 密码建议通过.env文件管理
          # 安全配置(以下密钥必须更改!)
          #- N8N_ENCRYPTION_KEY=${ENCRYPTION_KEY}  # 用于加密凭证,丢失将导致数据无法解密
          #- N8N_BASIC_AUTH_ACTIVE=true  # 启用基础认证
          #- N8N_BASIC_AUTH_USER=${BASIC_AUTH_USER}
          #- N8N_BASIC_AUTH_PASSWORD=${BASIC_AUTH_PASSWORD}
        volumes:
          - n8n_data:/home/node/.n8n  # 使用命名卷是更可靠的数据持久化方式
        depends_on:
          postgres:
            condition: service_healthy  # 等待数据库健康后再启动n8n
        healthcheck:  # 健康检查
          test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"]
          interval: 30s
          timeout: 10s
          retries: 3
        # 可选:资源限制
        #deploy:
        #  resources:
        #    limits:
        #      cpus: '2'
        #      memory: 4G
    
      postgres:
        image: postgres:16-alpine
        container_name: n8n-postgres
        restart: unless-stopped
        environment:
          - POSTGRES_USER=n8nuser
          - POSTGRES_PASSWORD=${DB_PASSWORD}
          - POSTGRES_DB=n8ndb
        volumes:
          - postgres_data:/var/lib/postgresql/data
        healthcheck:  # 数据库健康检查
          test: ["CMD-SHELL", "pg_isready -U n8nuser -d n8ndb"]
          interval: 10s
          timeout: 5s
          retries: 5
    
    volumes:
      n8n_data:
      postgres_data:
    
    # .env
    # 数据库密码(PostgreSQL)
    DB_PASSWORD=superpass123
    
    # n8n加密密钥(必须设置)
    ENCRYPTION_KEY=superpass123
    
  • 运行:

    docker compose up -d
    

    图片.png

中文版本

即便英语再好,也不如母语来的直接,所以还是使用中文更舒服一点;使用配置地区的操作,并不能直接转换为中文,使用 Docker 加插件的方法又很复杂,所以直接使用以下方法进行部署

  • 拉取项目:

    git clone https://ghfast.top/https://github.com/other-blowsnow/n8n-i18n-chinese
    cd n8n-i18n-chinese
    
  • 进入分支:目前最新版为 2.3.6,GitHub 中查询 tags:github.com/other-blows…

    git checkout n8n@2.3.6
    
    # 一些 git 操作常见语句:
    git status # 了解正处于什么位置;如果出现 HEAD detached at n8n@1.86.1,就确认了你正处于分离头指针状态
    git switch main # 切换回 main 等其他分支
    git switch -f main # 明确放弃当前所有未提交的修改
    git stash # 修改未完成,只想临时保存以便切换分支处理其他事情
    git commit # 修改已完成或达到一个可保存的节点,可以形成一个有意义的提交
    git tag # 快速查看本地仓库中的所有标签名
    git tag -n # 显示每个标签的简要说明
    
  • 修改相关细节配置:

    # docker-compose.yml
    		services:
    		  n8ntest:
    		    image: n8nio/n8n:2.3.6
    		    container_name: n8ntest
    		    ports:
    		      - "15678:5678"
    		    environment:
    		      - N8N_DEFAULT_LOCALE=zh-CN
    		      - N8N_SECURE_COOKIE=false
    		      - N8N_RUNNERS_ENABLED=true # 需要配置任务运行器
    		    volumes:
    		      - ./editor-ui-dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist
    		    stdin_open: true
    		    tty: true
    		    restart: unless-stopped
    
  • 运行:

    docker compose up -d
    # 注意访问地址为:http://localhost:15678;5678 为主分支运行端口
    

    图片.png

  • 解决每次启动容器都需要重新注册的问题:修改相应的docker-compose.yml

    • 添加数据持久化卷

    • 使用PostgreSQL数据库

      # docker-compose.yml
      services:
        n8ntest:
          image: n8nio/n8n:2.3.6
          container_name: n8ntest
          ports:
            - "15678:5678"
          extra_hosts:
            - "host.docker.internal:host-gateway"
          environment:
            # 基础配置
            - N8N_DEFAULT_LOCALE=zh-CN
            - N8N_SECURE_COOKIE=false
            - N8N_RUNNERS_ENABLED=true
            - N8N_ENCRYPTION_KEY=superpass123  # 建议使用强密码
            
            # PostgreSQL数据库配置
            - DB_TYPE=postgresdb
            - DB_POSTGRESDB_HOST=postgres
            - DB_POSTGRESDB_DATABASE=n8n
            - DB_POSTGRESDB_USER=n8n_user
            - DB_POSTGRESDB_PASSWORD=superpass123
          volumes:
            # 数据持久化卷(配置文件、自定义节点等)
            - ./n8n-data:/home/node/.n8n
            # 自定义UI(您原有的配置)
            - ./editor-ui-dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist
          depends_on:
            - postgres
            - n8n-runners
          stdin_open: true
          tty: true
          restart: unless-stopped
      
        # PostgreSQL数据库服务
        postgres:
          image: postgres:15
          container_name: n8n-postgres
          environment:
            - POSTGRES_DB=n8n
            - POSTGRES_USER=n8n_user
            - POSTGRES_PASSWORD=${DB_PASSWORD}
          volumes:
            # PostgreSQL数据持久化
            - postgres_data:/var/lib/postgresql/data
          restart: unless-stopped
          
      volumes:
        postgres_data:
      
    • 为 n8n-data 目录添加权限:没有该目录就新建一个

      sudo chown -R 1000:1000 ./n8n-data
      sudo chmod -R 755 ./n8n-data
      

连接 Ollama

  • 修改 docker-compose.yml:在 n8n 服务的配置块中添加extra_hosts参数,不进行配置会出现无法通过http://host.docker.internal:11434连接本地 Ollama 服务

    # docker-compose.yml
    services:
      n8ntest:
        image: n8nio/n8n:2.3.6
        container_name: n8ntest
        ports:
          - "15678:5678"
        extra_hosts:
          - "host.docker.internal:host-gateway" # 这一行将主机名映射到宿主机的网关IP
        environment:
          - N8N_DEFAULT_LOCALE=zh-CN
          - N8N_SECURE_COOKIE=false
          - N8N_RUNNERS_ENABLED=true
        volumes:
          - ./editor-ui-dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist
        stdin_open: true
        tty: true
        restart: unless-stopped
    
  • 配置凭据: 图片.png

  • 添加本地 Ollama 的URL: 图片.png

  • 使用模型: 图片.png

  • 仅支持如下搜索引擎:相比于 Dify、Open WebUI 可以使用 SearXNG,就略有逊色 图片.png