~/ziphub — zsh
ZipHub·~/catalog~/articles~/feed~/sellers~/hire
auth login
[article]category · new-cat

Cloudflare Tunnel با Docker Compose: دسترسی امن به کانتینرها بدون پورت‌های باز

@dignezzz · author2 min read2026-03-15free

TL;DR: نحوه راه‌اندازی Cloudflare Tunnel با استفاده از Docker Compose و فراهم کردن دسترسی امن HTTPS به کانتینرهای شما بدون نیاز به فوروارد کردن پورت‌ها.

مقدمه

Cloudflare Tunnel به شما امکان می‌دهد سرویس‌های محلی خود را به طور قابل اطمینان در اینترنت منتشر کنید، بدون اینکه پورت‌ها را باز کنید و یا HTTPS را به صورت دستی مدیریت کنید. در این راهنما، نحوه راه‌اندازی یک تونل در ترکیب با Docker Compose را یاد خواهید گرفت تا دسترسی به کانتینرهای مورد نظر را به طور خودکار پروکسی کنید، گویی که یک وب‌سایت عمومی معمولی است.

چرا به این نیاز داریم

  • IP عمومی نداریم - و نیازی هم نیست.
  • نیازی به فوروارد کردن پورت در روتر یا فایروال نیست.
  • Cloudflare، HTTPS، WAF، حفاظت در برابر DDoS و ربات‌ها را ارائه می‌دهد.
  • همه چیز را می‌توان در کانتینرها اجرا کرد - بدون نیاز به تنظیمات اضافی nginx، certbot و غیره.

مثال: انتشار یک برنامه وب از طریق تونل

فرض کنید یک کانتینر my-app داریم که روی http://my-app:3000 اجرا می‌شود. می‌خواهیم این برنامه از طریق https://app.example.com قابل دسترسی باشد.

مرحله ۱. آماده‌سازی Cloudflare

۱. ثبت‌نام کنید و دامنه خود را در Cloudflare اضافه کنید.

۲. cloudflared را به صورت محلی نصب کرده و احراز هویت کنید:

bash
1cloudflared login

۳. یک تونل ایجاد کنید:

bash
1    cloudflared tunnel create my-tunnel

۴. DNS را پیوند دهید:

bash
1    cloudflared tunnel route dns my-tunnel app.example.com

۵. فایل .json حاوی اعتبارنامه‌ها (معمولاً در ~/.cloudflared/ قرار دارد) را در پوشه پروژه کپی کنید، به عنوان مثال، ./cloudflared.

مرحله ۲. ساختار پروژه

yaml
1project/
2├── docker-compose.yml
3├── cloudflared/
4   ├── config.yml
5   └── <tunnel-id>.json شما در اینجا
6

مرحله ۳. config.yml — پیکربندی تونل

yaml
1tunnel: my-tunnel
2credentials-file: /etc/cloudflared/<tunnel-id>.json شما در اینجا
3
4ingress:
5  - hostname: app.example.com
6    service: http://my-app:3000
7  - service: http_status:404

مرحله ۴. docker-compose.yml

yaml
1version: '3.8'
2
3services:
4  my-app:
5    image: your-image
6    container_name: my-app
7    expose:
8      - 3000
9    networks:
10      - app-network
11
12  cloudflared:
13    image: cloudflare/cloudflared:latest
14    container_name: cloudflared
15    restart: always
16    command: tunnel --config /etc/cloudflared/config.yml run
17    volumes:
18      - ./cloudflared:/etc/cloudflared
19    networks:
20      - app-network
21
22networks:
23  app-network:
24    driver: bridge

مرحله ۵. راه‌اندازی

bash
1docker compose up -d

حالا هنگام مراجعه به https://app.example.com، به کانتینر my-app خود دسترسی پیدا خواهید کرد، بدون اینکه پورت‌ها را به بیرون باز کنید.

نتیجه‌گیری

استفاده از Cloudflare Tunnel در ترکیب با Docker Compose به شما امکان می‌دهد:

  • انتشار سرویس‌ها را ساده کنید.
  • نیاز به پیکربندی دستی HTTPS را حذف کنید.
  • امنیت را بدون دردسر با iptables و nginx افزایش دهید.

همه چیز در کانتینرها کار می‌کند - شفاف و بدون جادو. یک راه عالی برای پروکسی کردن پنل‌های مدیریتی، داشبوردها یا APIهایی که نمی‌خواهید مستقیماً در معرض دید قرار دهید.

~2 min read · scroll to continue ↓

## discussion

$ topics --entity=article0
sign in to start or join a discussion
No discussions yet — start one to break the ice.
↑↓ nav open⌘K palettei install? help