라즈베리파이에 n8n 설치 및 HTTPS 적용하기

오준석·2025년 3월 22일
0

코딩삽질방지

목록 보기
55/57

라즈베리파이에 n8n을 설치하고 커스텀 도메인으로 안전하게 접속하는 방법을 소개합니다. 이 글에서는 n8n 설치부터 SSL 인증서 적용까지 모든 과정을 다룹니다.

목차

  1. n8n 설치하기
  2. 도메인 설정하기
  3. SSL 인증서 발급받기
  4. Nginx로 HTTPS 설정하기
  5. 문제 해결과 팁

1. n8n 설치하기

시스템 업데이트

sudo apt update
sudo apt upgrade -y

Node.js 설치

# Node.js 저장소 추가
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -

# Node.js 설치
sudo apt install -y nodejs

n8n 설치 및 실행

# 전역으로 n8n 설치
sudo npm install -g n8n

# n8n 실행
n8n start

시스템 서비스로 등록

# 서비스 파일 생성
sudo nano /etc/systemd/system/n8n.service

서비스 파일 내용:

[Unit]
Description=n8n
After=network.target

[Service]
Type=simple
User=사용자이름
WorkingDirectory=/home/사용자이름
ExecStart=/usr/bin/n8n start
Restart=on-failure

[Install]
WantedBy=multi-user.target

서비스 활성화 및 시작:

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n

2. 도메인 설정하기

도메인 DNS 설정

  1. 도메인 관리 페이지에서 서브도메인용 CNAME 레코드 추가:

    • 호스트: n8n
    • 타입: CNAME
    • 값: tplinkdns주소 또는 다른 DDNS 주소
  2. DNS 설정이 전파될 때까지 기다립니다(몇 분~몇 시간 소요될 수 있음).

공유기 포트 포워딩 설정

  1. 공유기 관리 페이지 접속
  2. 포트 포워딩 설정:
    • 외부 포트: 5678
    • 내부 IP: 라즈베리파이 IP
    • 내부 포트: 5678
  3. 추가로 인증서 발급을 위해 80번 포트 포워딩 설정:
    • 외부 포트: 80
    • 내부 IP: 라즈베리파이 IP
    • 내부 포트: 80

3. SSL 인증서 발급받기

Nginx 설치

sudo apt install nginx

Let's Encrypt 클라이언트(Certbot) 설치

sudo apt install certbot

인증서 발급

# 기존 Nginx 중지(80번 포트 해제)
sudo systemctl stop nginx

# 스탠드얼론 모드로 인증서 발급
sudo certbot certonly --standalone -d n8n.도메인.com

인증서 파일 위치:

  • 인증서: /etc/letsencrypt/live/n8n.도메인.com/fullchain.pem
  • 개인키: /etc/letsencrypt/live/n8n.도메인.com/privkey.pem

4. Nginx로 HTTPS 설정하기

Nginx 설정 파일 생성

sudo nano /etc/nginx/sites-available/n8n

설정 파일 내용:

server {
    listen 80;
    server_name n8n.도메인.com;
    
    # HTTP를 HTTPS로 리다이렉트
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name n8n.도메인.com;
    
    ssl_certificate /etc/letsencrypt/live/n8n.도메인.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.도메인.com/privkey.pem;
    
    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Nginx 설정 활성화 및 시작

# 심볼릭 링크 생성
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/

# 기본 사이트 비활성화(선택사항)
sudo rm /etc/nginx/sites-enabled/default

# 설정 문법 확인
sudo nginx -t

# Nginx 시작
sudo systemctl restart nginx

공유기 포트 포워딩 추가 설정

  • 외부 포트: 443
  • 내부 IP: 라즈베리파이 IP
  • 내부 포트: 443

5. 문제 해결과 팁

방화벽 설정

sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5678/tcp

인증서 권한 문제 해결

sudo chmod -R 755 /etc/letsencrypt/live/
sudo chmod -R 755 /etc/letsencrypt/archive/

Nginx 로그 확인

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

인증서 자동 갱신 확인

sudo certbot renew --dry-run

n8n 직접 HTTPS 설정(Nginx 없이)

n8n 서비스 파일(/etc/systemd/system/n8n.service) 수정:

ExecStart=/usr/bin/n8n start --ssl-key /etc/letsencrypt/live/n8n.도메인.com/privkey.pem --ssl-cert /etc/letsencrypt/live/n8n.도메인.com/fullchain.pem

이제 https://n8n.도메인.com으로 안전하게 접속할 수 있습니다! n8n을 통해 다양한 자동화 워크플로우를 만들고 관리해보세요.

라즈베리파이에서 n8n OAuth 인증 문제 해결하기: SSH 터널링 방법

문제 상황

라즈베리파이에서 n8n을 실행하고 Nginx를 통해 https://n8n.도메인.com으로 접근할 수 있도록 설정했지만, Google OAuth 인증 과정에서 리다이렉트 URI 불일치 오류(redirect_uri_mismatch)가 발생했습니다. n8n은 기본적으로 http://localhost:5678/rest/oauth2-credential/callback을 리다이렉트 URI로 사용하는데, 이것이 실제 도메인과 맞지 않아 인증이 실패했습니다.

해결 방법: SSH 터널링

결국 SSH 터널링이 이 문제의 해결책이었습니다. 이 방법을 통해 로컬 컴퓨터에서 라즈베리파이의 n8n으로 트래픽을 전달하여 localhost 기반 OAuth 인증을 성공적으로 진행할 수 있었습니다.

SSH 터널링 설정 방법
1. 로컬 컴퓨터(노트북/데스크톱)에서 다음 명령어 실행:

ssh -L 5678:localhost:5678 username@라즈베리파이IP

SSH 터널링 설정 방법

  1. 로컬 컴퓨터(노트북/데스크톱)에서 다음 명령어 실행:

    ssh -L 5678:localhost:5678 username@라즈베리파이IP

    예시: ssh -L 5678:localhost:5678 a811219@192.168.0.100

  2. 로컬 브라우저에서 접속:
    브라우저에서 http://localhost:5678으로 접속합니다.

  3. OAuth 인증 진행:
    이제 Google OAuth 인증을 시도하면, 리다이렉트 URI가 http://localhost:5678/rest/oauth2-credential/callback으로 정확히 일치하기 때문에 인증이 성공합니다.

이 방법이 작동하는 이유

SSH 터널링은 로컬 컴퓨터의 포트 5678을 라즈베리파이의 포트 5678로 전달합니다. 이렇게 하면:

  1. 로컬 컴퓨터에서 http://localhost:5678에 접속하면 실제로는 라즈베리파이의 n8n에 접속하게 됩니다.
  2. OAuth 인증 과정에서 Google이 http://localhost:5678/rest/oauth2-credential/callback으로 리다이렉트할 때, 이 트래픽은 터널을 통해 라즈베리파이의 n8n으로 전달됩니다.
  3. n8n은 원래 기대하던 localhost 기반 URI로 요청을 받기 때문에 인증 처리를 올바르게 완료할 수 있습니다.

장점

  • n8n의 코드나 설정을 변경할 필요가 없습니다.
  • 일시적으로 인증만 완료하면 되므로, 인증 후에는 터널을 닫아도 됩니다.
  • 다른 OAuth 서비스를 추가할 때도 같은 방법을 사용할 수 있습니다.

단점

  • 인증할 때마다 SSH 터널을 설정해야 합니다.
  • 로컬 컴퓨터에서 SSH 터널링을 설정할 수 있어야 합니다.

참고사항

  • 이 방법은 일시적인 인증을 위한 것입니다. 인증이 완료된 후에는 정상적으로 https://n8n.survivalcoding.com을 통해 n8n을 사용할 수 있습니다.
  • 서버 재부팅 후 n8n이 자동으로 시작되도록 crontab에 설정하는 것을 권장합니다:
    crontab -e
    다음 줄 추가:
    @reboot cd /home/username && n8n

이 해결책은 n8n과 같이 OAuth 리다이렉트 URI를 직접 수정하기 어려운 애플리케이션에서 특히 유용합니다. SSH 터널링은 강력하고 유연한 도구로, 이와 같은 네트워크 문제를 해결하는 데 매우 효과적입니다.

참고 자료

이상으로 라즈베리파이에 n8n을 설치하고 HTTPS를 적용하는 방법을 알아보았습니다. 문의사항이나 피드백은 댓글로 남겨주세요!

profile
교육하고 책 쓰는 개발자

0개의 댓글