在当今信息爆炸与多平台协作的时代,重复性的操作和数据搬运往往消耗了大量时间与精力。如何高效地打通不同系统之间的壁垒,构建属于自己的自动化流程,成为许多个人与团队的共同诉求。n8n 作为一款开源、可自托管的自动化工作流工具,不仅能够通过可视化界面轻松连接数百种应用与服务,还允许在需要时灵活编写逻辑,从而让复杂的任务变得高效、可控并完全掌握在自己手中。
n8n Cloud
官方的n8n云端部署,每个用户都可以使用,一个邮箱提供免费14天的试用(无需绑定信用卡)。配合上临时邮箱就可以达到永久免费使用的目的,作为学习用途非常不错,不建议用作生产用途,因为数据只能存在14天。
填写相关信息即可,邮箱可以点这里获取。

n8n Cloud 和自部署的一模一样。

CrawCloud部署
CrawCloud对Github注册超过180天的用户提供了每月$5的免费额度,只需要用Github登陆即可领取。
登陆后点击AppStore搜索n8n安装,免费版最高开到4H8G。如果想跑满一个月则只能开0.5H512M配置的服务器。用来跑轻量的工作流还可以。

同时,CrawCloud的IP在中国大陆有可能出现无法访问的情况。
Huggingface部署
Huggingface提供2H16G超高配置服务器,但缺点是没有持久化存储,并且48小时不活动会自动休眠,但是本教程提供保活方法。
创建Supabase数据库
由于Huggingface没有数据持久化,所以我们需要把数据保存到数据库中,以便预防服务器休眠导致的数据丢失。
需要注册一个Supabase账户,点击进入注册链接,直接用Github登陆就可以。免费版有1GB空间。
创建数据库,请记住密码后续有用。然后点击数据库顶部Connect,我们只需要Transaction pooler这些数据。

复制Huggingface Space
注册后进入Huggingface Spaces搜索n8n随便点进去一个复制到自己的账户下。

填写以下字段,根据数据库提示填写。

汉化+Python

Files→Dockerfile,将文件修改成以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| FROM node:24-alpine
USER root ARG N8N_PATH=/usr/local/lib/node_modules/n8n
ARG BASE_PATH=/root/.n8n ARG DATABASE_PATH=$BASE_PATH/database ARG CONFIG_PATH=$BASE_PATH/config ARG WORKFLOWS_PATH=$BASE_PATH/workflows ARG LOGS_PATH=$BASE_PATH/logs ARG N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=$N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS ARG N8N_RUNNERS_ENABLED=true ARG allowVulnerableTags=true ARG N8N_HOST=$N8N_HOST ARG N8N_PORT=$N8N_PORT ARG N8N_PROTOCOL=https ARG N8N_EDITOR_BASE_URL=$N8N_EDITOR_BASE_URL ARG WEBHOOK_URL=$WEBHOOK_URL ARG GENERIC_TIMEZONE=$GENERIC_TIMEZONE ARG TZ=$TZ ARG N8N_ENCRYPTION_KEY=$N8N_ENCRYPTION_KEY ARG DB_TYPE=$DB_TYPE ARG DB_POSTGRESDB_SCHEMA=$DB_POSTGRESDB_SCHEMA ARG DB_POSTGRESDB_HOST=$DB_POSTGRESDB_HOST ARG DB_POSTGRESDB_DATABASE=$DB_POSTGRESDB_DATABASE ARG DB_POSTGRESDB_PORT=$DB_POSTGRESDB_PORT ARG DB_POSTGRESDB_USER=$DB_POSTGRESDB_USER ARG DB_POSTGRESDB_PASSWORD=$DB_POSTGRESDB_PASSWORD
RUN apk add --no-cache \ git \ python3 \ py3-pip \ make \ g++ \ build-base \ cairo-dev \ pango-dev \ chromium \ postgresql-client \ ffmpeg \ yt-dlp \ tar \ curl
ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
RUN npm install -g n8n@1.109.2
RUN curl -L https://github.com/other-blowsnow/n8n-i18n-chinese/releases/download/n8n%401.109.2/editor-ui.tar.gz \ -o /tmp/editor-ui.tar.gz \ && tar -zxvf /tmp/editor-ui.tar.gz -C $N8N_PATH/node_modules/n8n-editor-ui/ \ && rm -f /tmp/editor-ui.tar.gz
ENV N8N_DEFAULT_LOCALE=zh-CN
RUN mkdir -p $DATABASE_PATH $CONFIG_PATH $WORKFLOWS_PATH $LOGS_PATH \ && chmod -R 777 $BASE_PATH
ENV PYTHONUNBUFFERED=1
RUN python3 -m venv /opt/venv \ && . /opt/venv/bin/activate \ && pip install --no-cache --upgrade pip setuptools wheel \ && pip install --no-cache \ fire\ requests \ pandas \ numpy \ speedtest-cli
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /data
CMD ["n8n", "start"]
|
如果连接不上数据库就在环境变量中添加 DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false
。
等待自动部署完成就发现界面变成了中文,在域名后面添加 /settings/community-nodes
进入社区节点添加 n8n-nodes-python
即可运行完整的Python环境。
注意:此节点接收并应返回 的列表。例:
1 2 3 4 5
| new_items = [] for item in items: item['newField'] = 'newValue' new_items.append(item) return new_items
|
每个项目的 JSON 属性会自动添加和删除。 您可以在没有属性的情况下直接访问值。 无需将项放入属性中。它将自动完成。
保活
Huggingface的保活很简单,只需要每天运行一个定时任务就可以了。
Supabase的保活需要一个运行于Vercel的脚本。脚本地址:bebestmaple/supabase-keep-alive。然后fork一份,打开Vercel进行部署,部署时需要配置环境变量。
变量名:SUPABASE_CONFIG
值:
1 2 3 4 5 6 7 8
| [ { "name": "Supabase1", "supabase_url": "https://your-project.supabase.co", "supabase_key": "your-api-key", "table_name": "your_table" } ]
|
先复制到技术笨重,将以上内容替换成真实内容后粘贴到Vercel环境变量中。这样每访问一次链接就进行了一次简单查询。
然后登陆Cloudflare创建一个Cron任务,设置每天运行一次。
创建一个Workers并粘贴以下代码(需要更换链接):
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| addEventListener("fetch", event => { event.respondWith(handleRequest(event.request)); });
async function handleRequest(request) { const url = "https://your-supabase-keep-alive.vercel.app/api/keepalive"; try { const res = await fetch(url); return new Response("✅ Ping success", { status: 200 }); } catch (err) { console.error("❌ Ping failed:", err); return new Response("❌ Ping failed", { status: 500 }); } }
|
然后返回点击设置→触发器→输入 0 0 * * *
即每天0点执行一次。
除此之外使用UptimeRobot也可以做到保活的目的。