InfoGrab Docs

Docker Compose로 n8n 설치 및 실행

요약

이 지침은 Docker Compose를 사용하여 Linux 서버에서 n8n을 실행하는 방법을 다룹니다. Docker 및 Docker-Compose를 이미 설치한 경우 3단계부터 시작할 수 있습니다. 다양한 아키텍처에 대한 Docker Compose 구성은 n8n-hosting 저장소에서 찾을 수 있습니다.

이 지침은 Docker Compose를 사용하여 Linux 서버에서 n8n을 실행하는 방법을 다룹니다.

Docker 및 Docker-Compose를 이미 설치한 경우 3단계부터 시작할 수 있습니다.

다양한 아키텍처에 대한 Docker Compose 구성은 n8n-hosting 저장소에서 찾을 수 있습니다.

셀프 호스팅 사전 지식 요구사항

n8n 셀프 호스팅에는 다음을 포함한 기술적 지식이 필요합니다:

  • 서버 및 컨테이너 설정 및 구성
  • 애플리케이션 리소스 관리 및 확장
  • 서버 및 애플리케이션 보안
  • n8n 구성

n8n은 전문 사용자에게 셀프 호스팅을 권장합니다. 실수하면 데이터 손실, 보안 문제, 다운타임이 발생할 수 있습니다. 서버 관리 경험이 없다면 n8n Cloud를 권장합니다.

안정(Stable) 및 베타(Beta) 버전

n8n은 매주 새로운 마이너 버전을 릴리스합니다. stable 버전은 프로덕션 사용을 위한 것입니다. beta는 가장 최근 릴리스입니다. beta 버전은 불안정할 수 있습니다. 문제를 보고하려면 포럼을 이용하세요.

현재 stable: 2.14.2 현재 beta: 2.15.0

1. Docker 및 Docker Compose 설치#

Docker 및 Docker Compose를 설치하는 방법은 Linux 배포판에 따라 다릅니다. 아래 링크에서 각 구성 요소에 대한 구체적인 지침을 찾을 수 있습니다:

설치 지침을 따른 후 다음을 입력하여 Docker 및 Docker Compose가 사용 가능한지 확인하세요:

docker --version
docker compose version

2. 선택 사항: 비루트 사용자 액세스#

선택적으로 sudo 명령 없이 Docker를 실행할 수 있는 액세스 권한을 부여할 수 있습니다.

현재 로그인한 사용자에게 액세스 권한을 부여하려면(sudo 액세스 권한이 있다고 가정) 다음을 실행하세요:

sudo usermod -aG docker ${USER}
# 기본 그룹을 변경하지 않고 현재 세션에 `docker` 그룹 멤버십 등록
exec sg docker newgrp

다른 사용자에게 액세스 권한을 부여하려면 를 적절한 사용자 이름으로 대체하여 다음을 입력하세요:

sudo usermod -aG docker 

해당 사용자의 기존 세션에서 새 그룹 권한에 액세스하려면 exec sg docker newgrp를 실행해야 합니다.

다음을 입력하여 현재 세션이 docker 그룹을 인식하는지 확인할 수 있습니다:

groups

3. DNS 설정#

n8n을 온라인 또는 네트워크에서 호스팅하려면 서버를 가리키는 전용 서브도메인을 생성하세요.

서브도메인을 적절히 라우팅하도록 A 레코드를 추가하세요:

레코드 유형 이름 대상
A n8n (또는 원하는 서브도메인) <서버_IP_주소>

4. .env 파일 생성#

n8n 환경 구성 및 Docker Compose 파일을 저장할 프로젝트 디렉토리를 생성하고 내부로 이동합니다:

mkdir n8n-compose
cd n8n-compose

n8n-compose 디렉토리 내에서 n8n 인스턴스의 세부 정보를 사용자 정의하기 위한 .env 파일을 생성합니다. 본인의 정보에 맞게 변경하세요:

# DOMAIN_NAME과 SUBDOMAIN이 함께 n8n에 접근할 수 있는 위치를 결정합니다
# 제공할 최상위 도메인
DOMAIN_NAME=example.com

# 제공할 서브도메인
SUBDOMAIN=n8n

# 위의 예는 https://n8n.example.com에서 n8n을 제공합니다

# Cron 및 기타 스케줄링 노드에서 사용할 선택적 시간대
# 설정하지 않으면 New York이 기본값입니다
GENERIC_TIMEZONE=Europe/Berlin

# TLS/SSL 인증서 생성에 사용할 이메일 주소
SSL_EMAIL=user@example.com

5. 로컬 파일 디렉토리 생성#

프로젝트 디렉토리 내에서 n8n 인스턴스와 호스트 시스템 간에 파일을 공유하기 위한 local-files라는 디렉토리를 생성합니다(예: Read/Write Files from Disk 노드 사용):

mkdir local-files

아래의 Docker Compose 파일이 이 디렉토리를 자동으로 생성할 수 있지만 수동으로 수행하면 올바른 소유권 및 권한으로 생성됩니다.

6. Docker Compose 파일 생성#

compose.yaml 파일을 생성합니다. 파일에 다음을 붙여넣습니다:

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--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_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:

위의 Docker Compose 파일은 두 개의 컨테이너를 구성합니다: n8n용 하나와 TLS/SSL 인증서를 관리하고 라우팅을 처리하는 애플리케이션 프록시인 traefik을 실행하기 위한 하나입니다.

또한 두 개의 Docker 볼륨을 생성 및 마운트하고 앞서 생성한 local-files 디렉토리를 마운트합니다:

이름 유형 컨테이너 마운트 설명
n8n_data Volume /home/node/.n8n n8n이 SQLite 데이터베이스 파일 및 암호화 키를 저장하는 위치입니다.
traefik_data Volume /letsencrypt traefik이 TLS/SSL 인증서 데이터를 저장하는 위치입니다.
./local-files Bind /files n8n 인스턴스와 호스트 간에 공유되는 로컬 디렉토리입니다. n8n에서 이 디렉토리를 읽고 쓰려면 /files 경로를 사용하세요.

7. Docker Compose 시작#

다음을 입력하여 n8n을 시작합니다:

sudo docker compose up -d

컨테이너를 중지하려면 다음을 입력합니다:

sudo docker compose stop

8. 완료#

이제 .env 파일 구성에서 정의한 서브도메인 + 도메인 조합을 사용하여 n8n에 접근할 수 있습니다. 위의 예는 https://n8n.example.com이 됩니다.

n8n은 일반 HTTP가 아닌 보안 HTTPS를 통해서만 액세스할 수 있습니다.

인스턴스에 접근하는 데 문제가 있는 경우 서버의 방화벽 설정과 DNS 구성을 확인하세요.

다음 단계#

Docker Compose로 n8n 설치 및 실행

원문 보기
요약

이 지침은 Docker Compose를 사용하여 Linux 서버에서 n8n을 실행하는 방법을 다룹니다. Docker 및 Docker-Compose를 이미 설치한 경우 3단계부터 시작할 수 있습니다. 다양한 아키텍처에 대한 Docker Compose 구성은 n8n-hosting 저장소에서 찾을 수 있습니다.

이 지침은 Docker Compose를 사용하여 Linux 서버에서 n8n을 실행하는 방법을 다룹니다.

Docker 및 Docker-Compose를 이미 설치한 경우 3단계부터 시작할 수 있습니다.

다양한 아키텍처에 대한 Docker Compose 구성은 n8n-hosting 저장소에서 찾을 수 있습니다.

셀프 호스팅 사전 지식 요구사항

n8n 셀프 호스팅에는 다음을 포함한 기술적 지식이 필요합니다:

  • 서버 및 컨테이너 설정 및 구성
  • 애플리케이션 리소스 관리 및 확장
  • 서버 및 애플리케이션 보안
  • n8n 구성

n8n은 전문 사용자에게 셀프 호스팅을 권장합니다. 실수하면 데이터 손실, 보안 문제, 다운타임이 발생할 수 있습니다. 서버 관리 경험이 없다면 n8n Cloud를 권장합니다.

안정(Stable) 및 베타(Beta) 버전

n8n은 매주 새로운 마이너 버전을 릴리스합니다. stable 버전은 프로덕션 사용을 위한 것입니다. beta는 가장 최근 릴리스입니다. beta 버전은 불안정할 수 있습니다. 문제를 보고하려면 포럼을 이용하세요.

현재 stable: 2.14.2 현재 beta: 2.15.0

1. Docker 및 Docker Compose 설치#

Docker 및 Docker Compose를 설치하는 방법은 Linux 배포판에 따라 다릅니다. 아래 링크에서 각 구성 요소에 대한 구체적인 지침을 찾을 수 있습니다:

설치 지침을 따른 후 다음을 입력하여 Docker 및 Docker Compose가 사용 가능한지 확인하세요:

docker --version
docker compose version

2. 선택 사항: 비루트 사용자 액세스#

선택적으로 sudo 명령 없이 Docker를 실행할 수 있는 액세스 권한을 부여할 수 있습니다.

현재 로그인한 사용자에게 액세스 권한을 부여하려면(sudo 액세스 권한이 있다고 가정) 다음을 실행하세요:

sudo usermod -aG docker ${USER}
# 기본 그룹을 변경하지 않고 현재 세션에 `docker` 그룹 멤버십 등록
exec sg docker newgrp

다른 사용자에게 액세스 권한을 부여하려면 를 적절한 사용자 이름으로 대체하여 다음을 입력하세요:

sudo usermod -aG docker 

해당 사용자의 기존 세션에서 새 그룹 권한에 액세스하려면 exec sg docker newgrp를 실행해야 합니다.

다음을 입력하여 현재 세션이 docker 그룹을 인식하는지 확인할 수 있습니다:

groups

3. DNS 설정#

n8n을 온라인 또는 네트워크에서 호스팅하려면 서버를 가리키는 전용 서브도메인을 생성하세요.

서브도메인을 적절히 라우팅하도록 A 레코드를 추가하세요:

레코드 유형 이름 대상
A n8n (또는 원하는 서브도메인) <서버_IP_주소>

4. .env 파일 생성#

n8n 환경 구성 및 Docker Compose 파일을 저장할 프로젝트 디렉토리를 생성하고 내부로 이동합니다:

mkdir n8n-compose
cd n8n-compose

n8n-compose 디렉토리 내에서 n8n 인스턴스의 세부 정보를 사용자 정의하기 위한 .env 파일을 생성합니다. 본인의 정보에 맞게 변경하세요:

# DOMAIN_NAME과 SUBDOMAIN이 함께 n8n에 접근할 수 있는 위치를 결정합니다
# 제공할 최상위 도메인
DOMAIN_NAME=example.com

# 제공할 서브도메인
SUBDOMAIN=n8n

# 위의 예는 https://n8n.example.com에서 n8n을 제공합니다

# Cron 및 기타 스케줄링 노드에서 사용할 선택적 시간대
# 설정하지 않으면 New York이 기본값입니다
GENERIC_TIMEZONE=Europe/Berlin

# TLS/SSL 인증서 생성에 사용할 이메일 주소
SSL_EMAIL=user@example.com

5. 로컬 파일 디렉토리 생성#

프로젝트 디렉토리 내에서 n8n 인스턴스와 호스트 시스템 간에 파일을 공유하기 위한 local-files라는 디렉토리를 생성합니다(예: Read/Write Files from Disk 노드 사용):

mkdir local-files

아래의 Docker Compose 파일이 이 디렉토리를 자동으로 생성할 수 있지만 수동으로 수행하면 올바른 소유권 및 권한으로 생성됩니다.

6. Docker Compose 파일 생성#

compose.yaml 파일을 생성합니다. 파일에 다음을 붙여넣습니다:

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--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_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:

위의 Docker Compose 파일은 두 개의 컨테이너를 구성합니다: n8n용 하나와 TLS/SSL 인증서를 관리하고 라우팅을 처리하는 애플리케이션 프록시인 traefik을 실행하기 위한 하나입니다.

또한 두 개의 Docker 볼륨을 생성 및 마운트하고 앞서 생성한 local-files 디렉토리를 마운트합니다:

이름 유형 컨테이너 마운트 설명
n8n_data Volume /home/node/.n8n n8n이 SQLite 데이터베이스 파일 및 암호화 키를 저장하는 위치입니다.
traefik_data Volume /letsencrypt traefik이 TLS/SSL 인증서 데이터를 저장하는 위치입니다.
./local-files Bind /files n8n 인스턴스와 호스트 간에 공유되는 로컬 디렉토리입니다. n8n에서 이 디렉토리를 읽고 쓰려면 /files 경로를 사용하세요.

7. Docker Compose 시작#

다음을 입력하여 n8n을 시작합니다:

sudo docker compose up -d

컨테이너를 중지하려면 다음을 입력합니다:

sudo docker compose stop

8. 완료#

이제 .env 파일 구성에서 정의한 서브도메인 + 도메인 조합을 사용하여 n8n에 접근할 수 있습니다. 위의 예는 https://n8n.example.com이 됩니다.

n8n은 일반 HTTP가 아닌 보안 HTTPS를 통해서만 액세스할 수 있습니다.

인스턴스에 접근하는 데 문제가 있는 경우 서버의 방화벽 설정과 DNS 구성을 확인하세요.

다음 단계#