核心部署策略:使用 Docker Compose

遵循 Docker Compose 的使用方法,以下是 MySQL 的典型配置。

docker-compose.yml 示例

services:
  n8n:
    image: n8nio/n8n
    deploy:
      restart_policy:
        condition: always
        delay: 5s
        window: 60s
    container_name: n8n
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro # 保持容器时间与宿主机一致
      - /etc/timezone:/etc/timezone:ro # 保持容器时间与宿主机一致
      - /fs/1000/ftp/docker/n8n/data:/home/node/.n8n
    ports:
      - 5678:5678/tcp
    environment:
      - N8N_SECURE_COOKIE=false
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=postgres
      - DB_POSTGRESDB_PASSWORD=Postgres12#$
    networks:
      - postgres_default

networks:
  postgres_default:
    external: true # 表示这个网络是在外部创建的

配置解析与说明

n8n 服务

  • 镜像 (image): 使用 n8n.io/n8n 官方镜像。
  • 端口映射 (ports): 将容器的 5678 端口映射到宿主机的 5678 端口,以便通过浏览器访问。这也是 Docker 端口映射 的一个典型应用。
  • 环境变量 (environment): 配置 N8N_HOSTN8N_PORT 等 n8n 特有环境变量。你也可以在这里配置 数据库连接字符串
  • 数据持久化 (volumes): n8n_data:/home/node/.n8n 确保 n8n 的配置和工作流数据不会丢失,这是 Docker 卷数据库容器数据持久化 的一个具体实践。
  • 网络 (networks): 使用自定义 n8n_network,保障 Docker 网络 中服务的隔离和通信。

数据库服务 (PostgreSQL)

  • 镜像 (image): 采用 postgres:16-alpine,这是一个轻量级的 PostgreSQL Docker 镜像
  • 环境变量 (environment): 使用 POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD 进行数据库初始化,参考 PostgreSQL 环境变量配置
  • 数据持久化 (volumes): postgres_n8n_data:/var/lib/postgresql/data 同样需要 Docker 卷 进行数据持久化。

相关概念