본문 바로가기
개발

n8n 도커 설치

by hyperhand 2025. 2. 23.
반응형

n8n 로고

 

 요즘 업무자동화 툴을 이용한 사례들이 많아지고 있고, 특히 AI를 이용한 자동화를 실현한 케이스들도 많이 있어 스터디 겸 해서 관심을 갖게 됐는데 처음엔 make를 사용했다. 그런데 일정 정도의 사용상의 제약을 제외하고는 영원히 무료로 사용할 줄 알았는데 그게 아니었다. 며칠 지나니 오른쪽 상단에 경고가 뜬다.

 

설치

 업무자동화 아니어도 그냥 코딩하면 되지 하고 있던 차에 유튜브에서 우연히 n8n이라는 제품을 보게 됐다. 이건 도커를 이용해 self-hosting 가능한 오픈소스 제품이어서 언제까지 지속될지는 모르겠으나 일단 현재는 무료로 계속 사용할 수 있는 제품이었다.

 인터페이스가 make와 크게 다르지 않아 사용 방법은 비슷할거라 예상됐고, 일단 공식 문서 안내대로 설치를 진행했다.

n8n 도커 설치

$ sudo docker volume create n8n_data
$ sudo docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.
User settings loaded from: /home/node/.n8n/config
Initializing n8n process
n8n ready on 0.0.0.0, port 5678
Version: 1.79.3

Editor is now accessible via:
http://localhost:5678/

Press "o" to open in Browser.

 

위와 같이 컨테이너를 생성하면 http://localhost:5678로 접속하라는 안내가 표시된다. 접속하면 아래와 같이 로컬에서 사용할 수 있는 상태가 된다.

n8n 접속

 

외부 접속을 위한 설치

 

그런데 나는 로컬이 아닌 개인적으로 서버용으로 사용중인 PC에 구동시켜서 외부에서 접속하도록 하고 싶었다. 물론 그냥 로컬에서 컨테이너 생성해서 사용해도 되지만 상시적으로 편하게 접속해서 장소에 구애받지 않고 사용하고 싶었다.

 

그래서 동일한 방법으로 서버PC에 설치하고 IP로 접속을 시도했으나 다음과 같은 에러를 표시하며 접속되지 않았다.

n8n 접속 실패

로컬이 아닌 외부 접속을 시도할 경우 반드시 보안 접속이 요구된다는 메시지이다. 제대로 보안 관련 설정을 수행한 상태로 컨테이너를 생성하면 가장 베스트이겠으나 일단 작동 확인을 해보는게 목표이므로 맨 마지막 안내대로 N8N_SECURE_COOKIE 환경변수를 false로 설정하는 방법으로 컨테이너를 생성했다.

$ sudo docker run -it --rm --name n8n -e N8N_SECURE_COOKIE=false -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.
User settings loaded from: /home/node/.n8n/config
Initializing n8n process
n8n ready on 0.0.0.0, port 5678
Version: 1.79.3

Editor is now accessible via:
http://localhost:5678/

 

이렇게 하면 웹페이지가 정상적으로 표시되고, 등록 절차 및 라이센스 키 인증 절차 후 사용이 가능했다. 하지만 이 방법은 위 에러 메시지에서와 같이 추천되는 방법은 아니다. 정상적으로 하려면 보안과 관련된 설정 후 사용하는 것이 좋다.

 

보안 접속 설정

나는 이미 Letsencrypt를 통해 생성해놨던 인증서가 있었다. 그걸 이용해 https를 이용한 보안 접속을 하도록 컨테이너를 생성했다.

$ sudo docker run -it --rm --name n8n -p 5678:5678 \
-e N8N_PROTOCOL=https \
-e N8N_HOST=my-domain.com \
-v /etc/letsencrypt/live/my-domain.com/fullchain.pem:/home/node/fullchain.pem:ro \
-v /etc/letsencrypt/live/my-domain.com/privkey.pem:/home/node/privkey.pem:ro \
-e N8N_SSL_KEY=privkey.pem \
-e N8N_SSL_CERT=fullchain.pem \
-v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.
User settings loaded from: /home/node/.n8n/config
Last session crashed
Initializing n8n process
Error: EACCES: permission denied, open 'privkey.pem'
    at open (node:internal/fs/promises:639:25)
    at readFile (node:internal/fs/promises:1242:14)
    at Server.init (/usr/local/lib/node_modules/n8n/dist/abstract-server.js:136:22)
    at Start.init (/usr/local/lib/node_modules/n8n/dist/commands/base-command.js:93:9)
    at Start.init (/usr/local/lib/node_modules/n8n/dist/commands/start.js:158:9)
    at Start._run (/usr/local/lib/node_modules/n8n/node_modules/@oclif/core/lib/command.js:301:13)
    at Config.runCommand (/usr/local/lib/node_modules/n8n/node_modules/@oclif/core/lib/config/config.js:424:25)
    at run (/usr/local/lib/node_modules/n8n/node_modules/@oclif/core/lib/main.js:94:16)
    at /usr/local/lib/node_modules/n8n/bin/n8n:71:2
Exiting due to an error.
EACCES: permission denied, open 'privkey.pem'

 

하지만 privkey.pem 파일에 접근 권한 에러가 발생했다. pem 파일들은 root가 아니면 접근이 불가능하기 때문이다. 그래서 인증서 파일을 임의의 디렉토리에 복사 후 읽을 수 있도록 권한을 부여했다.

# pem 파일들 복사
$ sudo cp /etc/letsencrypt/live/my-domain.com/fullchain.pem /opt/letsencrypt/fullchain.pem
$ sudo cp /etc/letsencrypt/live/my-domain.com/privkey.pem /opt/letsencrypt/privkey.pem

# 읽기 권한 부여
$ sudo chmod 644 /opt/letsencrypt/*.pem

 

그리고 다시 컨테이너를 생성하니 정상적으로 https로 접속이 수행된다.

$ sudo docker run -it --rm --name n8n -p 5678:5678 \
-e N8N_PROTOCOL=https \
-e N8N_HOST=kyfactory.dscloud.me \
-v /opt/letsencrypt/fullchain.pem:/home/node/fullchain.pem:ro \
-v /etc/letsencrypt/privkey.pem:/home/node/privkey.pem:ro \
-e N8N_SSL_KEY=privkey.pem \
-e N8N_SSL_CERT=fullchain.pem \
-v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
Permissions 0644 for n8n settings file /home/node/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.
User settings loaded from: /home/node/.n8n/config
Last session crashed
Initializing n8n process
n8n ready on 0.0.0.0, port 5678
Version: 1.79.3

Editor is now accessible via:
https://my-domain.com:5678/

 

반응형