🚀 Cloudflare Tunnel 구성 파일 설정 (config.yml)
Cloudflare Tunnel은 cloudflared 데몬을 통해 실행되며, 트래픽 라우팅 규칙은 주로 $\text{.cloudflared/config.yml}$ 파일에 정의됩니다.
1. 📂 $\text{config.yml}$ 파일 위치 및 구조 확인
터널을 생성하고 인증을 완료한 후, 일반적으로 $\text{cloudflared}$ 클라이언트가 설치된 경로(예: Linux/macOS의 $\text{\textasciitilde}/.cloudflared/$ 또는 Windows의 $\text{\textasciitilde}/.cloudflared/$)에 이 구성 파일이 위치합니다.
2. ✍️ 로컬 포트 5678 연결 규칙 추가
사용하려는 도메인 (예: $\text{my-app.example.com}$)에 대한 트래픽을 로컬 포트 **$5678$**로 전달하도록 $\text{ingress}$ 섹션에 규칙을 추가합니다.
tunnel: <터널-UUID-또는-이름>
credentials-file: /root/.cloudflared/<터널-UUID>.json # 실제 경로와 파일명으로 변경 필요
ingress:
# 1. 특정 도메인에 대한 트래픽을 로컬 포트 5678로 라우팅
- hostname: my-app.example.com
service: http://localhost:5678 # 로컬 서비스 주소 및 포트 지정 (http 또는 https)
# 2. 다른 도메인 또는 경로를 위한 추가 규칙을 정의할 수 있습니다.
# 예시:
# - hostname: another-app.example.com
# service: http://localhost:8080
# 3. 마지막 규칙: 위에 정의된 호스트 이름과 일치하지 않는 모든 트래픽에 대한 폴백 처리 (일반적으로 404 반환)
- service: http_status:404
- $\text{hostname}$: Cloudflare에 등록하고 Tunnel에 연결하려는 도메인입니다. 이 도메인으로 접속하는 외부 트래픽이 이 규칙을 따르게 됩니다.
- $\text{service}$: 외부 트래픽을 전달할 로컬 서비스의 주소입니다. **$\text{http://localhost:5678}$**로 설정하면 해당 도메인의 요청이 cloudflared가 실행되는 로컬 머신의 $5678$ 포트에서 실행 중인 서비스로 전달됩니다.
3. ✅ DNS 레코드 확인
Cloudflare 대시보드에서 해당 도메인 ($\text{my-app.example.com}$)의 DNS 레코드가 생성된 Tunnel에 연결되도록 CNAME 레코드가 올바르게 설정되었는지 확인해야 합니다. (일반적으로 터널 생성 및 라우트 설정 시 자동으로 처리됩니다.)
💻 터널 실행 명령어
$\text{config.yml}$ 파일을 저장한 후, 다음 명령어를 사용하여 터널을 실행합니다.
cloudflared tunnel run <터널-UUID-또는-이름>
터널이 성공적으로 실행되면, **$\text{my-app.example.com}$**으로 접속하는 외부 사용자는 Cloudflare 네트워크를 통해 사용자의 로컬 머신 $5678$ 포트의 서비스에 안전하게 연결됩니다.
이 설정은 두 개의 주요 서비스로 구성됩니다:
- n8n: 로컬 포트 **$5678$**에서 실행되는 n8n 애플리케이션 컨테이너.
- cloudflared: Cloudflare Tunnel 커넥터로, 외부 도메인 트래픽을 n8n 컨테이너($\text{n8n:5678}$)로 안전하게 전달합니다.
🐳 n8n + Cloudflare Tunnel $\text{docker-compose.yml}$ 예시

이 설정을 사용하려면 먼저 Cloudflare Zero Trust 대시보드에서 Tunnel을 생성하고 $\text{TUNNEL_TOKEN}$을 발급받아야 합니다.
1. ⚙️ 환경 변수 파일 ($\text{.env}$)
먼저, 주요 설정값을 관리하기 위한 $\text{.env}$ 파일을 생성합니다.
# .env 파일 내용
# n8n 서비스 환경 설정
N8N_HOST=n8n.your-domain.com # n8n에 접근할 도메인 (필수)
WEBHOOK_URL=https://n8n.your-domain.com/ # 웹훅 리디렉션 URL (필수)
N8N_PORT=5678 # n8n 컨테이너 내부 포트 (기본값 5678)
N8N_PROTOCOL=https # Cloudflare가 HTTPS로 트래픽을 처리하므로 https로 설정
GENERIC_TIMEZONE=Asia/Seoul # 원하는 시간대로 변경
# Cloudflare Tunnel 설정 (필수)
# Cloudflare Zero Trust 대시보드에서 발급받은 실제 토큰으로 변경하세요.
TUNNEL_TOKEN=eyJhIjoi...
2. 📝 Docker Compose 파일 ($\text{docker-compose.yml}$)
다음은 $\text{cloudflared}$ 컨테이너와 $\text{n8n}$ 컨테이너를 함께 실행하는 $\text{docker-compose.yml}$ 파일입니다.
version: '3.7'
services:
# n8n 서비스 정의 (로컬 포트 5678에서 실행)
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
# n8n이 사용할 환경 변수 설정
environment:
- N8N_HOST=${N8N_HOST}
- WEBHOOK_URL=${WEBHOOK_URL}
- N8N_PORT=${N8N_PORT}
- N8N_PROTOCOL=${N8N_PROTOCOL}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
# 데이터베이스/인증 관련 추가 변수를 여기에 설정할 수 있습니다. (예: POSTGRES_USER 등)
# Cloudflared가 n8n 서비스에 접근할 수 있도록 네트워크에 연결
# 외부 포트를 호스트에 직접 노출하지 않습니다.
# ports:
# - "5678:5678" # Cloudflare Tunnel을 사용하므로 주석 처리하는 것이 보안상 좋습니다.
# n8n 데이터 영구 저장을 위한 볼륨
volumes:
- n8n_data:/home/node/.n8n
# Cloudflare Tunnel 서비스 정의 (n8n 서비스로 트래픽을 라우팅)
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
depends_on:
- n8n # n8n이 먼저 시작되도록 의존성 설정
# cloudflared 컨테이너에 환경 변수 전달
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
# Tunnel 명령 실행
command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
# (선택) 외부에서 접근할 수 있도록 클라우드플레어 인증 파일을 마운트할 수도 있습니다.
# volumes:
# - ~/.cloudflared/cert.pem:/home/nonroot/.cloudflared/cert.pem
# 데이터 영구 저장을 위한 Docker 볼륨
volumes:
n8n_data:
# (선택) 클라우드플레어 Tunnel이 컨테이너 이름으로 n8n에 접근하기 위해 사용되는 네트워크
# bridge 네트워크를 사용하면 n8n 컨테이너 이름을 service: http://n8n:5678로 사용할 수 있습니다.
networks:
default:
name: n8n-cloudflare-network
3. 🌐 Cloudflare Tunnel 공용 호스트 설정
$\text{docker-compose.yml}$을 실행하기 전에, Cloudflare Zero Trust 대시보드의 Tunnel 설정에서 다음 공용 호스트 라우팅 규칙을 추가해야 합니다.
| 필드 | 값 |
| Subdomain | $\text{n8n}$ (또는 $\text{.env}$의 $\text{N8N_HOST}$에 맞게) |
| Domain | $\text{your-domain.com}$ |
| Service Type | $\text{HTTP}$ |
| URL | $\text{n8n:5678}$ |
설명: $\text{cloudflared}$ 컨테이너가 Docker 네트워크 내에서 $\text{n8n}$ 컨테이너를 서비스 이름($\text{n8n}$)과 포트($5678$)로 접근하도록 설정하는 것입니다.
4. 🚀 실행
$\text{.env}$와 $\text{docker-compose.yml}$ 파일이 준비되었다면, 다음 명령어로 서비스를 시작합니다.
docker-compose up -d
이제 $\text{[https://n8n.your-domain.com](https://n8n.your-domain.com)}$ 도메인으로 접속하면 로컬 $5678$ 포트에서 구동되는 $\text{n8n}$ 서비스에 안전하게 접근할 수 있습니다.
이 비디오에서는 Docker와 Cloudflare Tunnel을 사용하여 n8n을 로컬에서 설치하는 방법을 설명하고 있습니다.
How to Install n8n Locally with Docker + Cloudflare Tunnels | Best Way