n8n使用教程

Reno 于 2025-06-28 发布

n8n使用教程

环境变量

待补全中,目前进度0.5%…

基础设置

语言和时区

安全

数据库

默认使用 sqlite

邮件

默认开启了smtp

本地部署

需要提前安装 git 和 Node.js (版本 ≥ 18)

  1. 克隆仓库到本地
git clone https://github.com/n8n-io/n8n && cd n8n
  1. 本地构建
pnpm build
  1. 运行服务
pnpm start

抱脸部署

需注意Huggingface无法发送邮件

感谢 @blowsnow 的汉化

image-20250524133659915

注意设置以下环境变量

变量名 示例值 描述
HF_TOKEN hf_**** 必填,HuggingFace令牌,点击获取
SYNC_INTERVAL 36000 可选,同步间隔
  1. Dockerfile

    FROM n8nio/n8n:latest
       
    ENV VENV_PATH=/opt/venv
    ENV PATH="$VENV_PATH/bin:$PATH"
    ENV N8N_PORT=7860
    ENV N8N_DEFAULT_LOCALE=zh-CN
    ENV GENERIC_TIMEZONE=Asia/Shanghai
    ENV N8N_RUNNERS_ENABLED=true
    ENV N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
       
    USER root
       
    RUN apk add --no-cache \
            bash \
            python3 \
            py3-pip \
            curl && \
        python3 -m venv $VENV_PATH && \
        pip install --no-cache-dir --upgrade pip && \
        pip install --no-cache-dir huggingface-hub && \
        \
        # --- 开始安装中文语言包 ---
        echo "Downloading n8n Chinese UI from ${I18N_URL}" && \
        curl -L -o /tmp/editor-ui.tar.gz "${I18N_URL:-https://github.com/other-blowsnow/n8n-i18n-chinese/releases/latest/download/editor-ui.tar.gz}" && \
        mkdir -p /tmp/check && \
        tar -xzf /tmp/editor-ui.tar.gz -C /tmp/check && \
        rm -rf /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/* && \
        cp -r /tmp/check/dist/* /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/ && \
        rm -rf /tmp/check /tmp/editor-ui.tar.gz && \
        # --- 中文语言包安装结束 ---
        \
        apk del curl && \
        rm -rf /var/cache/apk/* && \
        \
        chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/ && \
        chown -R node:node $VENV_PATH
       
    COPY sync_data.sh .
    RUN chmod +x sync_data.sh && chown node:node sync_data.sh
       
    USER node
       
    EXPOSE 7860
       
    ENTRYPOINT [ "sh", "-c", "$HOME/sync_data.sh" ]
    
  2. sync_data.sh

    #!/usr/bin/env bash
    set -euo pipefail
    IFS=$'\n\t'
       
    set -a
       
    log() {
      echo "[$(date +'%F %T')] $*"
    }
       
    init_backup(){
      if [[ -n "${DATASET_ID:-}" ]]; then
        log "📁 使用外部定义的 DATASET_ID=$DATASET_ID"
        return 0
      fi
      if [[ -z "${HF_TOKEN:-}" ]]; then
        log "⚠️ HF_TOKEN 未设置,跳过备份"
        return 1
      fi
       
      USER_ID=$(python3 - <<'PY'
    import os,sys
    from huggingface_hub import HfApi
    try:
        name = HfApi(token=os.getenv("HF_TOKEN")).whoami().get("name","")
        print(name) if name else sys.exit(1)
    except:
        sys.exit(1)
    PY
      )
      if [[ -z "$USER_ID" ]]; then
        log "⚠️ 获取 USER_ID 失败,跳过备份"
        return 1
      fi
       
      DATASET_ID="${USER_ID}/data"
      # ← 这里修正了变量名
      log "✅ 设置默认 DATASET_ID=$DATASET_ID"
      return 0
    }
       
    prep_repo(){
      python3 <<'PY'
    import os
    from huggingface_hub import HfApi
    api = HfApi(token=os.getenv("HF_TOKEN"))
    repo = os.environ["DATASET_ID"]
    author = repo.split("/")[0]
    if not any(d.id == repo for d in api.list_datasets(author=author)):
        api.create_repo(repo_id=repo, repo_type="dataset", private=True)
    branch = "main"
    refs = api.list_repo_refs(repo_id=repo, repo_type="dataset").branches
    if branch not in [b.name for b in refs]:
        api.create_branch(repo_id=repo, repo_type="dataset", branch=branch)
    PY
      log "✅ 数据集 & 分支就绪"
    }
       
    restore_latest(){
      python3 <<'PY'
    import os,sys,tarfile,tempfile
    from huggingface_hub import HfApi
    api = HfApi(token=os.getenv("HF_TOKEN"))
    repo, branch = os.getenv("DATASET_ID"), "main"
    files = api.list_repo_files(repo_id=repo, repo_type="dataset", revision=branch)
    backs = sorted(f for f in files if f.endswith(".tar.gz"))
    if not backs: sys.exit(0)
    td = tempfile.mkdtemp()
    path = api.hf_hub_download(repo_id=repo, repo_type="dataset",
        revision=branch, filename=backs[-1], local_dir=td)
    with tarfile.open(path) as t:
        t.extractall(os.getenv("BACKUP_DIR"))
    PY
      log "✅ 恢复最新备份(如果有)"
    }
       
    do_backup(){
      ts=$(date +%Y%m%d_%H%M%S)
      fname="Backup_${ts}.tar.gz"
      tmp=$(mktemp -d)
      tar -czf "$tmp/$fname" -C "$BACKUP_DIR" .
       
      python3 <<PY
    import os
    from huggingface_hub import HfApi
    api = HfApi(token=os.getenv("HF_TOKEN"))
    repo, branch = os.getenv("DATASET_ID"), "main"
    api.upload_file(path_or_fileobj="$tmp/$fname",
                    path_in_repo="$fname",
                    repo_id=repo, repo_type="dataset",
                    revision=branch)
    keep = int(os.getenv("DATASET_NUM", "10"))
    files = api.list_repo_files(repo_id=repo, repo_type="dataset", revision=branch)
    backs = sorted(f for f in files if f.endswith(".tar.gz"))
    for old in backs[:-keep]:
        api.delete_file(path_in_repo=old,
                        repo_id=repo, repo_type="dataset", revision=branch)
    api.super_squash_history(repo_id=repo, repo_type="dataset", branch=branch)
    PY
       
      rm -rf "$tmp"
      log "✅ 上传备份并清理临时文件"
    }
       
    sync_loop(){
      while true; do
        do_backup
        log "⏳ 下次同步在 ${SYNC_INTERVAL}s 后"
        sleep "${SYNC_INTERVAL}"
      done
    }
       
    main(){
      BACKUP_DIR="${BACKUP_DIR:-$HOME/.n8n}"
      DATASET_NUM="${DATASET_NUM:-10}"
      SYNC_INTERVAL="${SYNC_INTERVAL:-36000}"
       
      if init_backup; then
        log "🚀 启动备份/同步流程,使用数据集:$DATASET_ID"
        prep_repo
        restore_latest
        sync_loop &    # 后台
      else
        log "🚀 直接启动主应用,无备份/同步"
      fi
       
      exec tini -- /docker-entrypoint.sh
    }
       
    main
    
  3. README.md

    ---
    title: N8N
    emoji: 📚
    colorFrom: green
    colorTo: pink
    sdk: docker
    pinned: false
    ---
    

快捷键

按住 Ctrl 后滑动鼠标滚轮放大缩小

按住鼠标中键拖动

工作流

Flux 绘图

原作 yuyu0.0,博主根据 fal 进行了修改

点击这里 打开复制工作流,密码 linux.do,注意替换所有的 example.com 为 R2 存储桶的自定义域

打开 n8n 并登录后,点击左上角 +Workflow,将复制内容粘贴到页面中央稍待

  1. 修改 Google 节点

    找到 Google 节点双击打开设置点击 Select CredentialCreate new credential

    image-20250526104640147

    无法连接到 Google 时 Host 需要修改为为代理地址,否则无需修改,API Key 填写从 AIStudio 获取的密钥

    image-20250525203428286

  2. 修改绘图节点

    找到 发起 Fal 绘图请求 节点,双击打开设置点击 Select CredentialCreate new credential

    image-20250526105458717

    Name 填写 AuthorizationValue 填写 Key $FAL_KEY 后点击 Save 并关闭窗口

    image-20250525200914689

    根据需要修改或下拉到底点击 Add Parameter 添加,修改后点击 Back to Canvas

    • prompt
      • 描述:提示词
      • 值:,style:
    • seed
      • 描述:原点值
      • 值:1189
    • aspect_ratio
      • 描述:图片比例
      • 值:21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21
    • raw
      • 描述:原生质感
      • 值:false
    • sync_mode
      • 描述:返回base64,本文工作流暂不支持,不要打开
      • 值:true
    • num_images
      • 描述:输出数目
      • 值:1
    • output_format
      • 描述:输出格式,支持 jpeg、png
      • 值:jpeg
    • enable_safety_checker
      • 描述:是否开启安全审查,实测关闭后还是有审查的
      • 值:false
    • safety_tolerance
      • 描述:安全系数
      • 值:1, 2, 3, 4, 5, 6
    1. 修改 R2 节点

      找到 将图片上传到R2 双击后点击 Select CredentialCreate new credential

      image-20250526112716914

      S3 填写 https://CloudflareID.r2.cloudflarestorage.comRegion 留空,填写 Access Key IDSecret Access Key 后点击 Save并关闭窗口 image-20250526113630305

      修改 Bucket Name 后点击 Back to Canvas

    2. 测试执行

      点击 Execute workflow ,在弹出的表单中填写提示词选择图片大小和风格后执行,注意不要关闭表单保持表单置顶

    3. 图片渲染

      稍等片刻后,图片生成后会刷新渲染,并可展示最近生成的10张图片,也可点击 更多提示词 获取或贡献你的提示词

RSS 新闻

原作 Bubble7766

点击这里 打开复制工作流,密码 ff2a.com

打开 n8n 并登录后,点击左上角 +Workflow,将复制内容粘贴到页面中央稍待

  1. 修改定时

    找到始节点 🕒双击打开修改触发时间

image-20250525185430501

  1. 修改邮箱

    找到末节点 ✉ 双击打开修改邮箱设置,下面以QQ邮箱为例

    image-20250525183636937

    From Email 填写QQ邮箱地址,To Email 也填写QQ邮箱或其他收件箱地址然后点击 Select CredentialCreate new credential

    image-20250525183143803

    User 填写QQ邮箱地址,Password 填写授权码,Host 填写 smtp.qq.com Port 填写 465,勾选 SSL/TLS 后点击 Save,验证通过后关闭窗口 → Back to Canvas

    授权码获取方式: 登录QQ邮箱,旧版邮箱需要先点击右上角 新版邮箱 切换,点击右上角 ⚙️ ,接着点击左侧边栏 账号与安全,跳转的页面点击 安全设置生成授权码,使用微信扫码二维码发送短信,注意选择正确的手机号,发送短信后点击 我已发送

    image-20250525181749696

  2. 修改 API 节点

    找到所有如图所示的 new-api ai-work 节点双击打开修改设置,下面以 xai 为例

    image-20250525184427076

    Model 填写 grok-3Base URL 填写 https://api.x.ai/v1 后点击 Select CredentialCreate new credential

    image-20250525185103598

    填写 xai 的 API KeyBase URL 填写 https://api.x.ai/v1 后点击 Save,验证通过后关闭窗口 → Back to Canvas

    image-20250525184906982

  3. 测试执行

    点击 Execute workflow 执行

  4. 激活流

    导航栏打开 Inactive 旁边的开关使其 Active 激活工作流

番外一:HuggingFace 部署汉化版

FROM n8nio/n8n:latest

USER root

COPY editor-ui.tar.gz /tmp/

RUN mkdir -p /tmp/check && \
    tar -xzf /tmp/editor-ui.tar.gz -C /tmp/check && \
    rm -rf /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/* && \
    cp -r /tmp/check/dist/* /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/ && \
    rm -rf /tmp/check /tmp/editor-ui.tar.gz && \
    chown -R node:node /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist/

USER node

EXPOSE 7860

参考链接