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