n8n 重构镜像,开启无限可能

🚀 打造一个功能完备的 n8n 自动化平台,集成 ffmpeg、yt-dlp、Chromium、完整中文字体,支持分布式队列架构


为什么要重构 n8n 镜像?

官方 n8n 镜像虽然开箱即用,但在实际业务场景中往往力不从心:

痛点官方镜像重构镜像
🎬 音视频处理❌ 无 ffmpeg✅ ffmpeg + yt-dlp
🌐 网页自动化❌ 无浏览器✅ Chromium + Puppeteer/Playwright
🔤 中文显示❌ 缺字体,显示方块✅ Noto CJK + Emoji 全覆盖
😀 Emoji 渲染❌ 不支持✅ font-noto-emoji
⚡ 性能架构❌ 单机模式✅ Redis 队列 + 多 Worker
📥 视频下载❌ 不支持✅ yt-dlp 支持 1000+ 平台

本文将带你构建一个全能型 n8n 镜像,并通过 Docker Compose 搭建分布式队列架构,让你的自动化工作流如虎添翼!



关注公众号,回复:n8nd 获取完整配置文件

🏗️ 架构概览


    
    
    
  ┌─────────────────────────────────────────────────────────────┐
│                      Docker Compose 集群                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    │
│   │   n8n-db    │    │  n8n-redis  │    │  n8n-main   │    │
│   │ PostgreSQL  │◄───│    队列     │◄───│  Web UI     │    │
│   │   16.1      │    │   Redis 7   │    │  :5678      │    │
│   └─────────────┘    └──────┬──────┘    └─────────────┘    │
│                             │                               │
│              ┌──────────────┼──────────────┐               │
│              ▼              ▼              ▼               │
│       ┌──────────┐   ┌──────────┐   ┌──────────┐          │
│       │ Worker 1 │   │ Worker 2 │   │ Worker 3 │          │
│       └──────────┘   └──────────┘   └──────────┘          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心组件:


📦 自定义 Dockerfile

基于 Node.js 22 Alpine 镜像构建,关键配置如下:


    
    
    
  FROM node:22-alpine

# 🔧 系统依赖:音视频 + 浏览器 + 字体

RUN
 apk add --no-cache ffmpeg chromium nss font-noto-cjk font-noto-emoji ...

# 📥 视频下载工具

RUN
 pip3 install --break-system-packages yt-dlp

# 🔄 字体缓存

RUN
 fc-cache -f -v

# 📦 安装 n8n

RUN
 npm install -g n8n@2.1.1

# 🌐 复用系统 Chromium(节省 300MB)

ENV
 PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
ENV
 PLAYWRIGHT_EXECUTABLE_PATH=/usr/bin/chromium-browser

🎯 依赖详解

🎬 音视频处理套件

包名功能说明
ffmpeg音视频处理瑞士军刀,支持转码、剪辑、合并、提取音频、添加水印等
yt-dlpYouTube/B站等 1000+ 平台视频下载,支持字幕、封面提取

应用场景:

🌐 无头浏览器套件

包名功能说明
chromium无头浏览器核心,支持 Puppeteer/Playwright
nss网络安全服务库,SSL/TLS 支持
glibGNOME 底层库,Chromium 运行依赖
eudev设备管理器,硬件抽象层支持

应用场景:

🔤 字体渲染套件

包名功能说明
font-noto-cjkGoogle Noto 中日韩字体,覆盖简繁体中文
font-notoNoto 基础字体族
font-noto-emojiEmoji 表情符号字体
ttf-freefontGNU FreeFont 自由字体
ttf-liberationLiberation 字体(兼容 Arial/Times)
fontconfig字体配置和渲染引擎
freetype / freetype-dev字体光栅化库
harfbuzz文本塑形引擎,处理复杂文字排版

应用场景:

🛠️ 基础工具

包名功能说明
curlHTTP 请求工具,调试 API
python3 / py3-pipPython 运行环境,支持 yt-dlp 等工具
ca-certificatesCA 根证书,HTTPS 请求必需

⚙️ 环境变量配置


    
    
    
  # 跳过 Puppeteer/Playwright 自带的 Chromium 下载
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true

# 指向系统安装的 Chromium

PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
PLAYWRIGHT_EXECUTABLE_PATH=/usr/bin/chromium-browser

💡 为什么要这样配置?
Puppeteer/Playwright 默认会下载自己的 Chromium(约 300MB),但 Alpine 系统已安装 Chromium,通过环境变量复用系统浏览器,节省镜像体积和构建时间。


🐳 Docker Compose 配置

采用 YAML 锚点实现配置复用,关键配置如下:


    
    
    
  # 🔗 共享配置(锚点定义)
x-n8n-common-env:
 &n8n-common-env
  N8N_TIMEZONE:
 Asia/Shanghai           # 时区
  EXECUTIONS_MODE:
 queue                 # 队列模式(关键!)
  QUEUE_BULL_REDIS_HOST:
 n8n-redis       # Redis 连接
  DB_TYPE:
 postgresdb                    # PostgreSQL
  EXECUTIONS_DATA_MAX_AGE:
 168           # 数据保留 7 天

services:

  n8n-db:

    image:
 postgres:16.1                 # 数据库

  n8n-redis:

    image:
 redis:7-alpine                # 任务队列

  n8n-main:

    image:
 n8n-allinone:latest           # 主服务
    ports:
 ["5678:5678"]
    environment:
 *n8n-common-env         # 引用共享配置

  n8n-worker:

    image:
 n8n-allinone:latest
    command:
 ["n8n", "worker"]           # 启动为 Worker
    environment:
 *n8n-common-env
    deploy:

      replicas:
 3                        # 🚀 弹性伸缩:按需调整

💡 配置亮点

特性说明
YAML 锚点&n8n-common-env 定义,*n8n-common-env 引用,避免重复
队列模式EXECUTIONS_MODE: queue 启用分布式调度
弹性伸缩replicas: 3 一行配置调整 Worker 数量
数据持久化本地目录挂载,容器重建不丢数据

🚀 快速开始

1️⃣ 构建镜像


    
    
    
  # 进入配置目录
cd
 n8n-重构镜像版

# 构建自定义镜像

docker build -t n8n-allinone:latest .

# 验证构建结果

docker images | grep n8n-allinone

2️⃣ 启动服务


    
    
    
  # 启动所有服务(后台运行)
docker compose -p n8n up -d

# 查看服务状态

docker compose -p n8n ps

正常输出:


    
    
    
  NAME                SERVICE      STATUS
n8n-db-1            n8n-db       running
n8n-redis-1         n8n-redis    running
n8n-main-1          n8n-main     running
n8n-worker-1        n8n-worker   running (3/3)

3️⃣ 访问控制台

打开浏览器访问:http://localhost:5678

首次访问需要创建管理员账号,然后就可以开始构建工作流了!


✅ 功能验证

在 n8n 中创建「Execute Command」节点,测试各项功能:


    
    
    
  # 测试 ffmpeg
ffmpeg -version

# 测试 Chromium

chromium-browser --version

# 测试中文字体

fc-list :lang=zh

# 测试 yt-dlp

yt-dlp --version

🛠️ 运维命令速查

操作命令
查看日志docker compose -p n8n logs -f n8n-main
停止服务docker compose -p n8n down
重启服务docker compose -p n8n restart
扩容 Worker修改 replicas 后执行 docker compose -p n8n up -d

⚠️ 注意事项

🔐 生产环境安全


    
    
    
  # 生成随机加密密钥
openssl rand -hex 16
# 输出示例:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6


# 替换 docker-compose.yml 中的 N8N_ENCRYPTION_KEY

🌐 Webhook 配置

如需外部访问 Webhook,修改环境变量:


    
    
    
  WEBHOOK_URL: http://your-server-ip:5678/

📁 权限问题

遇到 Permission denied 错误时:


    
    
    
  sudo chmod -R 777 postgres-data redis-data app-data data

🎉 总结

通过本文的配置,你将获得: