دليل الـ No-Open-Ports: Cloudflare Tunnels لمطوري الـ Backend

دليل الـ No-Open-Ports: Cloudflare Tunnels لمطوري الـ Backend
لو حصل واضطررت تلعب في إعدادات الـ router عشان تفتح port عشان تختبر Stripe webhook، أو OAuth callback، أو توري حد الـ API بتاعك على الـ localhost — انت عارف الألم. الموضوع مش بس متعب، ده كمان غير آمن ومش عملي.
كمطور backend محترف، انت عايز طريقة مستمرة وآمنة وقابلة للـ scripting عشان تخلي الـ services المحلية بتاعتك متاحة. Cloudflare Tunnels (cloudflared) بتعمل outbound-only connection لـ Cloudflare edge. جهازك هو اللي بيتصل بيهم، فمش محتاج تفتح port على الـ firewall بتاعك.
أنا بستخدم الطريقة دي لDeploy مشاريع العملاء — مفيش ports مفتوحة خالص، كل الداتا ماشية من خلال Zero Trust.
الـ Mental Model
cloudflared مش server — ده client.
- التطبيق بتاعك شغال على
localhost:8000 cloudflaredقاعد جنبه وبيعمل dial out لـ cloudflare (بيبني "pipe")- الزائر بيفتح
api.yourdomain.com - Cloudflare بيبعت الـ traffic من الـ pipe لجهازك
مفيش port مفتوح. الـ DNS بيشير للـ tunnel مش للـ IP. لو الـ tunnel credentials موجودة، أي جهاز يقدر يشغله.
المتطلبات
- حساب على Cloudflare
- دومين مضاف على Cloudflare
- cloudflared متثبت
تثبيت cloudflared
على Windows
winget install Cloudflare.cloudflared
أو نزل الـ binary من Cloudflare وحطه في الـ PATH.
على Linux
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install cloudflared
تسجيل الدخول لـ Cloudflare
cloudflared tunnel login
هيفتح browser، اختار الدومين. بعد ما يخلص، ملف الـ certificate هيتحفظ.
أماكن الملف:
- Windows:
%USERPROFILE%\.cloudflared\cert.pem - Linux:
~/.cloudflared/cert.pem
الملف ده critical — من غيره مش هتقدر تشغل الـ tunnel.
إنشاء tunnel
cloudflared tunnel create my-tunnel
هتاخد:
- Tunnel UUID
- ملف credentials JSON
إعداد الـ config
اعمل ملف config.yml:
Windows
%USERPROFILE%\.cloudflared\config.yml
Linux
~/.cloudflared/config.yml
مثال:
tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
credentials-file: /full/path/to/credentials.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- service: http_status:404
DNS routing
اعمل DNS record بيشير للـ tunnel:
cloudflared tunnel route dns my-tunnel app.example.com
مهم: الـ Type لازم CNAME، والـ Target هو الـ tunnel مش الـ IP.
تخلي التطبيق متاح للـ public
لو عايز التطبيق بتاعك يتفتح من غير أي authentication:
- روح على Cloudflare Zero Trust Dashboard
- روح لـ Access > Applications
- دوس Add an application واختار Self-hosted
- حط اسم التطبيق والدومين (مثلاً:
app.example.com) - نزل لـ Application policies ودوس Add a policy
- اعمل policy بالـ settings دي:
- Policy name: "Public Bypass"
- Action: Bypass
- Include: Everyone
- دوس Add policy
خلاص. الـ local service بتاعك (مثلاً localhost:3000) دلوقتي متاح للـ public من غير access control.
تشغيل الـ tunnel
cloudflared tunnel run my-tunnel
أو كـ service:
Windows:
cloudflared service install
Linux:
sudo cloudflared service install
المشاكل الشائعة
الموقع مش بيفتح
- الـ DNS CNAME بيشير لـ tunnel قديم
- الـ UUID غلط في الـ config
- path ملف الـ credentials غلط
بيشتغل محلياً بس
- التطبيق مش شغال على localhost
- الـ port غلط في الـ ingress service
النسخ الاحتياطي والنقل لجهاز تاني
دي أهم جزء.
الملفات اللي لازم تاخد منها نسخة
cert.pemconfig.ymltunnel-UUID.json
من غير دول، الـ tunnel مش هيتعمله reuse.
النقل لـ PC تاني
- ثبت cloudflared
- انسخ الـ 3 ملفات
- تأكد إن الـ paths جوه الـ config صح
- شغل:
cloudflared tunnel run my-tunnel
استخدام نفس الـ tunnel على Linux و Windows
الـ Tunnels مستقلة عن الـ platform. الـ paths بس اللي بتختلف.
الـ UUID والـ cert بيفضلوا زي ما هم.
ملاحظات أمنية
- عامل
cert.pemزي private key - أي حد عنده الملفين دول يقدر يشغل الـ tunnel بتاعك
- خزن الـ backups مشفرة
امتى تعمل tunnel جديد؟
- لو الـ cert.pem اتcompromised
- لو عايز isolation بين الـ environments
- لو حذفت الـ tunnel من Cloudflare dashboard
غير كده، استخدم نفس الـ tunnel.
الـ Mental Model النهائي
cloudflared مش server — ده client. الـ DNS بيشير لـ Cloudflare. Cloudflare بتتكلم مع الـ tunnel. جهازك مبيفتحش port أبداً. ده اللي بيخلي الـ backups أهم من الجهاز نفسه.
هذا البورتيفوليو منشر ورا Cloudflare Tunnels — مفيش ports مفتوحة على الـ server، كل حاجة ماشية من خلال Zero Trust. لو عايز تشوف الـ production stack كامل، شوف دليل الـ Self-Hosting على Dokploy. ولو مهتم بموضوع الـ security، اقرأ عن CVSS 10.0 من Next.js لـ n8n.
اقرأ أيضاً
مقالات ذات صلة
الدليل الشامل لـ Cloudflare Tunnel باستخدام cloudflared
كل محتاج تعرفه عن Cloudflare Tunnel: تثبيت، إعداد، ترحيل، backups. بدون بورتات مفتوحة.
Docker Compose للمطورين — من الصفر للـ Production
Docker Compose للمطورين — من الصفر للـ Production ليه كتبت ده أنا بأشغل VPS واحد. سيرفر واحد بس.
ازاي تستضيف بلوج Next.js بنفسك على Dokploy (من غير ما تفقد أعصابك)
انشر بلوج Next.js على Dokploy في 30 دقيقة. بدون Kubernetes، بدون Vercel — بس VPS وDocker و$6/شهر.