मिनी 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 खुद मुफ़्त है। सिर्फ़ डोमेन का ख़र्च हो तो शुरू कर सकते हैं।
संबंधित लेख
- 💻 डेवलपमेंट
Next.js से MDX ब्लॉग खुद बनाना - यह ब्लॉग कैसे बना
बिना CMS के सिर्फ़ मार्कडाउन फ़ाइलों से चलने वाला ब्लॉग Next.js 16 App Router से बनाने की पूरी प्रक्रिया। फ़ोल्डर स्ट्रक्चर, MDX सेटअप और SEO तक, असल कोड फ़्लो के साथ समझाया है।
- 💻 डेवलपमेंट
5 ऐप एक ही रिपॉज़िटरी में - सोलो डेवलपर का Turborepo मोनोरेपो
कई ऐप और वेब को एक रिपॉज़िटरी में मैनेज करने वाला Turborepo मोनोरेपो सेटअप। साझा कॉन्फ़िग शेयर करना, कैश से बिल्ड बचाना और ऐप-वार डिप्लॉय तक, व्यावहारिक नज़रिए से समझाया है।
- 📚 सीखना
अंग्रेज़ी शब्द रटने के बजाय 'अपने वाक्य' में क्यों बदलने चाहिए
वोकैब लिस्ट कितनी भी रट लो, बोलते समय शब्द क्यों नहीं निकलते, इसकी असली वजह और आज देखी हुई चीज़ों को अपने वाक्यों में बदलकर याद रखने का तरीका यहां बताया है।