발행일: 2026-10-06(화) 11:44
홈›도서›하루 30분 n8n ④›Docker Compose로 n8n 올리기
DAY 3★★☆

Docker Compose로 n8n 올리기

📖 이론10분
🛠️ 실습15분
🎯 미션5분

"복잡성을 다루는 방법은 그것을 체계화하는 것이다."

— 에츠허르 데이크스트라 (Edsger W. Dijkstra, 컴퓨터 과학자)
🎯 오늘의 학습 목표
  • Docker와 Docker Compose의 개념을 설명할 수 있다.
  • .env 파일과 docker-compose.yml을 올바르게 작성할 수 있다.
  • docker compose up -d 로 n8n을 실행하고 초기 설정을 완료할 수 있다.
💡 Docker는 '프로그램을 박스에 넣어서 어디서든 똑같이 실행하는 기술'이에요. 김치찌개를 이미 끓여서 통조림으로 만들면 어디서 열어도 똑같은 맛이 나오듯, Docker는 프로그램을 그 통조림처럼 만들어줍니다. Docker Compose는 여러 컨테이너를 한 번에 관리하는 도구예요.
Docker 설치
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
usermod -aG docker $USER
docker --version
docker compose version
⚠️ usermod -aG docker $USER 명령어 후에는 로그아웃했다가 다시 로그인해야 변경이 적용됩니다.
폴더 구조 만들기
bash
mkdir -p ~/n8n
cd ~/n8n
mkdir -p data/n8n data/postgres
폴더 구조
text
~/n8n/
├── docker-compose.yml  ← n8n 실행 설정 파일
├── .env                ← 비밀번호 등 민감한 정보
└── data/
    ├── n8n/            ← n8n 워크플로우, 설정 저장 위치
    └── postgres/       ← 데이터베이스 저장 위치
.env 파일
dotenv
# 데이터베이스 설정
POSTGRES_USER=n8n_user
POSTGRES_PASSWORD="여기에_강력한_비밀번호_입력"
POSTGRES_DB=n8n_db

# n8n 기본 설정
N8N_HOST=여기에_도메인_입력
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://여기에_도메인_입력/

# 암호화 키 (32자 이상 랜덤 문자열, 절대 변경 금지)
N8N_ENCRYPTION_KEY=여기에_랜덤문자열_32자_이상_입력

# 타임존 설정
GENERIC_TIMEZONE=Asia/Seoul
TZ=Asia/Seoul

# 실행 기록 자동 정리 (디스크 절약)
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=30
⚠️ .env 파일은 절대 GitHub 같은 곳에 올리면 안 됩니다! 비밀번호가 공개됩니다.
랜덤 암호화 키 생성
bash
openssl rand -hex 32
docker-compose.yml
yaml
services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - 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}
      - N8N_HOST=${N8N_HOST}
      - N8N_PORT=${N8N_PORT}
      - N8N_PROTOCOL=${N8N_PROTOCOL}
      - WEBHOOK_URL=${WEBHOOK_URL}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${TZ}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - EXECUTIONS_DATA_PRUNE=${EXECUTIONS_DATA_PRUNE}
      - EXECUTIONS_DATA_MAX_AGE=${EXECUTIONS_DATA_MAX_AGE}
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=internal
    volumes:
      - ./data/n8n:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
n8n 실행 및 확인
bash
docker compose up -d
docker compose ps
docker compose logs n8n --tail=50
💡 브라우저에서 http://서버IP:5678 으로 접속하면 n8n 초기 설정 화면이 나타납니다. Owner 계정(이메일, 이름, 비밀번호)을 설정하면 대시보드가 보입니다. HTTPS 설정은 DAY 4에서 합니다.
🛠️ DAY 3 실습
Step 1Docker 설치
  1. curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
  2. usermod -aG docker $USER 후 재로그인
  3. docker --version 및 docker compose version 확인
Step 2.env 및 docker-compose.yml 작성
  1. mkdir -p ~/n8n/data/n8n ~/n8n/data/postgres
  2. openssl rand -hex 32 로 암호화 키 생성 후 .env 파일 작성
  3. docker-compose.yml 작성 (위 내용 그대로)
Step 3n8n 실행 및 초기 설정
  1. docker compose up -d 실행
  2. docker compose ps 로 두 컨테이너 running 상태 확인
  3. http://서버IP:5678 접속 후 Owner 계정 생성
🚀 DAY 3 미션

Docker Compose로 n8n을 실행하고 초기 Owner 계정을 생성하세요.

☑️ 미션 체크리스트
  • Docker 및 Docker Compose 설치 완료
  • .env 파일 작성 (강력한 비밀번호, 암호화 키 포함)
  • docker-compose.yml 작성 완료
  • docker compose up -d 성공
  • http://서버IP:5678 접속 및 초기 계정 생성 완료
💡 힌트: .env 파일에서 특수문자가 있는 비밀번호를 따옴표 없이 입력하면 파싱 오류가 납니다. 반드시 큰따옴표로 감싸세요: POSTGRES_PASSWORD="P@ssw0rd!"
🎯 성공 기준: docker compose ps 에서 두 컨테이너 모두 running 상태이고 n8n 대시보드 접속 성공
← 이전
VPS 선택 가이드와 서버 준비
다음 →
Nginx 리버스 프록시와 HTTPS 설정
← 목차로 돌아가기