자동화 좀 굴려보겠다고 n8n을 깔려다 막힌 건, 정작 24시간 켜둘 컴퓨터였다.
맥미니를 종일 돌리고 있지만 월 5~12달러짜리 Vultr VPS 하나면 맥미니 값의 30% 수준으로 24시간 도는 n8n 서버를 가질 수 있다.
이 글을 따라 하면 Ubuntu 서버에 Docker로 n8n을 올리고, 내 도메인에 포트 하나 안 열고 HTTPS 접속할 수 있다.
검증 환경: Vultr Cloud Compute(Ubuntu 26.04 LTS) / Docker(get.docker.com 설치본) / n8n 공식 도커 이미지 + Cloudflare Tunnel(cloudflared) 기준 (2026.06 작성)
제휴 고지: 이 글의 Vultr 가입 링크는 추천(레퍼럴) 링크다.
이 링크로 가입하면 작성자에게 일정 크레딧이 적립될 수 있고, 가입자도 프로모션 크레딧을 받을 수 있다.
프로모션 조건은 자주 바뀌니 가입 직전 Vultr 공식 페이지에서 현재 조건을 확인하자.
(유료결제 2배 프로모션 코드:VULTRMATCH)
SSD VPS Servers, Cloud Servers and Cloud Hosting
Vultr Global Cloud Hosting - Brilliantly Fast SSD VPS Cloud Servers. 100% KVM Virtualization
www.vultr.com
1. 맥미니를 사느냐, VPS를 빌리느냐 — 비용부터 솔직하게
먼저 오해 하나를 정리하자. "맥미니 살 돈의 10%"라는 말을 가끔 보는데, 그 가격(2년에 약 12만 원, 월 3.6달러)으로 빌리는 건 Vultr의 512MB급 요금제뿐이다.
n8n 공식 권장 사양은 1 vCPU에 RAM 2GB이고, 1GB에서도 조금만 복잡한 워크플로우는 메모리 부족으로 죽기 쉽다.
즉 10% 가격대 서버로는 n8n이 제대로 안 돈다.
실제로 쓸 만한 1~2GB 요금제는 2년이면 $120~288, 약 ₩16만~40만 원으로 맥미니(₩1,190,000)의 14~33% 수준이다.
그리고 둘은 성격이 다르다. 맥미니는 한 번 사면 내 것이고 개인 컴퓨터로도 쓴다. VPS는 매달 내는 임대라, 2년 뒤 결제를 멈추면 남는 게 없다. 대신 전기세·소음·고정 IP·24시간 가동을 신경 쓸 필요가 없다는 게 값어치다. "싸다"가 아니라 "관리 부담을 돈으로 치환한다"가 더 정확한 표현이다. 자세한 숫자는 8장 표로 정리했다.
2. 준비물 — Vultr 계정·도메인·SSH
- Vultr 계정: Vultr 가입 페이지에서 계정을 만든다. 가입 시 신용카드나 PayPal 등록이 필요하다(무료 크레딧을 받으려면 결제 수단 확인이 필수다). 프로모션 크레딧 등록 방법은 9장에서 다룬다.
- 도메인 하나:
n8n-vultr.본인도메인.com처럼 서브도메인을 쓸 거다. 도메인을 Cloudflare에 올려둬야 한다. - SSH 접속 환경: 맥·리눅스는 기본
ssh, 윈도우는 Windows Terminal이나 PuTTY.
3. SSH 키 만들기 & 접속 별칭 설정
3-1. 맥에서 키 생성
맥 터미널(응용 프로그램 > 유틸리티 > 터미널)을 열고:
# ed25519 방식의 SSH 키 생성 (주석은 키 식별용 라벨)
ssh-keygen -t ed25519 -C "servertrix-vps"
질문이 세 개 나온다.
- Enter file in which to save the key → 그냥 Enter(기본 경로 ~/.ssh/id_ed25519)
- Enter passphrase → 키를 보호할 암호. 설정 권장(입력해도 화면에 안 보이는 게 정상이다)
- Enter same passphrase again → 같은 암호 다시
주의: 이미 키가 있어 overwrite?가 뜨면 n을 눌러 덮어쓰지 않는다. 기존 키를 그대로 쓰면 된다. 잘못 덮어쓰면 그 키로 접속하던 다른 서버에 못 들어간다.
3-2. 공개키 복사 후 Vultr에 등록
# 공개키(.pub) 내용 출력 — 한 줄 전체를 복사한다
cat ~/.ssh/id_ed25519.pub
출력은 ssh-ed25519 AAAA...servertrix-vps 형태다. .pub(공개키)만 복사한다.
.pub이 안 붙은 파일은 개인키이니 절대 어디에도 올리지 않는다.
Vultr 콘솔의 Orchestration > SSH Keys(또는 서버 생성 시 Server Settings > SSH Keys)에서 이 공개키를 등록하고, 인스턴스 생성 화면에서 등록한 키를 선택하면 된다.

4. Vultr 인스턴스 만들기 (Ubuntu 26.04)
Vultr 콘솔에서 Deploy New Server → Cloud Compute로 들어간다.

- Choose Type: Shared CPU
- 지역(Region): 지연시간만 보면 당연 서울이 좋다. 다만 원하는 플랜에 재고가 없으면 미국 등 다른 리전을 골라야 한다.
- OS: Ubuntu 26.04 LTS
- 플랜: 나는
vhp-1c-2gb(1 vCPU / 2GB RAM / 50GB NVMe)를 골랐다.
n8n만 올릴 거면 2GB로 충분하다. - 인증: 가능하면 비밀번호 대신 SSH 키를 등록한다(보안상 유리하다 안만들었다면 앞의 3장 참고)
- Image Selection and Configuration : Operating System
- Operating System : Ubuntu 26.04 LTS x64
- SSH Keys : 앞서 생성한 SSH키 선택
- Server Hostname and Lable : 본인이 사용할 서버의 이름


Deploy를 누르고 약 3분이면 Status가 Pending → Running으로 바뀌고, IP / Connectivity에 실제 접속 가능한 공인 IP가 표시된다. 이 IP를 메모해 둔다.
4-1. 첫 접속
서버가 뜨면 메모한 IP로 접속한다. Limited User Login을 켰다면 접속 계정은 root가 아니라 생성한 일반 계정이다.
# 발급받은 서버 IP로 접속 (IP·계정명은 본인 값으로 교체)
ssh root@생성된서버IP
이때 묻는 건 서버 비밀번호가 아니라 3-1에서 설정한 SSH 키 암호.
4-2. 접속 별칭(config) 만들기
매번 ssh root@IP를 치기 번거로우니 별칭을 만든다. 맥(로컬)의 ~/.ssh/config에 추가하면 된다.
# 로컬 맥에서 실행 — SSH 설정 파일 편집
mkdir -p ~/.ssh
nano ~/.ssh/config
아래 형식으로 적는다. 들여쓰기는 공백이고, 콜론(:)은 쓰지 않는다.
Host servertrix-vps
HostName YOUR_SERVER_IP
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
이제 내 터미널에서 ssh servertrix-vps 한 줄이면 접속된다. 서버 IP를 외울 필요가 없다.
5. Docker 설치
n8n은 도커로 올리는 게 가장 깔끔하다(업그레이드·이전이 쉽다). 공식 설치 스크립트를 쓰면 한 줄이면 된다.
# 패키지 목록 갱신 및 업그레이드
sudo apt update && sudo apt upgrade -y
# 도커 공식 설치 스크립트 (가장 간단한 방법)
curl -fsSL https://get.docker.com | sudo sh
# 설치 확인 (버전이 출력되면 성공)
docker --version
docker compose version
6. n8n + Cloudflare Tunnel 올리기
n8n만 띄우면 http://IP:5678로 접속하게 되는데, 자격증명 같은 민감한 정보를 다루는 도구라 외부에 그대로 노출하면 안 된다. 여기서는 Cloudflare Tunnel(cloudflared)을 쓴다. 서버가 Cloudflare 엣지로 아웃바운드 연결만 맺기 때문에, 80/443 같은 인바운드 포트를 하나도 열지 않고도 도메인으로 HTTPS 접속이 된다. 인증서 발급·갱신도 Cloudflare가 알아서 한다.
흐름은 이렇다: ① Cloudflare에서 터널을 만들고 토큰을 받는다 → ② 어떤 도메인을 어떤 내부 서비스로 보낼지(퍼블릭 호스트네임) 지정한다 → ③ 서버에서 n8n과 cloudflared를 docker compose로 함께 띄운다.
6-1. Cloudflare에서 터널 만들기 (토큰 받기)
대시보드 화면에서 Zero Trust → 네트워크 → 커넥터 → 터널 만들기으로 들어간다.


- 터널 이름을 정한다(예: n8n-vultr)
- 환경 선택 화면에서 Docker를 고르면 토큰이 포함된 설치 명령이 나온다. 우리는 compose로 돌릴 거라 그 명령을 그대로 실행하지 말고, 명령에 들어 있는 긴 토큰 문자열을 잘 복사해 놓자


docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 토큰값
주의: 이 토큰은 그 자체로 터널 접속 자격증명이다. 깃에 커밋하거나 채팅에 붙여넣지 않는다. 화면을 벗어나면 다시 안 보여줄 수 있으니 안전한 곳에 임시 보관한다.
6-2 퍼블릭 호스트네임 매핑
같은 터널 설정에서 Public Hostname(퍼블릭 호스트네임)을 추가한다. "이 도메인으로 들어온 요청을 서버 안의 어떤 서비스로 보낼지" 정하는 단계다.
- Subdomain: n8n-vultr
- Domain: 본인 도메인(예: example.com)
- Type: HTTP ← n8n은 내부적으로 평문 HTTP로 뜨고, HTTPS는 Cloudflare 엣지가 처리하므로 HTTP가 맞다
- URL: n8n:5678 ← 같은 compose 네트워크 안에서 cloudflared가 서비스 이름으로 n8n에 접근한다

저장하면 Cloudflare가 n8n.example.com에 대한 CNAME 레코드를 자동으로 생성한다. 별도로 A 레코드를 만들 필요가 없다.
6-3. 작업 폴더·암호화 키·.env
# 홈 디렉터리에 n8n 폴더 생성 후 이동
mkdir -p ~/n8n && cd ~/n8n
n8n은 저장된 자격증명을 암호화 키로 보호한다. 키를 먼저 하나 만든다.
# n8n 암호화 키 생성 (출력값을 .env에 넣는다)
openssl rand -hex 24
토큰·키 같은 민감값은 compose에 직접 박지 않고 .env 파일로 분리한다. 같은 폴더에 .env를 만든다.
주의할 점은 docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 토큰값 형태로 복사한 값의 토큰값만 복사 붙여넣기 하면 된다. docker run내용까지 통으로 복사붙여넣기 하면 접속 안된다.

# .env파일 생성
nano ~/n8n/.env
# 내용 입력 후 저장 — 실제 값으로 채운다. 절대 깃에 커밋하지 않는다.
N8N_ENCRYPTION_KEY=YOUR_RANDOM_KEY # 위 openssl 출력값
TUNNEL_TOKEN=YOUR_CLOUDFLARE_TUNNEL_TOKEN # 6-1에서 복사한 터널 토큰 --token 이후 문자열
주의: N8N_ENCRYPTION_KEY를 분실하면 기존에 저장한 자격증명을 못 푼다. .env는 따로 안전하게 백업하고, 버전 관리에서 제외한다(.gitignore).
6-4. compose.yaml 작성
같은 폴더에 compose.yaml을 만든다. 도메인·타임존은 본인 값으로 바꾼다. 민감값은 위 .env에서 주입되므로 여기엔 평문으로 들어가지 않는다.
nano ~/n8n/compose.yaml
여기서 잠깐 compose.yaml, docker-compose.yml 무슨차이일까?
compose.yaml (현재 도커 공식 권장 표준)
docker-compose.yml (과거의 표준이자 가장 흔한 이름)
뭘 쓰던 상관없지만 compose.yaml을 사용하는게 좋겠다는 결론!
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- N8N_HOST=n8n-vultr.example.com # 본인 도메인으로 교체
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n-vultr.example.com/ # 본인 도메인으로 교체
- N8N_PROXY_HOPS=1 # 프록시 뒤에 있음을 n8n에 알림 (아래 주의 참고)
- GENERIC_TIMEZONE=Asia/Seoul
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # .env에서 주입
volumes:
- n8n_data:/home/node/.n8n
cloudflared:
image: cloudflare/cloudflared:latest
restart: always
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN} # .env에서 주입
depends_on:
- n8n
volumes:
n8n_data:
포트를 host에 공개(ports:)하지 않는 게 핵심이다. n8n도, cloudflared도 외부에 포트를 열지 않는다. 외부 트래픽은 오직 Cloudflare 엣지 → 터널 → n8n:5678(내부 네트워크) 경로로만 들어온다.
N8N_PROXY_HOPS 확인 필요: Cloudflare 엣지와 cloudflared가 앞단에 있어 n8n이 인식하는 프록시 단수가 1이 아닐 수 있다. 우선 1로 두고, 로그인/웹훅 동작이 이상하면 값을 조정하며 실행 로그로 확인한다. (값을 단정하지 않는다 — 환경마다 다를 수 있다.)
재현성을 위해 image: docker.n8n.io/n8nio/n8n:1.xx.x처럼 버전 태그를 고정해두면, 나중에 latest가 올라가도 예기치 않게 바뀌지 않는다. 처음 테스트는 태그 없이(=최신) 띄워보고, 안정되면 그 버전으로 고정하는 걸 권한다.
6-5. 실행과 상태 확인
# 백그라운드로 컨테이너 실행
docker compose up -d
# 로그 확인 (cloudflared가 터널 연결을 등록하는 과정 확인)
docker compose logs -f
cloudflared 로그에 Registered tunnel connection 류 메시지가 뜨고, 터널 상태가 정상으로 바뀌면 연결된 것이다. 브라우저에서 https://n8n-vultr.본인도메인.com으로 접속이 잘 되는 것이 확인된다.

7. 첫 로그인과 방화벽 마무리
브라우저에서 https://n8n-vultr.본인도메인.com으로 접속하면 n8n의 최초 계정(소유자) 생성 화면이 뜬다. 관리자 이메일·비밀번호를 만들면 끝이다.

방화벽은 cloudflared가 아웃바운드로만 연결하므로 80/443을 열 필요가 없다. 외부에 열어둘 포트는 SSH뿐이다.
아래 설정을 하면 http://서버IP 접속은 안되니 내 도메인으로 접속하면 된다.
# SSH만 허용하고 방화벽 활성화 (80/443은 열지 않는다)
sudo ufw allow OpenSSH
sudo ufw enable
보안 이점: 인바운드로 80/443을 닫아두면 서버의 공인 IP로 직접 들어오는 경로가 SSH 외에는 없어 공격 표면이 크게 준다.
주의: Vultr는 인스턴스를 "정지(stop)"만 해도 CPU·RAM·스토리지·IP를 계속 점유해 과금이 이어진다. 정말로 비용을 멈추려면 인스턴스를 완전히 삭제(destroy)해야 한다. "껐으니 공짜겠지" 하고 방치하면 몇 달 치가 청구될 수 있다.
Cloudflare 무료 플랜 한도 확인: 무료 플랜은 프록시 경유 업로드(요청 본문) 용량 상한이 있다(통상 약 100MB). n8n으로 대용량 파일을 웹훅/업로드로 받을 일이 잦다면 이 한도를 먼저 확인하자.
기본 설정은 데이터를 SQLite로 저장한다. 개인용이면 충분하지만, 워크플로우를 많이 돌리거나 안정성이 중요하면 PostgreSQL을 붙이는 구성을 권한다(compose에 db 서비스를 추가하면 된다). 이 부분은 n8n 공식 셀프호스팅 문서를 함께 보면 된다.
8. 비용 비교 — 맥미니 vs Vultr (2년 기준)
환율·가격은 시점에 따라 변하니 대략값이다(약 ₩1,370/USD 가정). 맥미니 M4 기본형은 Apple 공식 스토어 기준 ₩1,190,000(M4 칩, 10코어 CPU·10코어 GPU)이다. Vultr 요금은 2026.06 기준 Regular 1GB $5/월, High Frequency 2GB $12/월이다.
| 항목 | 맥미니 M4 (구매) | Vultr 1GB ($5/월) | Vultr 2GB ($12/월, 권장) |
|---|---|---|---|
| 초기/방식 | ₩1,190,000 1회, 소유 | 월 임대 | 월 임대 |
| 2년 총비용 | 약 ₩1,190,000 | $120 ≈ 약 ₩165,000 | $288 ≈ 약 ₩395,000 |
| 맥미니 대비 | 100% | 약 14% | 약 33% |
| n8n 적합성 | 충분 | 가능하나 빠듯(공식 권장 미달) | 권장 사양 충족 |
| 트레이드오프 | 전기·소음·고정IP 직접 관리 | 매달 결제, 종료 시 소유 0 | 매달 결제, 종료 시 소유 0 |
표만 보면 VPS가 싸 보이지만, 맥미니는 2년 뒤에도 남고 개인 PC로도 쓴다. "24시간 무인 가동 + 관리 부담 최소"가 목적이면 VPS, "내 자산으로 남기고 다용도로 쓰기"가 목적이면 맥미니가 맞다.
9. Vultr 프로모션 적용하기 (매칭 코드: VULTRMATCH)
가입 후 Billing 화면에서 프로모션을 직접 적용해봤다. 순서는 이렇다.
- 좌측 Billing으로 들어가 결제 수단을 고른다(신용카드 / PayPal / Crypto / Alipay / Wire Transfer 중 택1).
- 우측 Summary 코드 입력란에
VULTRMATCH를 넣고 Apply. - Choose Amount에서 금액을 선택한다(나는 $100을 결제했다).
- Terms of Service에 동의하고 카드를 연결한다.

결과 화면에는 그대로 찍혔다. Total Billed to Credit Card +$100.00, Total Available Credit $200.00. 내가 낸 $100에 Vultr가 $100을 매칭해 총 $200을 쓰게 된다 — 흔히 말하는 "2배"가 이거다.
다만 같은 화면에 조건도 또렷이 적혀 있다. 매칭은 $100까지가 상한이고("Match up to $100"), 받은 크레딧은 가입 후 365일(12개월)이면 만료된다("credit expires 365 days after signup"). $300 크레딧을 주는 코드도 있으나 유효기간이 30일이라 실효성이 떨어진다.
1GB 서버($5/월)라면 $200 크레딧으로 12개월은 넉넉히 버티지만, 남은 크레딧은 1년 뒤 소멸하니 만료 전에 다 쓰는 걸 염두에 두자.
참고: 무료 크레딧 코드($100~$300)는 보통 30일이면 소멸한다. 코드는 계정당 하나만 적용되니, 입금 매칭과 무료 크레딧 중 본인 사용 패턴에 맞는 걸 고른다. 프로모션은 자주 바뀌니 가입 직전 Vultr 공식 페이지에서 현재 조건을 확인하자.
10. 마무리
핵심 3줄:
- Vultr 2GB Ubuntu 인스턴스에 Docker로 n8n + Cloudflare Tunnel을 올리면,
- 인바운드 포트를 하나도 열지 않고도 도메인 HTTPS로 붙는 24시간 n8n 서버가
- 2년에 약 16만~40만 원이면 완성된다(맥미니의 14~33% 수준, 터널은 무료).
비용은 맥미니의 1/7~1/3 수준이지만, "소유 대신 임대" + "트래픽이 Cloudflare를 거친다"는 성격 차이를 알고 선택하자.
자주 묻는 질문(FAQ)
Q. 1GB 요금제로 n8n 못 쓰나?
A. 가벼운 개인용·테스트면 돈다. 다만 공식 권장이 2GB라, 워크플로우가 복잡해지면 메모리 부족으로 실행이 죽을 수 있다. 처음부터 2GB를 권한다.
Q. 80/443 포트를 안 여는데 정말 외부 접속이 되나?
A. 된다. cloudflared가 서버에서 Cloudflare 엣지로 아웃바운드 연결을 맺고, 외부 요청은 그 터널을 타고 들어온다. 그래서 방화벽엔 SSH만 열면 되고, 공인 IP를 직접 노출하지 않는다.
'IT > AI 자동화' 카테고리의 다른 글
| 헤르메스(hermes agent) AI Agent 웹 대시보드(UI) 활성화 방법 (0) | 2026.06.06 |
|---|---|
| 헤르메스(hermes agent) AI Agent 웹 검색 기능 활성화 하는 방법(Web search) (0) | 2026.06.03 |
| 헤르메스(hermes agent) AI Agent 변경 방법(클로드에서 재미나이로 변경) (0) | 2026.05.31 |
| 헤르메스(hermes agent) 도커 설치 방법! 2. 도커컴포즈 작성 및 실행 (feat. 맥미니 + 클로드) (0) | 2026.05.31 |
| 헤르메스(hermes agent) 메신저(텔레그램, 슬랙) 연동 방법 (0) | 2026.05.31 |