您是否正在寻找一种免费、可自托管且功能强大的工作流自动化工具?n8n 是一个绝佳的选择,它允许您连接各种应用程序和服务,创建复杂的自动化流程。而现在,借助 Hugging Face 和 Supabase 的免费资源,您可以轻松拥有一个能够自动更新的 n8n 实例,无需花费一分钱。

本文将详细介绍如何使用一个 GitHub 模板项目,在 Hugging Face Spaces 上免费部署一个 n8n 实例,并使用 Supabase 作为其 PostgreSQL 数据库。更棒的是,该方案通过 GitHub Actions 实现了完全自动化,包括:

  • 保持服务活跃:自动化的脚本会定期访问您的 Hugging Face Space 和 Supabase 项目,防止它们因为长期不活跃而被暂停。
  • 每日自动更新:脚本每天会自动检查 n8n 是否有新版本发布,一旦发现新版本,便会自动更新您的部署,确保您始终使用最新、最安全的功能。

让我们开始吧!

部署指南

请完全按照以下步骤操作,以确保部署过程顺利无误。

1. Fork GitHub 仓库

首先,您需要将 tenfyzhong/n8n-free 这个 GitHub 仓库 fork 到您自己的账户下。这是整个自动化流程的基础。

2. 创建 Supabase 项目

n8n 需要一个数据库来存储工作流、凭证等数据。我们将使用 Supabase 提供的免费 PostgreSQL 数据库。

  1. 访问 Supabase 官网 并创建一个新项目。

  2. 项目创建成功后,在左侧导航栏中找到 SQL Editor

  3. 在 SQL 编辑器中,运行以下 SQL 命令来创建一个名为 keep-alive 的表。这个表的作用是配合保活工作流,确保您的 Supabase 实例不会因为不活跃而被系统暂停。

    CREATE TABLE "keep-alive" (
        id BIGINT generated BY DEFAULT AS IDENTITY,
        name text NULL,
        created_at timestamptz DEFAULT now(),
        CONSTRAINT "keep-alive_pkey" PRIMARY KEY (id)
    );
    INSERT INTO "keep-alive"(name) VALUES ('ping');
    
  4. 接下来,进入 Project Settings > API,在这里找到并复制您的 Project URLannon public API 密钥。请妥善保管,我们在后续步骤中会用到它们。

  5. 为了数据库连接的安全性,您需要启用 SSL。在 Project Settings > Database 页面下,找到 SSL Configuration 部分并启用它。

3. 创建 Hugging Face Space

Hugging Face Spaces 是我们用来托管 n8n 应用的地方。

  1. 访问 Hugging Face Spaces 并创建一个新的 Space。

  2. 在创建页面,选择 Docker 作为 Space SDK,并选择一个免费的硬件配置。

  3. Repository from GitHub 选项中,选择您刚刚 fork 的 n8n-free 仓库。

  4. Space 创建完成后,进入 Settings 页面,在这里我们需要添加一些 Secrets 和 Variables,它们是 n8n 运行所必需的配置。

    Secrets (机密信息)

    Secret描述
    DB_POSTGRESDB_PASSWORD您在 Supabase 项目中设置的数据库密码。
    DB_POSTGRESDB_USERSupabase 数据库用户名 (通常是 postgres)。
    N8N_ENCRYPTION_KEY用于加密 n8n 敏感数据的密钥,请设置一个复杂的随机字符串。
    DB_POSTGRESDB_SSL_CASupabase 数据库的 SSL 证书内容。
    DB_POSTGRESDB_HOSTSupabase 数据库的主机地址。
    DB_POSTGRESDB_PORTSupabase 数据库的端口。
    DB_POSTGRESDB_DATABASE数据库名称,设置为 postgres

    Variables (公开变量)

    Variable描述
    GENERIC_TIMEZONEn8n 的通用时区,例如 Asia/Shanghai
    TZ系统的时区,例如 Asia/Shanghai
    DB_TYPE设置为 postgres
    DB_POSTGRESDB_SCHEMA设置为 public
    N8N_PORT设置为 7860
    N8N_PROTOCOL设置为 https
    N8N_EDITOR_BASE_URL设置为 https://<your-space-name>.hf.space
    WEBHOOK_URL设置为 https://<your-space-name>.hf.space
    N8N_HOST设置为 <your-space-name>.hf.space
    N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS设置为 true
    N8N_PUSH_BACKEND设置为 websocket
    EXECUTIONS_DATA_SAVE_ON_PROGRESS设置为 false
    N8N_DATABASE_SSL_REJECT_UNAUTHORIZED设置为 true
    N8N_PROXY_HOPS设置为 1
    EXECUTIONS_DATA_SAVE_ON_ERROR设置为 all
    EXECUTIONS_DATA_SAVE_ON_SUCCESS设置为 none
    EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS设置为 false
    EXECUTIONS_DATA_PRUNE设置为 true
    EXECUTIONS_DATA_MAX_AGE设置为 168 (单位:小时)。

4. 配置 GitHub 仓库 Secrets

最后一步是配置 GitHub Actions,让它有权限去更新您的 Hugging Face Space 并保持服务活跃。

  1. 首先,在 huggingface.co/settings/tokens 页面创建一个新的 API 令牌,并赋予其 write 权限。
  2. 回到您 fork 的 GitHub 仓库,进入 Settings > Secrets and variables > Actions
  3. 创建一个名为 HF_TOKEN 的新 secret,并将您刚刚创建的 Hugging Face 令牌粘贴进去。
  4. 创建一个名为 HF_SPACE_URL 的新 variable,值为您的 Hugging Face Space 的 URL (例如 https://your-space-name.hf.space)。
  5. 创建名为 SUPABASE_URL 的新 secret,值为您之前复制的 Supabase 项目 URL。
  6. 创建名为 SUPABASE_KEY 的新 secret,值为您之前复制的 Supabase annon public API 密钥。

工作原理揭秘

这个项目的美妙之处在于其自动化脚本,它们在后台默默工作,为您节省了大量手动维护的时间。

自动更新 n8n

.github/workflows/update-n8n.yml 文件定义了一个 GitHub Action 工作流,在n8n部署完成之后,可以在n8n上创建一个workflow定期触发github workflow。其工作流程如下:

  1. 检查新版本: 脚本会访问 n8n 的官方 GitHub 仓库,获取最新的版本号。
  2. 比较版本: 将获取到的最新版本号与您当前 Dockerfile 中记录的版本号进行比较。
  3. 更新并推送: 如果发现新版本,工作流会自动:
    • 更新 Dockerfile 中的 n8n 版本。
    • 将此更改提交到您的 GitHub 仓库。
    • 将更新后的代码推送到 Hugging Face,这将触发 Space 的重新构建,从而将您的 n8n 实例更新到最新版本。

您也可以随时在 GitHub 仓库的 Actions 标签页中手动触发此工作流。

自动化保活服务

为了防止 Hugging Face 和 Supabase 的免费服务因为不活跃而被暂停,项目内置了两个保活工作流:

  • Hugging Face 保活 (huggingface-keep-alive.yml): 这个脚本会向您的 Hugging Face Space URL 发送一个简单的 curl 请求,模拟用户访问,以保持其活跃状态。
  • Supabase 保活 (supabase-keep-alive.yml): 同样地,这个脚本会向您 Supabase 数据库中的 keep-alive 表发送一个请求,确保数据库实例不会被暂停。

完成以上所有步骤后,您就拥有了一个完全免费、功能齐全且能自动更新的 n8n 自动化平台。现在,您可以尽情地在上面构建您的自动化工作流了!