본문 바로가기

IT/AI 자동화

Vultr 가상서버에 n8n 설치하기 : Docker·Cloudflare로 HTTPS://내도메인 24시간 서버 구축! 맥미니 비용의 30%, 프로모션 코드 혜택까지 정리

자동화 좀 굴려보겠다고 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"

질문이 세 개 나온다.

  1. Enter file in which to save the key → 그냥 Enter(기본 경로 ~/.ssh/id_ed25519)
  2. Enter passphrase → 키를 보호할 암호. 설정 권장(입력해도 화면에 안 보이는 게 정상이다)
  3. 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)에서 이 공개키를 등록하고, 인스턴스 생성 화면에서 등록한 키를 선택하면 된다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 1
Vultr SSH Keys 등록 화면에 ed25519 공개키를 붙여넣는 모습

4. Vultr 인스턴스 만들기 (Ubuntu 26.04)

Vultr 콘솔에서 Deploy New Server → Cloud Compute로 들어간다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 2
Vultr 인스턴스 배포 화면에서 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 : 본인이 사용할 서버의 이름

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 3Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 4
이미지 화면 캡쳐

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 → 네트워크 → 커넥터 → 터널 만들기으로 들어간다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 5Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 6
터널 만들기 이미지

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

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 7Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 8
클라우드플레어 터널 만들기 이미지

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에 접근한다

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 9

저장하면 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내용까지 통으로 복사붙여넣기 하면 접속 안된다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 10
.env 캡쳐 이미지

# .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으로 접속이 잘 되는 것이 확인된다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 11
클라우드플레어 이미지

7. 첫 로그인과 방화벽 마무리

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

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 12
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 화면에서 프로모션을 직접 적용해봤다. 순서는 이렇다.

  1. 좌측 Billing으로 들어가 결제 수단을 고른다(신용카드 / PayPal / Crypto / Alipay / Wire Transfer 중 택1).
  2. 우측 Summary 코드 입력란에 VULTRMATCH를 넣고 Apply.
  3. Choose Amount에서 금액을 선택한다(나는 $100을 결제했다).
  4. Terms of Service에 동의하고 카드를 연결한다.

Vultr 가상서버 n8n 설치 Docker Cloudflare HTTPS 서버 구축 이미지 13
Vultr 프로모션 적용하기 이미지

결과 화면에는 그대로 찍혔다. 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줄:

  1. Vultr 2GB Ubuntu 인스턴스에 Docker로 n8n + Cloudflare Tunnel을 올리면,
  2. 인바운드 포트를 하나도 열지 않고도 도메인 HTTPS로 붙는 24시간 n8n 서버가
  3. 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를 직접 노출하지 않는다.