docker-compose로 n8n설치

docker-compose로 n8n설치

n8n
docker-compose로 n8n설치
Author

gabriel yang

Published

May 24, 2025

Docker Compose를 활용해 n8n을 실행하는 방법

1. Docker 및 Docker Compose 설치

먼저 Docker와 Docker Compose를 설치합니다. Ubuntu에서는 다음 명령어로 설치할 수 있습니다:

sudo apt update
sudo apt install docker.io docker-compose

설치 확인:

docker --version
docker-compose --version

2. 선택 사항: Non-root 사용자 권한 설정

Docker 명령어를 sudo 없이 실행하려면:

sudo usermod -aG docker $USER
exec sg docker newgrp

3. .env 파일 생성

프로젝트 디렉토리를 만들고 .env 파일을 생성합니다:

mkdir n8n-compose
cd n8n-compose
nano .env

.env 파일 내용 예시:

# 도메인 설정
DOMAIN_NAME=example.com
SUBDOMAIN=n8n

# SSL 인증서 발급용 이메일
SSL_EMAIL=your-email@example.com

# n8n 시간대 설정 (예: Asia/Seoul, UTC 등)
GENERIC_TIMEZONE=Asia/Seoul

.env 파일은 환경 변수를 관리하는 데 중요한 역할을 합니다. 이 파일을 사용하면 Docker Compose 설정에서 직접 값을 하드코딩하지 않고도 환경 변수를 쉽게 관리할 수 있습니다. 주요 이점은 다음과 같습니다:

  • 설정 분리: 민감한 정보를 Docker Compose 파일과 분리하여 보안을 강화합니다.
  • 유연성: 개발, 테스트, 프로덕션 환경에 따라 다른 .env 파일을 사용할 수 있습니다.
  • 버전 관리: .env 파일을 .gitignore에 추가하여 민감한 정보가 저장소에 포함되지 않도록 할 수 있습니다.
  • 재사용성: 여러 서비스나 프로젝트에서 동일한 환경 변수를 쉽게 재사용할 수 있습니다.

.env 파일은 Docker Compose 환경 변수를 정의하는 데 사용됩니다. Docker Compose는 이 파일을 읽어 환경 변수를 설정하고, 이를 기반으로 컨테이너를 실행합니다. .env 파일은 보안상의 이유로 중요한 정보(예: 데이터베이스 비밀번호, API 키 등)를 코드 내에 직접 포함시키지 않고 관리하는 데 유용합니다.

Docker Compose는 기본적으로 docker-compose.yml 파일과 같은 디렉토리에서 .env 파일을 찾습니다. 즉, docker-compose.yml 파일과 .env 파일이 같은 폴더에 위치해야 Docker Compose가 .env 파일을 자동으로 인식합니다.

4. docker-compose.yml 파일 생성

docker-compose.yml 파일을 생성하고 필요한 설정을 추가합니다.

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--api=true"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.n8n.tls=true
      - traefik.http.routers.n8n.entrypoints=web,websecure
      - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n.headers.STSPreload=true
      - traefik.http.routers.n8n.middlewares=n8n@docker
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  traefik_data:
    external: true
  n8n_data:
    external: true

외부 볼륨을 사용하기 때문에 docker volume create 명령어로 docker volume을 생성해야 합니다. docker-compose 내의 주요 정보는 .env를 통해서 설정되고 https://n8n.example.com이 접근 URL입니다.

5. Docker Compose 실행

컨테이너 시작:

docker-compose up -d

컨테이너 중지:

docker-compose down

7. 완료

이제 localhost:5678 으로 n8n에 접근할 수 있습니다.

참고자료 - https://docs.n8n.io/hosting/installation/server-setups/docker-compose/

카테고리 다른 글

Date Title Author
May 24, 2025 GCP에 postgres 설치하고 방화벽 추가하기 gabriel yang
May 19, 2025 GCP 콘솔에서 디스크 크기 변경하기 gabriel yang
May 17, 2025 Alpha Vantage API로 주식 정보 가져오기 gabriel yang
May 15, 2025 Google OAuth로 n8n Credential 설정하기 gabriel yang
May 3, 2025 n8n의 Merge 노드 gabriel yang
May 3, 2025 n8n에서 Discord 메시지를 수신하는 자동화 봇 gabriel yang
No matching items