مقدمه
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 را به صورت محلی نصب کرده و احراز هویت کنید:
1cloudflared login
۳. یک تونل ایجاد کنید:
1 cloudflared tunnel create my-tunnel
۴. DNS را پیوند دهید:
1 cloudflared tunnel route dns my-tunnel app.example.com
۵. فایل .json حاوی اعتبارنامهها (معمولاً در ~/.cloudflared/ قرار دارد) را در پوشه پروژه کپی کنید، به عنوان مثال، ./cloudflared.
مرحله ۲. ساختار پروژه
1project/
2├── docker-compose.yml
3├── cloudflared/
4│ ├── config.yml
5│ └── <tunnel-id>.json شما در اینجا
6
مرحله ۳. config.yml — پیکربندی تونل
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
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
مرحله ۵. راهاندازی
1docker compose up -d
حالا هنگام مراجعه به https://app.example.com، به کانتینر my-app خود دسترسی پیدا خواهید کرد، بدون اینکه پورتها را به بیرون باز کنید.
نتیجهگیری
استفاده از Cloudflare Tunnel در ترکیب با Docker Compose به شما امکان میدهد:
- انتشار سرویسها را ساده کنید.
- نیاز به پیکربندی دستی HTTPS را حذف کنید.
- امنیت را بدون دردسر با
iptablesو nginx افزایش دهید.
همه چیز در کانتینرها کار میکند - شفاف و بدون جادو. یک راه عالی برای پروکسی کردن پنلهای مدیریتی، داشبوردها یا APIهایی که نمیخواهید مستقیماً در معرض دید قرار دهید.