라즈베리파이에 n8n을 설치하고 커스텀 도메인으로 안전하게 접속하는 방법을 소개합니다. 이 글에서는 n8n 설치부터 SSL 인증서 적용까지 모든 과정을 다룹니다.
sudo apt update
sudo apt upgrade -y
# Node.js 저장소 추가
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
# Node.js 설치
sudo apt install -y nodejs
# 전역으로 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
도메인 관리 페이지에서 서브도메인용 CNAME 레코드 추가:
n8n
CNAME
tplinkdns주소
또는 다른 DDNS 주소DNS 설정이 전파될 때까지 기다립니다(몇 분~몇 시간 소요될 수 있음).
sudo apt install nginx
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
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;
}
}
# 심볼릭 링크 생성
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
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/
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
sudo certbot renew --dry-run
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을 실행하고 Nginx를 통해 https://n8n.도메인.com으로 접근할 수 있도록 설정했지만, Google OAuth 인증 과정에서 리다이렉트 URI 불일치 오류(redirect_uri_mismatch)가 발생했습니다. n8n은 기본적으로 http://localhost:5678/rest/oauth2-credential/callback을 리다이렉트 URI로 사용하는데, 이것이 실제 도메인과 맞지 않아 인증이 실패했습니다.
결국 SSH 터널링이 이 문제의 해결책이었습니다. 이 방법을 통해 로컬 컴퓨터에서 라즈베리파이의 n8n으로 트래픽을 전달하여 localhost 기반 OAuth 인증을 성공적으로 진행할 수 있었습니다.
SSH 터널링 설정 방법
1. 로컬 컴퓨터(노트북/데스크톱)에서 다음 명령어 실행:
ssh -L 5678:localhost:5678 username@라즈베리파이IP
로컬 컴퓨터(노트북/데스크톱)에서 다음 명령어 실행:
ssh -L 5678:localhost:5678 username@라즈베리파이IP
예시: ssh -L 5678:localhost:5678 a811219@192.168.0.100
로컬 브라우저에서 접속:
브라우저에서 http://localhost:5678
으로 접속합니다.
OAuth 인증 진행:
이제 Google OAuth 인증을 시도하면, 리다이렉트 URI가 http://localhost:5678/rest/oauth2-credential/callback
으로 정확히 일치하기 때문에 인증이 성공합니다.
SSH 터널링은 로컬 컴퓨터의 포트 5678을 라즈베리파이의 포트 5678로 전달합니다. 이렇게 하면:
http://localhost:5678
에 접속하면 실제로는 라즈베리파이의 n8n에 접속하게 됩니다.http://localhost:5678/rest/oauth2-credential/callback
으로 리다이렉트할 때, 이 트래픽은 터널을 통해 라즈베리파이의 n8n으로 전달됩니다.localhost
기반 URI로 요청을 받기 때문에 인증 처리를 올바르게 완료할 수 있습니다.https://n8n.survivalcoding.com
을 통해 n8n을 사용할 수 있습니다.crontab -e
다음 줄 추가:@reboot cd /home/username && n8n
이 해결책은 n8n과 같이 OAuth 리다이렉트 URI를 직접 수정하기 어려운 애플리케이션에서 특히 유용합니다. SSH 터널링은 강력하고 유연한 도구로, 이와 같은 네트워크 문제를 해결하는 데 매우 효과적입니다.
이상으로 라즈베리파이에 n8n을 설치하고 HTTPS를 적용하는 방법을 알아보았습니다. 문의사항이나 피드백은 댓글로 남겨주세요!