Why NextWhy Next
सूची पर लौटें
💻 डेवलपमेंट3 मिनट में पढ़ें

मिनी PC पर Docker + Cloudflare Tunnel से सेल्फ़ होस्टिंग

घर के एक मिनी PC से कई वेब सर्विस सुरक्षित तरीक़े से पब्लिक करने का तरीक़ा। बिना पोर्ट खोले Cloudflare Tunnel से HTTPS जोड़ते हैं और Docker Compose से चलाते हैं।

मुख्य सारांश

मिनी PC पर Docker Compose से सर्विस चलाएं और Cloudflare Tunnel (cloudflared) से बिना पोर्ट खोले डोमेन और HTTPS जोड़ें। न राउटर सेटिंग चाहिए, न स्टैटिक IP, न सर्टिफ़िकेट रिन्यूअल।

इस पेज पर

क्लाउड का बिल छोटे प्रोजेक्ट के लिए अच्छा-ख़ासा बोझ बन जाता है। मैं यह ब्लॉग समेत कई सर्विस घर के एक मिनी PC पर चलाता हूं। तरीक़ा शेयर कर रहा हूं।

मिनी PC क्यों

  • हमेशा चालू रहता है, बिजली का ख़र्च महीने में मामूली
  • Docker हो तो डिप्लॉय एनवायरनमेंट क्लाउड जैसा ही
  • ट्रैफ़िक बढ़े तो तब शिफ़्ट कर लेंगे

समस्या बस एक है, "घर के नेटवर्क को बाहर सुरक्षित तरीक़े से कैसे खोलें"।

पोर्ट मत खोलिए

पारंपरिक तरीक़ा है राउटर पोर्ट फ़ॉरवर्डिंग + DDNS + सर्टिफ़िकेट रिन्यूअल। झंझट भरा है, और होम नेटवर्क को सीधे इंटरनेट पर खोलने जैसा है, इसलिए ख़तरनाक भी।

इसके बजाय Cloudflare Tunnel इस्तेमाल करते हैं। मिनी PC पर cloudflared Cloudflare की ओर बाहर की तरफ़ कनेक्शन खोलता है, और ट्रैफ़िक उसी टनल से अंदर आता है। बाहर से खुला इनबाउंड पोर्ट 0 है।

사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
  • पब्लिक IP और पोर्ट फ़ॉरवर्डिंग की ज़रूरत नहीं
  • HTTPS सर्टिफ़िकेट Cloudflare अपने आप संभालता है
  • डायनैमिक IP हो तो भी कोई फ़र्क़ नहीं

Docker Compose से सर्विस बांधना

हर सर्विस कंटेनर के रूप में चलाते हैं। Next.js ऐप हो तो output: "standalone" से बिल्ड करके हल्की इमेज बनाते हैं।

services:
  blog:
    build:
      context: .
      dockerfile: apps/blog/Dockerfile
    container_name: why-next-blog
    restart: unless-stopped
    networks: [api]

networks:
  api:
    external: true   # cloudflared 와 같은 네트워크

मुख्य बात है cloudflared के साथ एक ही Docker नेटवर्क में रखना। तभी टनल कंटेनर के नाम से सर्विस तक पहुंच पाता है।

डोमेन जोड़ना

Cloudflare डैशबोर्ड (या टनल सेटिंग) में एक Public Hostname जोड़ते हैं।

blog.example.com  →  http://why-next-blog:3001

बस, हो गया। docker compose up -d --build करें और कुछ मिनट बाद डोमेन पर साइट खुल जाती है।

सार

  • मिनी PC + Docker = सस्ता और क्लाउड जैसा ही डिप्लॉयमेंट
  • Cloudflare Tunnel से बिना पोर्ट खोले HTTPS और डोमेन
  • कंटेनर को cloudflared के साथ एक ही नेटवर्क में रखें
  • Public Hostname से डोमेन → कंटेनर:पोर्ट मैपिंग

छोटी सर्विस के लिए यही कॉम्बिनेशन काफ़ी लंबे समय तक चल जाता है। मैं भी इसी तरह कई ऐप चलाते हुए बनाई हुई चीज़ें बढ़ाता जा रहा हूं।

अक्सर पूछे जाने वाले सवाल

घर का IP डायनैमिक है, चलेगा?

बिल्कुल चलेगा। Cloudflare Tunnel में मिनी PC खुद Cloudflare की ओर बाहर की तरफ़ कनेक्शन खोलता है, इसलिए पब्लिक IP, पोर्ट फ़ॉरवर्डिंग या DDNS की बिल्कुल ज़रूरत नहीं।

क्या इसमें ख़र्च आता है?

Cloudflare Tunnel खुद मुफ़्त है। सिर्फ़ डोमेन का ख़र्च हो तो शुरू कर सकते हैं।

संबंधित लेख