Cloudflare Tunnel을 Docker로 설치하고 로컬 포트를 인터넷에 안전하게 터널링하는 방법

Cloudflare Tunnel을 Docker로 설치하고 로컬 포트를 인터넷에 안전하게 터널링하는 방법을 단계별로 자세히 안내합니다.​

Cloudflare 준비 및 터널 생성

  1. Cloudflare 계정에 가입하고 도메인을 추가하세요.​

  2. Cloudflare Zero Trust 또는 Access 대시보드에서 “Tunnel”을 생성합니다.

    • 터널 이름을 지정하고 생성합니다.

  3. 터널 인증을 위해 cloudflared를 설치한 후 다음 명령으로 로그인합니다:

    text
    cloudflared tunnel login
    • 브라우저에서 인증 절차가 진행됩니다. 인증 완료 후 credentials 파일이 발급됩니다.​

  4. 터널을 생성합니다:

    text
    cloudflared tunnel create <터널-이름>
    • UUID와 .json credentials 파일이 생성됩니다.

DNS 라우팅 및 설정파일 구성

  • 터널을 도메인에 연결합니다:

    text
    cloudflared tunnel route dns <터널-이름> <서브도메인.example.com>
    • 예: app.example.com을 터널에 연결.​

  • credentials 파일(.json)을 Docker 프로젝트 디렉토리(예시: ./cloudflared)에 복사합니다.

  • cloudflared 설정 파일(config.yml)을 작성합니다:

    text
    tunnel: <터널-이름>
    credentials-file: /etc/cloudflared/<터널-id>.json
    ingress:
    - hostname: app.example.com
    service: http://my-app:3000
    - service: http_status:404

Docker Compose 구성 예시

  • 아래는 cloudflared와 로컬 서비스 컨테이너를 연결하는 docker-compose.yml 기본 예시입니다:

    text
    version: '3.8'
    services:
    my-app:
    image: your-image
    container_name: my-app
    expose:
    - 3000
    networks:
    - app-network
    cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: always
    command: tunnel --config /etc/cloudflared/config.yml run
    volumes:
    - ./cloudflared:/etc/cloudflared
    networks:
    - app-network
    networks:
    app-network:
    driver: bridge
    • 여기서 my-app이 실제로 노출시킬 로컬 서비스입니다.​

Docker 컨테이너 실행 및 점검

Nextcloud를 Docker로 실행한 뒤 Cloudflare Tunnel을 이용해 외부에 안전하게 서비스하는 방법

  1. 모든 파일을 프로젝트 디렉토리에 준비했다면, 다음 명령으로 컨테이너를 실행합니다:

    text
    docker compose up -d
    • cloudflared가 config.yml에 지정된 서비스(예: my-app:3000)로 트래픽을 프록시합니다.​

  2. Cloudflare DNS에서 서브도메인(CNAME)이 tunnel의 .cfargotunnel.com 주소를 가리키는지 확인하세요.

  3. 실제 도메인(예: https://app.example.com)으로 접속하면 로컬 서비스가 Cloudflare Tunnel을 통해 외부에서 안전하게 접근됩니다.


이렇게 설정하면 로컬 포트를 외부에 개방하지 않고, Cloudflare의 보안 인프라를 활용해 안전하게 터널링할 수 있습니다.​