一、功能介绍
N8N(全称:"Node-RED like workflow automation tool")是一个基于 Node.js 开发的开源工作流自动化工具,类似于 Zapier、Integromat,但具备以下特点:
1、N8N 的核心特点
特性 | 描述 |
---|---|
开源 | 完全开源,可在 GitHub 获取源码,自由部署、二次开发 |
工作流自动化 | 支持构建“节点式”的工作流流程,例如:当邮件收到时 → 解析邮件 → 存入数据库 |
支持众多服务 | 超过 300+ 内置集成(如 Gmail、Slack、Trello、MySQL、Webhook、Telegram、OpenAI 等) |
可视化界面 | 拖拽式图形界面,零代码或低代码方式构建自动化流程 |
可运行自定义代码 | 可以在节点中编写 JavaScript 脚本处理数据 |
可持续执行 | 支持 Cron、Webhook、触发器等方式激活任务 |
本地数据控制 | 本地部署意味着你对数据的访问、处理完全自主可控 |
高扩展性 | 支持插件开发、API 调用、自定义节点 |
2、本地部署 N8N 的方式
N8N 可以在以下环境中部署:
-
Docker 容器部署(推荐)
-
Node.js 本地直接运行
-
云服务器(如 VPS、云主机)
-
Kubernetes(可选高级部署)
3、开源版 vs 云托管版(n8n.cloud)功能对比
功能 | 本地部署(开源) | 云托管(n8n.cloud) |
---|---|---|
基本节点支持 | ✅ 全部支持 | ✅ 全部支持 |
多用户 | ❌ 不支持(除非付费) | ✅ 支持 |
身份认证(多用户登录) | ❌(仅 Enterprise) | ✅(Pro/Enterprise) |
版本控制 | ❌ 不支持 | ✅ 部分支持 |
数据加密 | ✅ 本地控制 | ✅ 由平台维护 |
操作审计日志 | ❌ 仅 Enterprise 版支持 | ✅(Pro/Enterprise) |
高可用部署 | ✅ 可自建(需自己配置) | ✅ 云原生高可用 |
支持扩展 | ✅ 自定义节点/模块 | ❌ 不可扩展云端 |
社区支持 | ✅ 活跃社区 | ✅ 官方支持(仅限付费) |
4、本地开源部署的功能限制主要包括:
-
不支持多用户协作(需要 Enterprise 许可证)
-
不提供团队权限管理、审计日志、LDAP、SSO 等高级特性
-
不提供 GUI 方式的用户权限控制
-
不支持版本快照与还原功能
-
不提供 GUI 异常告警与任务监控(需借助第三方工具)
-
企业支持服务需另购
5、适合本地部署的典型场景
-
内网自动化(无需连接公网)
-
企业数据不出本地(如连接 ERP、数据库、文件系统等)
-
二次开发定制工作流平台
-
与私有 AI 接口集成(如本地部署的 LLM 服务)
-
安全审计需求较高的环境(如金融、医疗、政企)
二、Docker Compose 快速部署示例 + 自定义节点教程
n8n 本地部署方案,包括:
-
🚀 Docker Compose 快速部署脚本
-
🔐 可选的 Basic Auth 认证设置
-
🔧 自定义节点开发路径指引
-
📂 数据挂载说明(便于持久化)
1、Docker Compose 快速部署脚本
创建一个名为 docker-compose.yml
的文件,内容如下:
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=admin123
- N8N_HOST=localhost
- N8N_PORT=5678
- NODE_ENV=production
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- ./n8n_data:/home/node/.n8n
✅ 默认启用了 basic auth 登录认证,用户名密码分别为
admin/admin123
,请按需更改。
启动命令:
docker-compose up -d
访问地址:
http://localhost:5678
2、数据持久化与备份
所有的配置和流程会保存在 ./n8n_data
目录下,可定期备份该目录实现全量恢复。
# 备份方式示例
tar czf backup_n8n_$(date +%F).tar.gz ./n8n_data
3、自定义节点开发(Advanced,可选)
如果你希望扩展 N8N 支持私有 API、自定义逻辑,可以开发自定义节点:
开发步骤概览:
-
在宿主机创建
n8n_custom
文件夹 -
新建
nodes
目录,编写自定义节点 TS 文件 -
修改
docker-compose.yml
增加映射挂载:
volumes:
- ./n8n_data:/home/node/.n8n
- ./n8n_custom:/data/custom
environment:
- N8N_CUSTOM_EXTENSIONS=/data/custom
- 示例目录结构如下:
n8n_custom/
└── nodes/
└── MyCustomNode/
├── MyCustomNode.node.ts
└── MyCustomNode.credentials.ts
N8N 官方文档:
https://docs.n8n.io/integrations/creating-nodes/
三、生产级别的 N8N + PostgreSQL + Redis 多实例部署脚本(Docker Compose)
生产级别的 N8N + PostgreSQL + Redis 多实例部署脚本(Docker Compose)支持:
-
使用 PostgreSQL 持久化数据(替代 SQLite)
-
使用 Redis 作为队列后端(支持多 Worker)
-
支持主 Web UI + 多 Worker 架构(适合任务量大时横向扩展)
-
使用
n8nio/n8n
官方镜像,确保稳定可靠
1、目录结构建议
n8n-deployment/
├── docker-compose.yml
├── .env
└── n8n_data/
2、.env
文件内容(环境变量统一配置)
# .env
POSTGRES_USER=n8n
POSTGRES_PASSWORD=n8npass
POSTGRES_DB=n8n
POSTGRES_HOST=postgres
REDIS_HOST=redis
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123
N8N_HOST=localhost
N8N_PORT=5678
WEBHOOK_TUNNEL_URL=http://localhost:5678
3、docker-compose.yml
多实例部署脚本
version: "3.8"
services:
postgres:
image: postgres:15
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7
restart: always
volumes:
- redis_data:/data
n8n-main:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=${POSTGRES_HOST}
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- QUEUE_MODE=redis
- QUEUE_REDIS_HOST=${REDIS_HOST}
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=${N8N_PORT}
- WEBHOOK_TUNNEL_URL=${WEBHOOK_TUNNEL_URL}
- EXECUTIONS_MODE=queue
volumes:
- ./n8n_data:/home/node/.n8n
depends_on:
- postgres
- redis
n8n-worker-1:
image: n8nio/n8n:latest
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=${POSTGRES_HOST}
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- QUEUE_MODE=redis
- QUEUE_REDIS_HOST=${REDIS_HOST}
- EXECUTIONS_MODE=queue
- N8N_LOG_LEVEL=info
volumes:
- ./n8n_data:/home/node/.n8n
depends_on:
- n8n-main
- redis
- postgres
# 如需更多 worker,可复制并改名 n8n-worker-2,n8n-worker-3 等
volumes:
postgres_data:
redis_data:
4、启动方法
docker-compose --env-file .env up -d
初次启动建议查看日志是否正常启动:
docker-compose logs -f n8n-main
5、访问方式
-
管理界面:http://localhost:5678
-
默认账号密码:
admin / admin123
(建议首登后修改)
6、注意事项
-
Worker 模式适合执行大量工作流任务,但 UI 操作仍在
n8n-main
服务中进行; -
如需对外公开访问,建议使用 Nginx + Let's Encrypt 实现 HTTPS 和域名解析;
-
数据持久化通过
volumes
保存在本地; -
默认使用
Asia/Shanghai
时区,如有需要可添加:
environment:
- TZ=Asia/Shanghai
四、支持 OIDC 登录
支持 OIDC(OpenID Connect)登录,意味着你可以让 N8N 接入统一身份认证系统(如 Auth0、Keycloak、Azure AD、阿里云 RAM 身份服务等),以替代默认的 Basic Auth 登录方式。
1、N8N OIDC 登录支持概览
从 N8N v1.36.0 起,N8N 已正式支持 OIDC 登录认证(实验功能),支持:
-
单点登录(SSO)
-
登录后自动创建账户
-
自动同步用户信息(email、name 等)
2、OIDC 环境变量配置(以 Keycloak 为例)
你需要在 .env
文件中添加如下配置:
# 启用 OIDC
N8N_USER_MANAGEMENT_DISABLED=false
N8N_AUTHENTICATION_METHOD=openid
# OIDC 配置(以 Keycloak 为例)
N8N_OIDC_ISSUER_URL=https://auth.example.com/realms/n8n
N8N_OIDC_CLIENT_ID=n8n
N8N_OIDC_CLIENT_SECRET=xxxx-xxxx-xxxx
N8N_OIDC_BASE_URL=https://n8n.example.com
3、OIDC 提供者(以 Keycloak 为例)
你需要:
-
在 Keycloak 创建一个 Client
-
Client ID:
n8n
-
Client Secret:
xxxx
-
Redirect URI:
https://n8n.example.com/rest/auth/redirect
-
Root URL:
https://n8n.example.com
-
-
启用以下 Client Scopes:
-
profile
-
email
-
openid
-
-
开启
Standard Flow Enabled
,关闭Direct Access Grants
4、在 docker-compose.yml
中添加环境变量
在 n8n-main
服务中添加如下内容:
environment:
- N8N_AUTHENTICATION_METHOD=openid
- N8N_USER_MANAGEMENT_DISABLED=false
- N8N_OIDC_ISSUER_URL=${N8N_OIDC_ISSUER_URL}
- N8N_OIDC_CLIENT_ID=${N8N_OIDC_CLIENT_ID}
- N8N_OIDC_CLIENT_SECRET=${N8N_OIDC_CLIENT_SECRET}
- N8N_OIDC_BASE_URL=${N8N_OIDC_BASE_URL}
.env
文件中要添加:
N8N_OIDC_ISSUER_URL=https://auth.example.com/realms/n8n
N8N_OIDC_CLIENT_ID=n8n
N8N_OIDC_CLIENT_SECRET=xxxxyyyyzzzz
N8N_OIDC_BASE_URL=https://n8n.example.com
5、登录逻辑流程
-
用户访问
https://n8n.example.com
,点击「Sign in with OpenID Connect」 -
被重定向到 Keycloak / Auth0 等登录页
-
成功登录后,返回 n8n 并自动创建用户账号
-
登陆后的用户将出现在 n8n 的用户管理界面中
6、搭配 Nginx 使用 HTTPS
强烈建议搭配 Nginx 或 Caddy 作为反向代理实现 https://n8n.example.com
,否则 OIDC 登录会因回调 URI 不安全而失败。
7、兼容问题提示
OIDC 平台 | 是否兼容 | 说明 |
---|---|---|
Keycloak | ✅ 完全支持 | 建议使用 |
Auth0 | ✅ 支持 | 需要设置回调 URI |
Azure AD | ✅ 支持 | 建议用企业账号登录测试 |
Okta | ✅ 支持 | 需要调整授权流程 |
阿里云 RAM | 🚧 有限制 | 需要配合企业应用网关 |
五、Keycloak 配置
适配 N8N 的完整 Keycloak + OIDC 登录配置教程,适合自建 Keycloak 身份服务,并让 N8N 通过统一认证登录(SSO):
1、环境假设
项目 | 值 |
---|---|
N8N 域名 | https://n8n.example.com |
Keycloak 域名 | https://auth.example.com |
Realm 名称 | n8n |
Client 名称 | n8n |
N8N OIDC 重定向地址 | https://n8n.example.com/rest/auth/redirect |
2、Keycloak 安装(略)
你可以用以下 Docker 命令快速部署 Keycloak:
docker run -d \
--name keycloak \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:24.0.1 \
start-dev
浏览器访问 http://localhost:8080
登录后台管理。
3、在 Keycloak 中配置 N8N Client
✅ 1. 创建 Realm
-
左侧菜单 → “Realm” → “Create Realm”
-
名称:
n8n
✅ 2. 创建用户(可选)
-
“Users” → “Create new user”
-
填写 Email、First Name、Last Name,并设置密码(Credentials)
✅ 3. 创建 OIDC Client
-
左侧菜单 → “Clients” → “Create client”
-
Client ID:
n8n
-
Client Type:OpenID Connect
-
Root URL:
https://n8n.example.com
点击「Next」
✅ 4. 配置 Client 设置
确保以下设置:
参数 | 值 |
---|---|
Standard flow enabled | ✅ 启用 |
Direct access grants enabled | ❌ 禁用 |
Implicit flow enabled | ❌ 禁用 |
Valid redirect URIs | https://n8n.example.com/* |
Web origins | + 自动填充即可 |
点击「Save」
4、获取密钥信息
在 Clients → n8n → Credentials
中,找到:
-
Client ID:
n8n
-
Client Secret:
xxxxxx-xxxxx-xxxxx
5、设置 N8N 的环境变量
在 .env
文件中添加以下内容:
N8N_AUTHENTICATION_METHOD=openid
N8N_USER_MANAGEMENT_DISABLED=false
N8N_OIDC_ISSUER_URL=https://auth.example.com/realms/n8n
N8N_OIDC_CLIENT_ID=n8n
N8N_OIDC_CLIENT_SECRET=你刚才复制的 client secret
N8N_OIDC_BASE_URL=https://n8n.example.com
6、重启服务并测试
docker-compose --env-file .env up -d
浏览器访问 https://n8n.example.com
,将看到一个 “Sign in with OpenID Connect” 的按钮,点击后跳转到 Keycloak 登录。
六、Nginx + HTTPS 自动部署脚本
以下是 N8N + Keycloak 的 Nginx + HTTPS 自动部署脚本,它会:
-
自动安装 Nginx;
-
使用 acme.sh 免费申请 Let's Encrypt 证书;
-
配置 HTTPS + 反代 N8N (
https://n8n.example.com
) 和 Keycloak (https://auth.example.com
); -
设置自动续期。
1、使用前准备
你需要提前准备:
-
✅ 一个公网服务器(如 Ubuntu)
-
✅ 正确解析的域名:
-
n8n.example.com
→ 指向服务器 IP -
auth.example.com
→ 同上
-
2、自动部署脚本(n8n-nginx-https.sh)
将以下脚本保存为 n8n-nginx-https.sh
:
#!/bin/bash
# === 配置参数 ===
N8N_DOMAIN="n8n.example.com"
KEYCLOAK_DOMAIN="auth.example.com"
EMAIL="your@email.com"
# === 安装 Nginx 和 acme.sh ===
sudo apt update && sudo apt install -y nginx socat curl git
# 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
# 设置 CA 为 Let's Encrypt
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
# === 申请证书 ===
~/.acme.sh/acme.sh --issue --standalone -d $N8N_DOMAIN -d $KEYCLOAK_DOMAIN --email $EMAIL --force
# 安装证书到 Nginx 目录
sudo mkdir -p /etc/nginx/ssl/$N8N_DOMAIN
~/.acme.sh/acme.sh --install-cert -d $N8N_DOMAIN \
--key-file /etc/nginx/ssl/$N8N_DOMAIN/key.pem \
--fullchain-file /etc/nginx/ssl/$N8N_DOMAIN/cert.pem \
--reloadcmd "sudo systemctl reload nginx"
# === 配置 Nginx ===
sudo tee /etc/nginx/sites-available/n8n-keycloak <<EOF
server {
listen 80;
server_name $N8N_DOMAIN $KEYCLOAK_DOMAIN;
return 301 https://\$host\$request_uri;
}
server {
listen 443 ssl;
server_name $N8N_DOMAIN;
ssl_certificate /etc/nginx/ssl/$N8N_DOMAIN/cert.pem;
ssl_certificate_key /etc/nginx/ssl/$N8N_DOMAIN/key.pem;
location / {
proxy_pass http://localhost:5678;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
}
server {
listen 443 ssl;
server_name $KEYCLOAK_DOMAIN;
ssl_certificate /etc/nginx/ssl/$N8N_DOMAIN/cert.pem;
ssl_certificate_key /etc/nginx/ssl/$N8N_DOMAIN/key.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/n8n-keycloak /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
echo "✅ Nginx + HTTPS 配置完成!"
echo "🔐 N8N 地址: https://$N8N_DOMAIN"
echo "🔐 Keycloak 地址: https://$KEYCLOAK_DOMAIN"
3 、使用方法
chmod +x n8n-nginx-https.sh
./n8n-nginx-https.sh
⚠️ 确保 80 和 443 端口未被占用,建议先不要启动 N8N 或 Keycloak。
4、自动续期(acme.sh 默认已自动设置)
可用以下命令手动测试续期:
~/.acme.sh/acme.sh --renew -d n8n.example.com --force
5、生产建议
项目 | 建议配置 |
---|---|
防火墙 | 开放 80/443 端口 |
HTTPS 安全等级 | 可升级为 TLS 1.3(修改 Nginx) |
HTTPS 强制跳转 | 已启用 |
nginx reload | 自动在证书续期时执行 |
七、示例脚本
version: '3.8'
services:
postgres:
image: postgres:15
container_name: n8n_postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- ./data/postgres:/var/lib/postgresql/data
redis:
image: redis:7
container_name: n8n_redis
restart: unless-stopped
volumes:
- ./data/redis:/data
keycloak:
image: quay.io/keycloak/keycloak:24.0.2
container_name: n8n_keycloak
command: start-dev
restart: unless-stopped
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/${POSTGRES_DB}
KC_DB_USERNAME: ${POSTGRES_USER}
KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
ports:
- "8080:8080"
depends_on:
- postgres
n8n:
image: n8nio/n8n
container_name: n8n_app
restart: unless-stopped
ports:
- "5678:5678"
environment:
DB_TYPE: postgres
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: ${N8N_DOMAIN}
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://${N8N_DOMAIN}/
GENERIC_TIMEZONE: Asia/Shanghai
N8N_AUTH_EXCLUDE_ENDPOINTS: "healthz"
N8N_AUTH_OIDC_ENABLED: true
N8N_AUTH_OIDC_ISSUER_URL: https://${KEYCLOAK_DOMAIN}/realms/${KEYCLOAK_REALM}
N8N_AUTH_OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
N8N_AUTH_OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
volumes:
- ./data/n8n:/home/node/.n8n
depends_on:
- postgres
- redis
nginx:
image: nginx:alpine
container_name: n8n_nginx
restart: unless-stopped
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- /etc/ssl/n8n:/etc/ssl/n8n:ro
ports:
- "80:80"
- "443:443"
depends_on:
- n8n
- keycloak
volumes:
n8n_data:
redis_data:
pg_data:
# .env 示例:
# POSTGRES_USER=n8n_user
# POSTGRES_PASSWORD=n8n_pass
# POSTGRES_DB=n8n_db
# N8N_DOMAIN=n8n.example.com
# KEYCLOAK_ADMIN=admin
# KEYCLOAK_PASSWORD=adminpass
# KEYCLOAK_DOMAIN=keycloak.example.com
# KEYCLOAK_REALM=n8n
# OIDC_CLIENT_ID=n8n-client
# OIDC_CLIENT_SECRET=client-secret-key
.env
示例(放在项目根目录)
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD=n8n_pass
POSTGRES_DB=n8n_db
N8N_DOMAIN=n8n.example.com
KEYCLOAK_ADMIN=admin
KEYCLOAK_PASSWORD=adminpass
KEYCLOAK_DOMAIN=keycloak.example.com
KEYCLOAK_REALM=n8n
OIDC_CLIENT_ID=n8n-client
OIDC_CLIENT_SECRET=client-secret-key
nginx/ssl-deploy.sh
#!/bin/bash
set -e
DOMAIN_LIST=("n8n.example.com" "keycloak.example.com")
CERT_PATH="/etc/ssl/n8n"
mkdir -p "$CERT_PATH"
# 安装 acme.sh
if ! command -v acme.sh &> /dev/null; then
curl https://get.acme.sh | sh
source ~/.bashrc
fi
for domain in "${DOMAIN_LIST[@]}"; do
~/.acme.sh/acme.sh --issue --standalone -d "$domain" --force
~/.acme.sh/acme.sh --install-cert -d "$domain" \\
--key-file "$CERT_PATH/${domain}.key" \\
--fullchain-file "$CERT_PATH/${domain}.crt" \\
--reloadcmd "docker restart n8n_nginx"
done
记得将域名替换为你的实际域名并提前解析到部署服务器公网 IP!
nginx/nginx.conf
events {}
http {
server {
listen 80;
server_name n8n.example.com keycloak.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name n8n.example.com;
ssl_certificate /etc/ssl/n8n/n8n.example.com.crt;
ssl_certificate_key /etc/ssl/n8n/n8n.example.com.key;
location / {
proxy_pass http://n8n:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 443 ssl;
server_name keycloak.example.com;
ssl_certificate /etc/ssl/n8n/keycloak.example.com.crt;
ssl_certificate_key /etc/ssl/n8n/keycloak.example.com.key;
location / {
proxy_pass http://keycloak:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
README.md
(摘要)
# N8N + Keycloak + PostgreSQL + Redis 一体化系统部署
## 功能特性
- OIDC 登录集成 Keycloak
- 数据持久化
- HTTPS 自动部署
- 容器一键运行
## 快速开始
1. 修改 `.env` 和 `nginx.conf`
2. 运行证书部署脚本:
```bash
chmod +x nginx/ssl-deploy.sh
./nginx/ssl-deploy.sh
#启动服务
docker-compose up -d
#浏览器访问:
#N8N:https://n8n.example.com
#Keycloak:https://keycloak.example.com