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를 권장합니다.
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 구성을 확인하세요.
