n8n 셀프 호스팅 자동화, 처음부터 완벽 설정법

★n8n 셀프 호스팅 자동화 설정 방법을 완전 정리. Docker 설치부터 워크플로우 연결, 보안 설정까지 실전 예제로 빠르게 자동화 환경을 구축하는 핵심 팁을 제공합니다.

Docker로 직접 n8n을 설치했는데 워크플로우가 정상적으로 실행되지 않고 서버 로그만 출력되는 상황에서 n8n 셀프 호스팅 자동화 설정 방법을 찾고 계실 것입니다. 이러한 문제는 주로 컨테이너 내부 환경 변수 설정 오류, 데이터베이스 연결 불안정, 혹은 외부 접속을 위한 리버스 프록시 설정 누락 때문에 발생합니다. 특히 단순히 컨테이너를 실행하는 것만으로는 부족하며, 데이터의 영구 저장과 효율적인 작업 처리를 위한 인프라 설계가 필수적입니다. 이 글은 Docker Compose를 활용해 데이터베이스부터 큐 모드, SSL 인증서까지 포함한 가장 안정적인 n8n 셀프 호스팅 자동화 설정 방법을 단계별로 상세히 안내합니다.

함께 보면 좋은 글: 노션 캘린더 동기화 설정 — 구글 캘린더와 자동 연동

n8n은 기본적으로 SQLite를 사용하지만, 실제 운영 환경에서는 동시성 제어와 데이터 무결성을 보장하기 위해 PostgreSQL을 사용해야 합니다. SQLite는 파일 기반 데이터베이스이므로 쓰기 작업이 많을 경우 잠금(Lock) 현상이 발생하여 워크플로우가 중단될 수 있습니다. 또한 단일 컨테이너로 운영할 경우 발생하는 병목 현상을 해결하기 위해 Redis를 활용한 큐 모드 설정이 필수적입니다. 본 가이드를 따라 오면 워크플로우가 멈추는 현상을 근본적으로 해결하고, 트래픽이 몰려도 끄떡없는 자동화 서버를 구축할 수 있습니다.

이 글의 핵심

- Docker Compose를 활용해 PostgreSQL과 Redis를 포함한 n8n 인프라 구축 방법
- 웹훅(Webhook) 및 외부 연동을 위한 Nginx 리버스 프록시 및 환경 변수 설정법
- 워크플로우 멈춤 현상을 방지하는 큐 모드(Queue Mode) 활성화 및 트러블슈팅
- 운영 환경에 최적화된 보안 설정 및 데이터 백업 전략

한 줄 답변

n8n을 Docker와 PostgreSQL 기반으로 직접 설치해 자동화 워크플로우를 7단계만에 완벽히 구성하고, 클라우드 비용을 0원으로 절감하며 운영 효율을 30% 높이는 방법을 상세히 안내합니다.

0$
초기 비용
7단계
설정 절차
15분
설치 시간
2026년 08월 07일· 10분 읽기· Mebys Blog

1. Docker Compose를 활용한 n8n 셀프 호스팅 자동화 설정 방법 및 구성

n8n을 셀프 호스팅할 때 가장 중요한 것은 격리된 환경에서 서비스를 관리하는 것입니다. 단순히 Docker run 명령어로 실행하는 것보다 Docker Compose를 사용하면 데이터베이스, 캐시, 그리고 n8n 애플리케이션을 하나의 그룹으로 관리할 수 있어 재시작 및 업데이트가 용이합니다. 또한 네트워크를 분리하여 외부의 직접적인 접근을 차단하고, 컨테이너 간의 통신을 내부 네트워크로만 제한함으로써 보안을 강화할 수 있습니다. n8n 공식 문서(docs.n8n.io)에서도 운영 환경 Production 레벨의 배포를 위해 Docker Compose 사용을 강력히 권장하고 있습니다.

첫 번째 단계는 프로젝트 폴더를 생성하고 필수적인 설정 파일을 준비하는 것입니다. 서버의 터미널에 접속하여 다음 명령어를 입력해 디렉터리를 생성합니다. 이 과정은 파일 시스템의 권한 충돌을 방지하기 위해 반드시 일반 사용자 권한이 아닌 적절한 작업 디렉터리에서 진행해야 합니다. 또한, 추후 데이터 백업을 용이하게 하기 위해 홈 디렉터리(~) 하위에 정리하는 것을 추천합니다.

mkdir -p ~/n8n-docker
cd ~/n8n-docker
touch docker-compose.yml
touch .env

docker-compose.yml 파일을 열어 아래와 같이 서비스를 정의합니다. 여기서는 n8n의 핵심 엔진인 n8n 서비스 외에도 데이터를 저장할 postgres, 그리고 작업 대기열을 관리할 redis 서비스를 포함시킵니다. 특히 restart: unless-stopped 옵션을 추가하여 서버 재부팅 시 컨테이너가 자동으로 시작되도록 설정하는 것이 중요합니다. 이는 서버의 예기치 못한 다운타임 이후에도 자동화 서비스가 즉시 복구되도록 보장합니다.

version: "3.8"

services:
  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: n8n-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=${N8N_HOST}
      - N8N_PORT=5678
      - N8N_PROTOCOL=${N8N_PROTOCOL}
      - NODE_ENV=production
      - WEBHOOK_URL=${WEBHOOK_URL}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - QUEUE_BULL_REDIS_HOST=redis
      - EXECUTIONS_MODE=queue
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  postgres_data:
  redis_data:
  n8n_data:

위 설정은 n8n 셀프 호스팅 자동화 설정 방법의 핵심이라 할 수 있습니다. depends_on 섹션을 통해 n8n 컨테이너가 시작되기 전에 PostgreSQL 데이터베이스가 완전히 준비될 때까지 대기하도록 설정했습니다. 이는 데이터베이스 연결 실패로 인한 n8n의 반복적인 재시작 시도를 방지합니다. 또한 healthcheck를 사용하여 데이터베이스가 실제로 쿼리를 받아들일 수 있는 상태인지 확인한 후에 n8n이 구동되도록 만들었습니다. 이러한 의존성 설정은 초기 구축 시뿐만 아니라 서버 업데이트 시에도 매우 중요한 역할을 수행합니다.

각 서비스에 할당된 volumes은 컨테이너가 삭제되더라도 데이터가 유지되도록 보장하는 저장 공간입니다. postgres_data는 모든 워크플로우와 자격 증명 정보를 담고 있으며, n8n_data는 암호화 키 및 설정 파일 등을 저장합니다. 이 볼륨들은 호스트 서버의 Docker 관리 디렉토리에 안전하게 저장되므로, 컨테이너 이미지를 업데이트하더라도 기존 데이터는 손실되지 않습니다. 설정 파일 작성을 마쳤다면, 반드시 docker-compose config 명령어를 실행하여 문법 오류가 없는지 확인하는 습관을 들이는 것이 좋습니다.

n8n 셀프 호스팅 자동화 설정 방법

Photo by Ludovic Delot on Pexels

2. PostgreSQL과 Redis 연동을 위한 환경 변수 세부 설정

Docker Compose 파일을 구성했다면, 이제 실제로 컨테이너에 주입될 민감한 정보와 설정 값들을 관리할 .env 파일을 설정해야 합니다. 이 파일은 보안상의 이유로 절대로 공개 저장소(Git 등)에 올리지 않도록 주의해야 하며, 파일 시스템의 권한을 600으로 설정하여 소유자만 읽고 쓸 수 있도록 하는 것이 좋습니다. 환경 변수를 별도 파일로 관리하면 설정 변경 시 YAML 파일을 수정할 필요 없이 텍스트 에디터로만 값을 바꿀 수 있어 운영 효율성이 크게 향상됩니다.

아래는 .env 파일에 들어갈 내용의 예시입니다. 각 값은 여러분의 서버 환경과 도메인에 맞춰 수정해야 합니다. 특히 데이터베이스 비밀번호는 충분히 복잡하게 생성하여 무차별 대입 공격을 방지해야 합니다.

동영상으로 보는 n8n 셀프 호스팅 자동화 설정 방법

글로 충분하지 않다면 관련 영상을 함께 보세요. 클릭하면 YouTube에서 검색 결과로 이동합니다.

▶ YouTube에서 “n8n 셀프 호스팅 자동화 설정 방법” 영상 보기

자주 묻는 질문

Q. n8n을 로컬 PC가 아닌 서버에 셀프 호스팅하려면 어떤 환경이 필요하나요?

A. Docker와 Docker Compose가 설치된 Linux 서버면 충분합니다. 최소 1GB RAM과 2CPU 코어를 권장하며, 포트 5678이 외부에 개방돼 있어야 합니다.

Q. Docker 없이 직접 npm으로 n8n을 설치할 수 있나요?

A. 네, Node.js 14 이상 버전과 PostgreSQL 데이터베이스만 있으면 npm으로 설치가 가능합니다. 하지만 Docker보다 설정 복잡도가 높아질 수 있습니다.

Q. 데이터베이스는 어떤 것을 선택하는 것이 좋나요?

A. 프로덕션 환경에서는 PostgreSQL을 권장합니다. SQLite는 테스트용으로는 편리하지만 동시성 문제가 발생할 수 있습니다.

Q. n8n을 HTTPS로 보안 연결하려면 어떻게 해야 하나요?

A. Reverse proxy(예: Nginx)와 Let's Encrypt 인증서를 사용해 443 포트로 프록시하면 됩니다. 프록시 설정에 `proxy_set_header X-Forwarded-Proto https;` 를 추가해 주세요.

함께 읽으면 좋은 글

매주 IT 실전 가이드 받아보세요

맥OS·크롬·자동화·AI 도구 주 1회 큐레이션. 광고·스팸 없는 깔끔한 메일.

무료 구독하기

M
Mebys Blog
맥OS · 크롬 · 자동화 · AI 도구 가이드


댓글 남기기

Mebys Blog에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기