在 Hugging Face 上免费部署自更新的 n8n
您是否正在寻找一种免费、可自托管且功能强大的工作流自动化工具?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 数据库。
访问 Supabase 官网 并创建一个新项目。
项目创建成功后,在左侧导航栏中找到 SQL Editor。
在 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');
接下来,进入 Project Settings > API,在这里找到并复制您的 Project URL 和 annon public API 密钥。请妥善保管,我们在后续步骤中会用到它们。
为了数据库连接的安全性,您需要启用 SSL。在 Project Settings > Database 页面下,找到 SSL Configuration 部分并启用它。
3. 创建 Hugging Face Space
Hugging Face Spaces 是我们用来托管 n8n 应用的地方。
访问 Hugging Face Spaces 并创建一个新的 Space。
在创建页面,选择 Docker 作为 Space SDK,并选择一个免费的硬件配置。
在 Repository from GitHub 选项中,选择您刚刚 fork 的
n8n-free
仓库。Space 创建完成后,进入 Settings 页面,在这里我们需要添加一些 Secrets 和 Variables,它们是 n8n 运行所必需的配置。
Secrets (机密信息)
Secret 描述 DB_POSTGRESDB_PASSWORD
您在 Supabase 项目中设置的数据库密码。 DB_POSTGRESDB_USER
Supabase 数据库用户名 (通常是 postgres
)。N8N_ENCRYPTION_KEY
用于加密 n8n 敏感数据的密钥,请设置一个复杂的随机字符串。 DB_POSTGRESDB_SSL_CA
Supabase 数据库的 SSL 证书内容。 DB_POSTGRESDB_HOST
Supabase 数据库的主机地址。 DB_POSTGRESDB_PORT
Supabase 数据库的端口。 DB_POSTGRESDB_DATABASE
数据库名称,设置为 postgres
。Variables (公开变量)
Variable 描述 GENERIC_TIMEZONE
n8n 的通用时区,例如 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 并保持服务活跃。
- 首先,在 huggingface.co/settings/tokens 页面创建一个新的 API 令牌,并赋予其 write 权限。
- 回到您 fork 的 GitHub 仓库,进入 Settings > Secrets and variables > Actions。
- 创建一个名为
HF_TOKEN
的新 secret,并将您刚刚创建的 Hugging Face 令牌粘贴进去。 - 创建一个名为
HF_SPACE_URL
的新 variable,值为您的 Hugging Face Space 的 URL (例如https://your-space-name.hf.space
)。 - 创建名为
SUPABASE_URL
的新 secret,值为您之前复制的 Supabase 项目 URL。 - 创建名为
SUPABASE_KEY
的新 secret,值为您之前复制的 Supabaseannon public
API 密钥。
工作原理揭秘
这个项目的美妙之处在于其自动化脚本,它们在后台默默工作,为您节省了大量手动维护的时间。
自动更新 n8n
.github/workflows/update-n8n.yml
文件定义了一个 GitHub Action 工作流,在n8n部署完成之后,可以在n8n上创建一个workflow定期触发github workflow。其工作流程如下:
- 检查新版本: 脚本会访问 n8n 的官方 GitHub 仓库,获取最新的版本号。
- 比较版本: 将获取到的最新版本号与您当前
Dockerfile
中记录的版本号进行比较。 - 更新并推送: 如果发现新版本,工作流会自动:
- 更新
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 自动化平台。现在,您可以尽情地在上面构建您的自动化工作流了!