InfoGrab DocsInfoGrab Docs

Docker Compose 사용하기

요약

이 안내서는 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 공식 문서를 참조하세요.

1. Docker 및 Docker Compose 설치#

Docker와 Docker Compose를 설치하는 방법은 사용 중인 Linux 배포판에 따라 다릅니다. 각 구성 요소에 대한 구체적인 설치 안내는 아래 링크에서 확인할 수 있습니다:

설치 안내를 따라 설치를 완료한 후, 다음을 입력하여 Docker와 Docker Compose가 사용 가능한지 확인합니다:

docker --version
docker compose version

2. 선택 사항: Non-root 사용자 접근#

sudo 명령어 없이 Docker를 실행할 수 있도록 선택적으로 접근 권한을 부여할 수 있습니다.

현재 로그인한 사용자(sudo 접근 권한이 있다고 가정)에게 접근 권한을 부여하려면 다음을 실행합니다:

sudo usermod -aG docker ${USER}
# Register the `docker` group membership with current session without changing your primary group
exec sg docker newgrp

다른 사용자에게 접근 권한을 부여하려면, 를 적절한 사용자 이름으로 바꾸어 다음을 입력합니다:

sudo usermod -aG docker 

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

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

groups

3. DNS 설정#

온라인이나 네트워크에서 n8n을 호스팅하려면, 서버를 가리키는 전용 서브도메인을 만듭니다.

서브도메인을 알맞게 라우팅하도록 A 레코드를 추가합니다:

Record type Name Destination
A n8n (또는 원하는 서브도메인) <your_server_IP_address>

4. .env 파일 생성#

n8n 환경 구성과 Docker Compose 파일을 저장할 프로젝트 디렉터리를 만들고 그 안으로 이동합니다:

mkdir n8n-compose
cd n8n-compose

n8n-compose 디렉터리 안에, n8n 인스턴스의 세부 정보를 사용자 지정하기 위해 .env 파일을 생성합니다. 자신의 정보에 맞게 변경합니다:

# DOMAIN_NAME and SUBDOMAIN together determine where n8n will be reachable from
# The top level domain to serve from
DOMAIN_NAME=example.com

# The subdomain to serve from
SUBDOMAIN=n8n

# The above example serve n8n at: https://n8n.example.com

# Optional timezone to set which gets used by Cron and other scheduling nodes
# New York is the default value if not set
GENERIC_TIMEZONE=Europe/Berlin

# The email address to use for the TLS/SSL certificate creation
SSL_EMAIL=user@example.com

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

프로젝트 디렉터리 안에, n8n 인스턴스와 호스트 시스템 간에 파일을 공유하기 위한 local-files라는 디렉터리를 생성합니다(예를 들어, Read/Write Files from Disk node를 사용하는 경우):

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}
      - N8N_RESTRICT_FILE_ACCESS_TO=/files
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:

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

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

Name Type Container mount Description
n8n_data 볼륨 /home/node/.n8n n8n이 SQLite 데이터베이스 파일과 암호화 키를 저장하는 위치입니다.
traefik_data 볼륨 /letsencrypt traefik이 TLS/SSL 인증서 데이터를 저장하는 위치입니다.
./local-files 바인드 /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 구성을 확인하세요.

다음 단계#

참고

이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.

Docker Compose 사용하기

n8n v2.29
원문 보기
요약

이 안내서는 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 공식 문서를 참조하세요.

1. Docker 및 Docker Compose 설치#

Docker와 Docker Compose를 설치하는 방법은 사용 중인 Linux 배포판에 따라 다릅니다. 각 구성 요소에 대한 구체적인 설치 안내는 아래 링크에서 확인할 수 있습니다:

설치 안내를 따라 설치를 완료한 후, 다음을 입력하여 Docker와 Docker Compose가 사용 가능한지 확인합니다:

docker --version
docker compose version

2. 선택 사항: Non-root 사용자 접근#

sudo 명령어 없이 Docker를 실행할 수 있도록 선택적으로 접근 권한을 부여할 수 있습니다.

현재 로그인한 사용자(sudo 접근 권한이 있다고 가정)에게 접근 권한을 부여하려면 다음을 실행합니다:

sudo usermod -aG docker ${USER}
# Register the `docker` group membership with current session without changing your primary group
exec sg docker newgrp

다른 사용자에게 접근 권한을 부여하려면, 를 적절한 사용자 이름으로 바꾸어 다음을 입력합니다:

sudo usermod -aG docker 

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

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

groups

3. DNS 설정#

온라인이나 네트워크에서 n8n을 호스팅하려면, 서버를 가리키는 전용 서브도메인을 만듭니다.

서브도메인을 알맞게 라우팅하도록 A 레코드를 추가합니다:

Record type Name Destination
A n8n (또는 원하는 서브도메인) <your_server_IP_address>

4. .env 파일 생성#

n8n 환경 구성과 Docker Compose 파일을 저장할 프로젝트 디렉터리를 만들고 그 안으로 이동합니다:

mkdir n8n-compose
cd n8n-compose

n8n-compose 디렉터리 안에, n8n 인스턴스의 세부 정보를 사용자 지정하기 위해 .env 파일을 생성합니다. 자신의 정보에 맞게 변경합니다:

# DOMAIN_NAME and SUBDOMAIN together determine where n8n will be reachable from
# The top level domain to serve from
DOMAIN_NAME=example.com

# The subdomain to serve from
SUBDOMAIN=n8n

# The above example serve n8n at: https://n8n.example.com

# Optional timezone to set which gets used by Cron and other scheduling nodes
# New York is the default value if not set
GENERIC_TIMEZONE=Europe/Berlin

# The email address to use for the TLS/SSL certificate creation
SSL_EMAIL=user@example.com

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

프로젝트 디렉터리 안에, n8n 인스턴스와 호스트 시스템 간에 파일을 공유하기 위한 local-files라는 디렉터리를 생성합니다(예를 들어, Read/Write Files from Disk node를 사용하는 경우):

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}
      - N8N_RESTRICT_FILE_ACCESS_TO=/files
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:

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

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

Name Type Container mount Description
n8n_data 볼륨 /home/node/.n8n n8n이 SQLite 데이터베이스 파일과 암호화 키를 저장하는 위치입니다.
traefik_data 볼륨 /letsencrypt traefik이 TLS/SSL 인증서 데이터를 저장하는 위치입니다.
./local-files 바인드 /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 구성을 확인하세요.

다음 단계#

참고

이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.