
거의 무료로(총 $1.54) n8n을 셀프 호스팅한 방법
요약
연간 약 $1.54의 도메인 비용만으로 n8n을 로컬 환경에 셀프 호스팅하는 방법을 소개합니다. Docker와 Cloudflare Tunnel을 활용하여 로컬 인스턴스를 외부 인터넷에 안전하게 노출시키는 과정을 다룹니다.
핵심 포인트
- Docker를 사용하여 n8n 및 AI 스타터 키트 배포
- Cloudflare Tunnel로 로컬 서버를 HTTPS 도메인에 연결
- 웹후크(Webhook) 사용을 위한 외부 노출 방법 안내
- 노트북 실행 방식의 비용 절감 및 업타임 제약 사항 명시
매달 n8n Cloud 비용을 지불해 왔거나, 호스팅이 복잡하고 비싸다는 생각 때문에 자동화를 피하고 있었다면, 이 방법이 비용을 절약해 줄 수 있습니다.
연간 단 $1.54만으로 실제 공개 HTTPS 도메인을 사용하는 완전한 기능의 n8n 인스턴스를 직접 운영할 수 있습니다.
네, 월간이 아니라 연간입니다. 여러분이 지불해야 할 유일한 비용은 도메인뿐입니다. 그 외 모든 것은 완전히 무료입니다. 구독료도, 숨겨진 비용도 없습니다.
하지만 한 가지 솔직한 단점이 있습니다. 이것은 클라우드 서버가 아니라 말 그대로 제 노트북에서 실행되는 것입니다. 따라서 제 노트북이 꺼지면 n8n도 꺼집니다. 24/7 업타임(Uptime)이 필요하다면 이 방법은 적합하지 않을 수 있습니다.
어쨌든 제가 어떻게 했는지 세 부분으로 나누어 설명하겠습니다:
- Docker를 사용하여 로컬에서 n8n 실행하기 (무료)
- 저렴한 도메인을 구매하여 Cloudflare에 연결하기
- Cloudflare Tunnel을 사용하여 로컬 n8n 인스턴스를 인터넷에 노출시켜 웹후크(Webhook) (Telegram, WhatsApp, Google 등 무엇이든)가 실제로 도달할 수 있게 하기
시작해 봅시다.
파트 1: Docker로 로컬에서 실행하기
이 단계의 핵심은 아직 비용을 들이지 않고, 우선 자신의 컴퓨터에서 n8n이 작동하도록 만드는 것입니다.
Docker Desktop 설치
사용 중인 OS에 관계없이 docker.com에서 다운로드하세요.
n8n Self-Hosted AI Starter Kit 배포
n8n을 단독으로 설치하는 대신, 저는 GitHub에 있는 공식 n8n-io/self-hosted-ai-starter-kit 저장소(repo)를 사용했습니다.

- 자신의 설정(CPU 전용 vs Nvidia GPU 등, README에 명시되어 있음)에 맞는 명령어를 찾아 복사합니다.
- 터미널을 관리자 권한으로 엽니다.
- 거기서 복사한 처음 3개의 명령어를 붙여넣습니다.
- 그런 다음 마지막 명령어를 실행하기 전에 .env 파일을 편집해야 합니다.
저는 Windows를 사용 중이라 파일을 열기 위해 "code .env"를 입력했습니다. Linux/MacOS 사용자라면 nano나 vim을 시도해 보세요.
-
파일을 연 후, N8N_ENCRYPTION_KEY와 N8N_USER_MANAGEMENT_JWT_SECRET의 기본값을 임의의 긴 문자열로 교체합니다. 어떤 문자열이든 크게 상관없습니다.
-
마지막으로 마지막 명령어를 붙여넣습니다 (예: Nvidia GPU 사용자의 경우
docker compose --profile gpu-nvidia up).
이 명령어 하나로 4개의 컨테이너를 불러옵니다:
| 컨테이너 | 역할 |
|---|---|
| n8n | 실제 워크플로우 빌더 / UI |
| ... |
실행하기
실행이 완료되면, Docker 앱을 열고 self-hosted-ai-starter-kit을 켠 다음, 초록색 불이 들어오면 다음 URL로 이동하세요:
그러면 n8n 에디터가 나타날 것입니다.

문제점
자, 이제 짜증 나는 부분이 나옵니다. 본인의 컴퓨터에서만 사용할 때는 모든 것이 완벽하게 작동합니다. 하지만 Telegram, WhatsApp 등 무엇이든 웹훅 트리거 (webhook trigger)를 연결하려고 하면 작동하지 않습니다. 웹훅 URL이 여전히 localhost:5678로 되어 있는데, 이는 본인의 PC만 볼 수 있는 사설 주소이기 때문입니다. Telegram 서버는 말 그대로 해당 주소에 도달할 방법이 없습니다.
그 문제를 해결하기 위한 것이 바로 파트 2와 3입니다.
파트 2: 도메인 확보 + Cloudflare
저렴한 도메인 구매하기
여기에는 돈을 많이 쓸 필요가 없습니다. 저는 Porkbun을 사용했는데, 제가 찾은 것 중 첫해 가격이 가장 저렴했습니다. biswadeep.lol을 $1.54에 구매했습니다.
주의 사항
모든 것을 완전히 연결하기 전에 — 아직 하지 않았다면 Porkbun에서 기본적인 DNS 레코드(A 레코드, CNAME 등)를 설정하세요. 반드시 네임서버(Nameservers)를 전환하기
전에 수행해야 합니다. 그래야 전체 전환 과정이 훨씬 덜 고통스럽습니다.
Cloudflare에 추가하기
Cloudflare 대시보드에 로그인하세요.
- 도메인 개요(Domains overview) 페이지
- 도메인 추가(Add a domain)
- 도메인을 연결하기 위해 이름을 입력하고, 기본값은 그대로 둔 채 '계속(Continue)'을 누릅니다.
- 무료(Free) 플랜을 선택합니다.
- 활성화(Activation)로 계속 진행합니다.
Cloudflare는 기존의 DNS 레코드를 자동으로 스캔합니다.
네임서버를 Cloudflare로 지정하기
Cloudflare는 귀하의 도메인에 고유한 두 개의 네임서버를 제공합니다.
- 다시 Porkbun으로 돌아가서 NS 설정(NS settings)으로 이동합니다.
- 기본 Porkbun 네임서버를 삭제합니다.
- Cloudflare에서 받은 두 개의 네임서버를 붙여넣습니다.
- 저장합니다.
그 다음 Cloudflare로 돌아가서 "네임서버를 업데이트했습니다(I updated my nameservers)"를 클릭합니다.
전파(Propagation)에는 몇 분에서 몇 시간까지 걸릴 수 있습니다 (제 경우는 약 10분 정도 걸렸습니다). 완료되면 Cloudflare의 Domains → Overview에서 상태가 "Active"라고 표시되는지 확인하세요.

"Active" 상태가 보일 때까지 파트 3로 넘어가지 마세요. 그렇지 않으면 스스로를 혼란스럽게 만들 뿐입니다.
파트 3: Cloudflare Tunnel (이 부분이 실제로 작동하게 만드는 핵심입니다)
이 부분은 라우터에서 수상한 포트(ports)를 열 필요 없이, 외부 서비스가 귀하의 로컬 n8n과 실제로 통신할 수 있게 해주는 단계입니다.
터널 생성하기 (Create the tunnel)
Cloudflare에서: Networking → Tunnels → Create a tunnel을 선택합니다. 이름은 무엇이든 상관없습니다.
커넥터 설치하기 (Install the connector)
Cloudflare는 귀하의 운영체제(OS)에 기반한 설치 명령어를 제공합니다. 이를 실행하고 안내에 따라 진행하세요. 연결이 완료되면 터널 상태가 "Healthy"로 표시됩니다.

퍼블릭 호스트네임 설정하기 (Set the public hostname)
터널 설정 내부에서 다음을 수행합니다:
- Routes → Add Route
- Published application
n8n.yourdomain.com과 같은 서브도메인(subdomain)을 설정합니다.- Service URL =
http://localhost:5678

이것으로 기본 설정은 끝났습니다. 이제 n8n.yourdomain.com은 백그라운드에서 귀하의 localhost:5678을 직접 가리키게 됩니다. 동일한 앱이지만, 진입로가 두 개가 된 셈입니다.
한 가지 기억할 점은, 도메인이 로드되려면 n8n 컨테이너(container)가 실제로 실행 중이어야 한다는 것입니다. 지나고 보니 당연한 말이지만, 저도 두 번 정도 까먹었습니다.
웹후크 URL 수정하기 (중요, 건너뛰지 마세요)
여기서 번거로운 부분이 있습니다. 이제 휴대폰이나 어디서든 n8n에 접속할 수 있게 되었음에도 불구하고, Webhook Trigger 노드를 열어보면 여전히 깨진 localhost:5678 URL이 표시됩니다. Google OAuth, Telegram 등 그 어떤 서비스도 이 URL로는 아무것도 할 수 없습니다.
해결 방법: 프로젝트 폴더(self-hosted-ai-starter-kit)에 있는 docker-compose.yml 파일을 열고 n8n 서비스에 다음 두 줄을 추가하세요:
WEBHOOK_URL=https://n8n.yourdomain.com/
N8N_PROTOCOL=https
예시 (나의 설정):

모든 서비스 재시작하기
cd self-hosted-ai-starter-kit
docker compose down
docker compose up -d

참고: docker compose down을 실행할 때 일부 리소스가 여전히 사용 중이라는 경고가 나타날 수 있습니다. 당황하지 마세요. 바로 이어서 up -d를 실행하면 자동으로 해결됩니다.
작동 여부 확인하기
https://n8n.yourdomain.com/를 열고 아무 웹후크 (webhook) 노드나 클릭해 보세요. 이제 localhost 대신 실제 도메인이 표시될 것입니다.

여기에 접속하면 — Google OAuth 리다이렉트, Telegram 봇, WhatsApp 트리거 등 모든 것이 정상적으로 작동합니다. 외부 세계가 접속할 수 있는 실제 HTTPS 주소가 마침내 생겼기 때문입니다.
실제 발생 비용
| 항목 | 비용 |
|---|---|
| Docker Desktop | 무료 |
| ... |
이게 전부입니다
프라이빗하고 완전히 셀프 호스팅된 n8n, 로컬 AI 모델, 벡터 데이터베이스 (vector db), 실제 데이터베이스, 그리고 웹후크가 접속할 수 있는 실제 공개 HTTPS 도메인까지 — 이 모든 것을 도메인 이름 가격만으로 구축했습니다. 유일한 단점은 제 노트북이 켜져 있어야 한다는 점이지만, 현재로서는 괜찮습니다.
설정 중에 문제가 발생하면 댓글을 남겨주세요. 해결을 도와드리겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
