GHOSTVPS / 自动化
使用 Docker 与 SSH 隧道私有运行 n8n
无需将 5678 端口暴露到互联网,即可运行私有 n8n 编辑器。
更新日期 · GhostVPS

开始之前
需要新的 Linux VPS、sudo、Docker Engine 28 以上、Compose v2 和可用 SSH。先按 Docker 官方文档安装。本例使用 SQLite 和单容器,用于体验与手动工作流,不是生产集群或公开 webhook 部署。不要覆盖已有 n8n 安装。
检查前提条件
在 VPS 运行两条检查,均需成功。缺少组件时使用 Docker 官方安装文档,不要将未知安装脚本直接传给 root shell。资源应按工作流规划,不要把示例内存当作容量保证。
您的 VPS · Linux 终端
sudo docker version
sudo docker compose version

创建项目并选择版本
创建新目录和 .env。先查看 n8n 官方发布列表,将 REPLACE_WITH_REVIEWED_STABLE_VERSION 替换为明确受支持的稳定版本,并阅读安全及升级说明。不要保留占位符或使用未经审查的浮动标签。
您的 VPS · Linux 终端
mkdir -m 700 ~/n8n-private
cd ~/n8n-private
nano .env
文件内容
N8N_VERSION=REPLACE_WITH_REVIEWED_STABLE_VERSION

保存仅监听本地的 Compose 配置
在项目目录保存为 compose.yaml。只发布到 127.0.0.1。命名卷保留数据库与自动生成的加密密钥,使容器重建后数据仍在。不要改为 0.0.0.0,也不要挂载 Docker socket。
文件内容
services:
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION:?Set N8N_VERSION in .env}
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
TZ: Etc/UTC
GENERIC_TIMEZONE: Etc/UTC
N8N_HOST: localhost
N8N_PORT: "5678"
N8N_PROTOCOL: http
N8N_EDITOR_BASE_URL: http://localhost:5678
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:

验证后启动
先单独执行权限和 config 检查。有错误就修复,再执行 pull 和 up。启动后 compose ps 应显示 n8n 运行。失败时查看日志,不要为了绕过隧道问题而公开编辑器。
您的 VPS · Linux 终端
chmod 600 .env &&
grep -Eq '^N8N_VERSION=[0-9]+[.][0-9]+[.][0-9]+$' .env &&
sudo docker compose config --quiet &&
sudo docker compose pull &&
sudo docker compose up -d &&
sudo docker compose ps

使用 SSH 隧道访问
在本地电脑替换账户与示例地址并运行 SSH 命令,通过可信渠道核对指纹。保持终端打开,在同一电脑浏览器访问 http://localhost:5678 并创建所有者账户。本地端口被占用时,将左侧端口改为 15678,并访问 localhost:15678。
您的电脑 · 终端
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:5678:127.0.0.1:5678 deploy@203.0.113.10
以下为隔离环境中 n8n 2.45.5 的真实截图。界面细节可能随版本变化,点击图片可查看原始尺寸。

测试、备份并单独规划公开访问
创建手动触发、使用非敏感测试值的工作流并确认成功。分享日志前请脱敏。升级前一致性备份命名卷、加密密钥与配置,不要使用 down -v。公开 webhook 须另行按当前文档配置域名、TLS 和反向代理。不要通过关闭 secure cookies 绕过错误。
您的 VPS · Linux 终端
sudo docker compose logs --tail=50 n8n
本次验证将 Manual Trigger 连接到 Edit Fields (Set)。添加 message(String)= GhostVPS tutorial check,以及 verified(Boolean)= true。保存后点击 Execute,打开 Edit Fields 的输出并核对两个值。





