n8n+postgres+redis docker-compose 예제

안녕하세요. 달소입니다.

앞서 n8n 의 간단한 도커 설치방법을 공유해드렸는데요.

해당 설치방법의 경우 sqlite의 db를 파일로 저장하기때문에 조금 더 성능적인 이점을 원하신다면 이 버전으로 설치하시면 되겠습니다.

설치환경

Ubuntu 22.04

docker / docker-compose

mkdir -p /data/n8n

cd /data/n8n

볼륨은 도커볼륨을 사용합니다.

.env 설정하기

env파일에는 DB정보를 적어주시면됩니다.

vi .env

POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n

POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword

그리고 postgres 최초 생성시 참조할 쉘스크립트 파일도 만듭니다.

vi init-data.sh

#!/bin/bash
set -e;

if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
EOSQL
else
echo "SETUP INFO: No Environment variables given!"
fi

이제 docker-compose.yml 입니다.

version: '3.8'

volumes:
 db_storage:
 n8n_storage:
 redis_storage:

x-shared: &shared
 restart: always
 image: docker.n8n.io/n8nio/n8n
 environment:
   - DB_TYPE=postgresdb
   - DB_POSTGRESDB_HOST=postgres
   - DB_POSTGRESDB_PORT=5432
   - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
   - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
   - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
   - EXECUTIONS_MODE=queue
   - QUEUE_BULL_REDIS_HOST=redis
   - QUEUE_HEALTH_CHECK_ACTIVE=true
 links:
   - postgres
   - redis
 volumes:
   - n8n_storage:/home/node/.n8n
 depends_on:
   redis:
     condition: service_healthy
   postgres:
     condition: service_healthy

services:
 postgres:
   image: postgres:15
   restart: always
   environment:
     - POSTGRES_USER
     - POSTGRES_PASSWORD
     - POSTGRES_DB
     - POSTGRES_NON_ROOT_USER
     - POSTGRES_NON_ROOT_PASSWORD
     - N8N_HOST=192.168.1.18
     - NODE_FUNCTION_ALLOW_BUILTIN=*
     - NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash
     - GENERIC_TIMEZONE=Asia/Seoul
   volumes:
     - db_storage:/var/lib/postgresql/data
     - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
   healthcheck:
     test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
     interval: 5s
     timeout: 5s
     retries: 10

 redis:
   image: redis:7-alpine
   restart: always
   volumes:
     - redis_storage:/data
   healthcheck:
     test: ['CMD', 'redis-cli', 'ping']
     interval: 5s
     timeout: 5s
     retries: 10

 n8n:
   <<: *shared
   ports:
     - 5678:5678

 n8n-worker:
   <<: *shared
   command: worker
   depends_on:
     - n8n

최종적으로는 아래와같은 파일들이 위치해있으면 됩니다.

image.png.jpg

그리고 docker-compose up -d

image.png.jpg
image.png.jpg

컨테이너가 모두 올라오면 ip:5678 포트로 접속해주시면됩니다.

image.png.jpg

더 많은 환경변수들은 아래 링크를 참고해주세요.

Environment variables reference | n8n Docs docs.n8n.ioConfiguration variables for self-hosted n8n.