3줄 요약
- n8n은 Zapier/Make 대체 자동화 서버를 내 홈서버에서 직접 운영하게 해줍니다.
- Helper-Scripts로 빠르게 설치하되, WEBHOOK_URL/인증/백업을 같이 잡아야 운영이 편합니다.
- 외부 연동은 포트 오픈보다 Cloudflare Tunnel/리버스 프록시 같은 안전 경로를 우선 추천합니다.
자주 막히는 지점(트러블슈팅)
- 웹훅이 외부에서 안 들어옴 → WEBHOOK_URL, 프록시/터널, HTTPS/리다이렉트부터 확인
- 업데이트 후 워크플로 이슈 → 업데이트 전 백업 + 버전 고정/릴리스 노트 확인
- 인증/권한 문제 → 기본 인증/SSO/프록시 인증 중 1개로 단순화
결론/다음 단계
- n8n을 올렸다면: OpenClaw API/Webhook 또는 MCP 연동으로 ‘AI가 자동화를 수정’하는 확장도 가능합니다.
같이 보면 좋은 글
이 글은 Proxmox CT(LXC) 환경에서 n8n을 빠르게 설치하고, “운영 가능한 자동화 서버”로 기본 세팅까지 마치는 과정을 정리한다. 단순 설치보다 중요한 건 데이터 보존(볼륨/DB)과 외부 접속 방식(도메인/터널/VPN)을 초기에 결정하는 것이다.
이 글의 목표(성공 기준)
- Proxmox CT에 n8n이 정상 설치되고 웹 UI(기본 5678)로 접속된다.
- 재시작/업데이트 후에도 설정과 워크플로우가 유지된다(볼륨/DB 확인).
- 외부 웹훅을 받을 수 있는 접속 경로(Cloudflare Tunnel 또는 VPN)가 정리된다.
쉽게 말해 내가 만든 자동화 레시피가 24시간 돌아가는 작은 공장이에요.
- 구글 스프레드시트가 바뀌면 → 슬랙/디스코드로 공유
- Webhook이 들어오면 → 파일 정리하고 → 결과를 다시 호출한 곳에 응답
- 새 GitHub 이슈/PR이 열리면 → 디스코드로 요약 알림 + 링크 공유
- RSS/블로그 새 글이 뜨면 → 텔레그램/디스코드로 자동 공유
- 특정 키워드 메일이 오면 → 첨부파일 Drive 저장 → 슬랙으로 링크 전달
- 구글 폼 응답이 오면 → Notion/슬랙에 등록하고 담당자에게 알림
- 매일 아침 9시 → 서버 상태 점검 → 텔레그램으로 요약 리포트
같은 흐름을, Zapier/Make 같은 SaaS 대신 내 서버(홈랩)에 올려서 쓸 수 있는 게 핵심입니다.
이 글에서 하는 것(오늘의 체크리스트)
- Proxmox에서 n8n을 어디에 올릴지 결정(CT 권장)
- Proxmox VE Helper-Scripts로 n8n LXC 컨테이너를 생성
- 첫 접속 및 기본 설정(포트/주소/시간대)
- 도메인/HTTPS 뒤에서 쓸 때 꼭 필요한
WEBHOOK_URL설정 - 운영에 필요한 필수 보안 설정, 백업/업데이트 루틴 정리
한 줄 요약: Proxmox에서 n8n 설치는 Helper-Scripts로 빠르게 끝내고, 외부 Webhook을 쓸 계획이라면 WEBHOOK_URL까지 함께 잡아주는 게 핵심입니다.
n8n이 정확히 뭐예요? (초보자 버전)
n8n은 노드(Node)라는 블록을 이어 붙여 자동화 흐름을 만드는 도구입니다.
- 레고 블록처럼 “트리거(시작)” + “액션(처리)”을 연결하고
- 조건 분기(If), 반복(Loop), 데이터 변환(Set/Function) 같은 기본 도구도 있고
- 구글, 깃허브, 디스코드, 노션, 슬랙… 이런 연동 노드가 잔뜩 있습니다.
특히 “회사/개인 데이터가 외부 SaaS로 나가면 불편한” 상황에서는 셀프호스팅이 꽤 매력적입니다.
n8n vs Zapier vs Make vs Node-RED (뭐가 더 나아요?)
처음 고를 때 가장 헷갈리는 지점이라, 딱 필요한 관점만 비교해볼게요.
| 구분 | n8n(셀프호스팅) | Zapier/Make(SaaS) | Node-RED(셀프호스팅) |
|---|---|---|---|
| 비용 | 서버 비용(고정) 위주 | 사용량/플랜 과금이 늘 수 있음 | 서버 비용(고정) 위주 |
| 데이터 통제 | 내 서버에 남음 | 제공자 정책/설정에 좌우 | 내 서버에 남음 |
| 난이도 | 중간(운영/업데이트는 내가) | 낮음(바로 사용) | 중간(생태계/노드 품질 편차) |
| 확장성 | API/Webhook/코드 확장 좋음 | 연동은 쉽지만 제한이 있을 수 있음 | IoT/로컬 자동화에 강점 |
정리하면:
- “자동화를 많이 돌릴 예정이고, 사용량 과금이 싫다” → n8n 셀프호스팅
- “일단 빨리 써보고 싶다, 운영은 하기 싫다” → Zapier/Make
- “스마트홈/로컬 이벤트 위주로 가볍게” → Node-RED도 꽤 좋습니다.
Proxmox에서는 CT로 올릴까요, VM으로 올릴까요?
초보자 기준으로는 CT(LXC) + Helper-Scripts가 가장 편합니다.
- 설치가 빠르고
- Proxmox 안에서 백업/스냅샷/복구가 단순하고
- ‘일단 성공’ 확률이 높습니다.
이 글은 CT 기준으로 진행하고, VM에 올리고 싶다면 마지막에 체크포인트만 따로 적어둘게요.
준비물 (권장 사양)
Helper-Scripts의 기본값을 그대로 따라가도 무난합니다.
- CPU: 2 vCPU
- RAM: 2GB(워크플로우가 많아지면 4GB가 체감상 편합니다)
- 디스크: 10GB(로그/실행 기록이 늘면 더 필요)
0) 설치 전에 5분만 투자하면 나중에 편해지는 것들
1) Proxmox에서 스냅샷/백업 정책을 먼저 정해두기 – n8n은 설정/자격증명(크레덴셜)이 중요해서, “실수로 날렸다”가 가장 아픕니다. 2) IP를 고정(또는 DHCP 예약) – 나중에 리버스 프록시/도메인 붙일 때 덜 고생합니다. 3) 포트 계획 – 기본 포트는 5678입니다. 이미 쓰고 있는 서비스가 있다면 바꿀 수 있어요. 4) 외부 공개 여부 결정 – 내부에서만 쓰면 훨씬 단순합니다. – 외부에서 쓸 거면 도메인 + HTTPS + 접근 제어까지 같이 가는 걸 권장합니다. 5) “이 컨테이너는 n8n 전용”이라고 마음먹기 – 이것저것 한 컨테이너에 섞어 올리면, 나중에 장애가 났을 때 원인 분리가 어려워집니다.
1) Proxmox Helper-Scripts로 n8n 설치(LXC/CT) 하기
Proxmox에서 n8n 설치를 시작하려면, Proxmox 호스트의 Shell(웹 UI에서 >_ Shell)에서 아래 명령을 실행합니다.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/n8n.sh)"
- 무엇을 하는지: n8n이 설치된 LXC 컨테이너를 자동으로 생성/설정합니다.
- 왜 필요한지: 수동 설치보다 변수가 적고, 재현성이 좋아요.
- 실행 후 확인: 생성이 끝나면 안내되는 접속 주소가 나옵니다. 보통 n8n 설치를 고민 중이라면, n8n은 ‘여러 서비스를 이어 붙여서 자동으로 일을 시키는’ 워크플로우 자동화 도구입니다. 쉽게 말해 **내가 만든 자동화 레시피가 2아래처럼요.
http://<컨테이너IP>:5678
컨테이너가 생성되면, Proxmox에서 다음도 확인해두면 좋습니다.
# 컨테이너가 잘 떠 있는지
pct list
# 컨테이너 안으로 들어가서 서비스 상태 확인
pct enter <CTID>
systemctl status n8n --no-pager
2) n8n 설치 후 첫 접속: “바로 해두면 좋은” 필수 보안 설정
n8n은 워크플로우 안에 API 키, 토큰 같은 민감한 자격증명이 들어갈 수 있습니다. 그래서 첫 접속 후에 ‘잠금장치’부터 달아두는 게 마음이 편해요.
2-1) 기본 설정 파일 위치
Helper-Scripts 기준으로 환경설정 파일은 보통 여기입니다.
/opt/n8n.env
편집 예시:
sudo nano /opt/n8n.env
2-2) 최소한 이 3개는 체크하세요
아래 값은 환경/버전에 따라 이름이 조금 다를 수 있지만, “의미”는 동일합니다.
- 관리 화면 보호(기본 인증)
- 외부에 열 가능성이 있다면 강력 추천
- 예시:
# 예시(개념 설명용): 기본 인증 켜기
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=여기에_긴_비밀번호
- 암호화 키(크레덴셜 보호)
# 예시: 크레덴셜 암호화에 쓰이는 키
N8N_ENCRYPTION_KEY=여기에_랜덤_긴_문자열
- 시간대(Timezone)
GENERIC_TIMEZONE=Asia/Seoul
TZ=Asia/Seoul
설정을 바꿨으면 서비스 재시작:
sudo systemctl restart n8n
sudo systemctl status n8n --no-pager
3) 도메인/HTTPS 뒤에서 쓸 때 꼭 필요한 설정: WEBHOOK_URL
n8n을 내부 IP로만 쓰면 대부분의 워크플로우는 잘 동작합니다.
그런데 도메인을 붙이거나(예: https://n8n.example.com), 리버스 프록시(Caddy/Nginx Proxy Manager/Traefik 등) 뒤에 두면, Webhook 주소가 꼬여서 이런 일이 생길 수 있어요.
- “Webhook URL이 내부 IP로 생성됨”
- “외부에서 트리거를 때렸는데 404/timeout”
- “OAuth 리다이렉트가 이상한 주소로 감”
이럴 때 핵심은 WEBHOOK_URL을 ‘사용자가 실제로 접근하는 주소’로 맞추는 겁니다.
WEBHOOK_URL=https://n8n.example.com
N8N_HOST=n8n.example.com
N8N_PROTOCOL=https
- 무엇을 하는지: n8n이 Webhook/OAuth 콜백 URL을 만들 때 기준이 되는 주소를 지정
- 실행 후 확인: 기존에 만들어 둔 Webhook URL이 새 주소로 보이는지, 그리고 외부에서 호출이 되는지
4) 백업/업데이트: “이 순서”로만 해도 사고가 크게 줄어요
4-1) 백업(추천: Proxmox 백업 + 설정 파일 백업)
- Proxmox 쪽: CT 백업(스케줄) 또는 중요한 변경 전 스냅샷
- n8n 쪽: 최소한
/opt/n8n.env는 따로 백업
sudo cp /opt/n8n.env /opt/n8n.env.bak.$(date +%F)
그리고 워크플로우/크레덴셜은 UI에서 Export도 한 번씩 떠두면 심리적 안정감이 올라갑니다.
4-2) 업데이트(간단 루틴)
Helper-Scripts 기반 설치는 내부적으로 Node.js+npm을 사용합니다. 업데이트는 보통 아래처럼 접근합니다.
# 컨테이너 안에서
sudo npm update -g n8n
sudo systemctl restart n8n
업데이트 후에는 꼭 로그를 한 번만 확인해 주세요.
journalctl -u n8n -n 200 --no-pager
5) 자주 겪는 문제 4가지 (트러블슈팅은 ‘순서’가 중요합니다)
(1) 접속이 안 돼요 (브라우저에서 로딩만 돎)
1) 컨테이너 IP가 맞는지 2) 포트 5678이 열려 있는지 3) 서비스가 살아있는지
pct enter <CTID>
ss -lntp | grep 5678
systemctl status n8n --no-pager
(2) 외부 Webhook이 안 들어와요
- 거의 항상
WEBHOOK_URL또는 리버스 프록시 설정 문제입니다. - 프록시에서
X-Forwarded-Proto/Host헤더가 제대로 전달되는지 확인하세요.
(3) 로그인/세션이 자꾸 풀려요
- HTTPS 뒤에서 운영한다면 쿠키 설정(
N8N_SECURE_COOKIE등)이 영향을 줄 수 있습니다. - HTTP로만 쓸 때는
N8N_SECURE_COOKIE=false가 동작에 유리할 수 있고, - HTTPS로 붙이면
true가 더 자연스러운 경우가 많습니다.
(4) 워크플로우가 ‘가끔’ 실패해요
- 첫 번째로는 시간대/서버 시간이 어긋난 경우가 많습니다.
- 두 번째로는 메모리 부족으로 프로세스가 재시작되는 경우도 있어요.
6) 10분 맛보기: 첫 워크플로우 하나만 만들어보기
설치가 끝났다면, “일단 하나라도 자동화가 돌아가게” 만들어보는 게 제일 좋습니다. 여기서는 가장 단순한 예시로 갑니다.
예시) 매일 아침 9시에 ‘서버 상태 점검’ 메시지 보내기(연습용)
1) Cron 트리거 추가 – 예: 매일 09:00 2) HTTP Request 노드로 내 서버의 상태 엔드포인트 호출 – 예를 들면, 홈랩에서 자주 쓰는 도구(예: Uptime Kuma, Grafana, Home Assistant)는 각자 API/엔드포인트가 있습니다. – 처음엔 “내부에서만 접근 가능한 URL”로 테스트하는 게 편합니다. 3) 결과를 Set 노드로 보기 좋게 정리 – JSON을 그대로 던지면 사람이 힘들어요. “필요한 값 2~3개만” 추려두면 유지보수도 쉬워집니다. 4) 마지막으로 Telegram(또는 Email/Discord/Slack) 노드로 전송 이 워크플로우는 사실 기능적으로 대단하진 않지만, 장점이 있습니다.
- 일정 실행(Cron)이 동작하는지
- 외부 호출(HTTP Request)이 되는지
- 자격증명/연동(텔레그램 토큰 등)이 제대로 저장되는지
이 세 가지를 한 번에 검증할 수 있어요. 자동화는 “한 번 성공하면” 이후가 훨씬 빨라집니다.
7) 리버스 프록시(도메인/HTTPS)로 운영할 때 체크포인트
외부에서도 n8n을 쓰고 싶다면, 보통은 https://n8n.example.com 같은 형태로 붙입니다. 이때는 “프록시 뒤에서 돌아가는 웹앱”이므로 몇 가지를 더 챙겨야 합니다.
- HTTPS 종단(SSL 종료): Caddy / Nginx Proxy Manager / Traefik 중 하나로 443을 받는 구조
- Host 헤더 전달: n8n이 자기 주소를 올바르게 인식하려면
Host가 그대로 전달돼야 합니다. - WEBHOOK_URL 지정: 위에서 설명한 것처럼 이게 핵심입니다.
그리고 초보자에게서 은근히 자주 나오는 실수 하나:
“브라우저는 잘 뜨는데 Webhook만 외부에서 실패한다”
이 경우는 대부분
- (1)
WEBHOOK_URL미설정/오설정 - (2) 프록시가
X-Forwarded-Proto(http/https) 정보를 제대로 전달하지 않음 - (3) 방화벽/포트포워딩에서 80/443만 열었는데, 내부 라우팅이 꼬임
중 하나입니다. 해결은 ‘추측’보다 로그를 보는 순서가 빠릅니다.
# n8n 서비스 로그
journalctl -u n8n -n 200 --no-pager
8) (선택) Proxmox VM에 올리고 싶다면
- VM(예: Ubuntu) 위에 Docker Compose로 올리면, 구조는 더 표준적입니다.
- 대신 VM 자원, Docker 볼륨/백업, 방화벽 등 고려할 게 늘어납니다.
- Dockge 설치 가이드: https://homelablog.com/dockge-install-guide-2026/
VM 기반으로 “Docker 스택을 한눈에 관리”하고 싶다면, 아래 글도 같이 보면 도움이 됩니다.
같이 쓰면 좋은 조합(내부 링크)
공식 문서/참고 링크
Q&A: 자주 묻는 질문 3개
Q1. n8n을 외부에 공개해도 괜찮나요?
가능은 하지만, 기본 인증(Basic Auth) 같은 접근 제어를 먼저 걸고 시작하는 걸 권장합니다. 개인적으로는 “일단 내부망/테일스케일로만 접근” → “필요하면 도메인/HTTPS로 공개” 순서가 사고 확률이 낮았습니다.
Q2. 워크플로우/자격증명(크레덴셜)은 어디에 저장되나요?
설치 방식에 따라 위치가 달라질 수 있지만, 핵심은 데이터(설정/자격증명/실행 기록)가 따로 저장된다는 점입니다. 그래서 (1) Proxmox 백업, (2) 설정 파일(/opt/n8n.env) 백업, (3) UI Export를 조합하면 복구가 훨씬 쉬워집니다.
Q3. 성능이 부족하면 무엇부터 올리면 좋나요?
가장 체감이 큰 건 보통 RAM입니다. 자동화가 늘면 작업이 동시에 여러 개 돌 수 있어서, 2GB에서 버티다가도 어느 순간 ‘가끔 멈칫’하는 느낌이 옵니다. 홈랩에서 자주 쓰는 패턴이라면 4GB로 올리는 게 스트레스를 줄여줍니다.
n8n 설치 후 다음 단계(추천)
n8n 설치가 끝났다면, 운영이 편해지는 설정을 하나씩 붙여가면 됩니다.
- 도메인/HTTPS 뒤에서 쓸 거면
WEBHOOK_URL를 먼저 맞추기 - 중요한 변경 전에는 Proxmox 스냅샷으로 n8n 설치 상태를 안전하게 되돌릴 수 있게 해두기
- 워크플로우/크레덴셜은 주기적으로 Export(백업)하기
마무리
n8n은 “자동화가 늘수록 돈이 더 나가는” SaaS의 답답함을 꽤 시원하게 풀어주는 도구입니다. Proxmox에서 Helper-Scripts로 올리면 n8n 설치 장벽이 낮아서, 오늘은 일단 n8n 설치를 끝내고 UI가 보이는 것까지 성공하는 걸 목표로 잡으면 안전합니다. 이후에 도메인/HTTPS/인증을 단계적으로 붙여가면 됩니다. 다음 글에서는 (원하시면) n8n + Telegram + Google Sheets로 “업무 알림 자동화” 같은 실전 워크플로우 예시를 한번 만들어볼게요.
