使用免费云容器部署n8n工作流

在当今信息爆炸与多平台协作的时代,重复性的操作和数据搬运往往消耗了大量时间与精力。如何高效地打通不同系统之间的壁垒,构建属于自己的自动化流程,成为许多个人与团队的共同诉求。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


# Set user to root for installation
USER root
ARG N8N_PATH=/usr/local/lib/node_modules/n8n

# Arguments (保持你的原样)
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

# Install system dependencies
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

# Set environment variables
ENV PUPPETEER_SKIP_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Install n8n globally (升级到最新 1.109.2)
RUN npm install -g n8n@1.109.2

# 下载并覆盖中文语言包(和 n8n 版本匹配的 tag)
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

# Create necessary directories
RUN mkdir -p $DATABASE_PATH $CONFIG_PATH $WORKFLOWS_PATH $LOGS_PATH \
&& chmod -R 777 $BASE_PATH

# ---------------- 新增部分:Python venv 支持 ----------------

# 避免 python 输出被缓存
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

# 把 venv 加入 PATH,确保默认使用虚拟环境里的 python/pip
ENV PATH="/opt/venv/bin:$PATH"

# ------------------------------------------------------------

# Set working directory
WORKDIR /data

# Start n8n
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 # should return a list

每个项目的 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); // 发送请求到 Vercel KeepAlive API
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也可以做到保活的目的。