ServBay और Docker के साथ काम करने से जुड़े सामान्य प्रश्न (FAQ)
यदि आप स्थानीय वेब डेवलपमेंट के लिए ServBay का उपयोग करते हैं, तो आप कंटेनरीकृत एनवायरनमेंट के लिए Docker के साथ इसका संयोजन भी करना चाह सकते हैं। यह FAQ macOS पर ServBay और Docker के साझा उपयोग से जुड़े सामान्य सवालों के हल प्रस्तुत करता है — खासकर Docker से ServBay सर्विसेज तक पहुंच और ServBay से Docker कंटेनर एप्लिकेशन के लिए रिवर्स प्रॉक्सी सेटअप संबंधी सवालों के जवाब देता है।
Q1: ServBay मेरी सिस्टम की hosts
फाइल में बदलाव क्यों करता है? क्या मैं इसे रोक सकता हूँ?
ServBay आपकी सिस्टम hosts
फाइल में एंट्री जोड़कर (जैसे: mysite.servbay.demo 127.0.0.1
), आपको कस्टम लोकल डोमेन नाम (जैसे mysite.servbay.demo
) से अपनी स्थानीय डेव वेबसाइट एक्सेस करने देता है। आपकी वेबसाइट वास्तव में आपके कंप्यूटर के 127.0.0.1
पते पर चलती है।
लेकिन Docker की मैकेनिज्म की वजह से, host फाइल Docker कंटेनर में भी पढ़ी जाती है, जिससे mysite.servbay.demo
का रिज़ॉल्व 127.0.0.1
पर हो जाता है — यानी कंटेनर खुद के सर्वर को एक्सेस कर लेता है, न कि macOS होस्ट पर चल रहे सर्वर को।
प्रमुख कारण:
- जब आप ServBay में नया वेबसाइट बनाते हैं और डोमेन नाम (जैसे
example.servbay.demo
) सेट करते हैं, तो ServBay अपने-आप उसे127.0.0.1
से जोड़ देता है। - यह लोकल फ्रेंडली डोमेन नाम से एक्सेस संभव बनाता है। अगर आप
hosts
फाइल न बदलें, तो केवलhttp://127.0.0.1:PORT
से ही एक्सेस संभव होगा, न कि कस्टम डोमेन नाम से।
क्या रोका जा सकता है?
सैद्धांतिक तौर पर, आप ServBay द्वारा जोड़ी गई hosts
एंट्री हटा सकते हैं, लेकिन फिर आप ServBay द्वारा सेट किए गए डोमेन से लोकल वेबसाइट एक्सेस नहीं कर पाएंगे। यह ServBay के मूल उद्देश्य—स्थानीय वेबसाइट बनाना और एक्सेस को सरल बनाना—के खिलाफ है। यदि आप नहीं चाहते कि ServBay किसी डोमेन की hosts एंट्री संभाले, तो ऐसे डोमेन के लिए वेबसाइट ही न बनाएं।
ज्यादातर लोकल डेवेलपमेंट सीनारियो में, ServBay द्वारा hosts
फाइल का मैनेजमेंट बेहद सुविधाजनक है और विकास प्रक्रिया को सरल बनाता है।
Q2: मेरा Docker कंटेनर ServBay द्वारा macOS होस्ट पर मैनेज की गई वेबसाइट (mysite.servbay.demo
आदि) को डोमेन नाम से कैसे सही तरीके से एक्सेस करे?
यह जरूरत आम है, जिसमें सही कॉन्फ़िगरेशन बहुत महत्वपूर्ण है। जब ServBay आपकी macOS होस्ट पर वेबसाइट चलाता है (जैसे mysite.servbay.demo
, जिसका रेजोल्यूशन होस्ट पर 127.0.0.1
है), तब Docker कंटेनर के अंदर 127.0.0.1
मतलब केवल कंटेनर खुद—not होस्ट कंप्यूटर।
गलत तरीका: ServBay वेबसाइट एक्सेस के लिए सीधे URL में host.docker.internal
का इस्तेमाल
Docker Desktop for Mac (और Windows) में host.docker.internal
स्पेशल DNS नेम है, जो कंटेनर से होस्ट IP दिखाता है, लेकिन host.docker.internal
को सीधे URL में अपनी सर्वबे वेबसाइट एक्सेस के लिए बिलकुल सलाह नहीं दी जाती (जैसे — http://host.docker.internal/
खोलना और उम्मीद करना कि वह mysite.servbay.demo
पर ले जाएगा)।
क्यों? क्योंकि इस प्रकार की HTTP रिक्वेस्ट में Host
हेडर host.docker.internal
ही रहेगा। जबकि ServBay वेब सर्वर (Caddy, Nginx आदि) इसी हेडर से तय करता है कि वह किस वेबसाइट को सर्व करें। ऐसे में या तो गलत वेबसाइट खुलेगी, या HTTPS केस में SNI (Server Name Indication) एरर मिलेगा, क्योंकि SSL सर्टिफिकेट तो mysite.servbay.demo
के लिए होता है—not host.docker.internal
के लिए।
सही समाधान: Docker कंटेनर स्टार्ट करते समय extra_hosts
जोड़ना
Docker कंटेनर में /etc/hosts
फाइल में एंट्री जोड़ें, जिससे डोमेन (जैसे mysite.servbay.demo
) host IP को रेफर करे। ऐसा आप extra_hosts
(docker-compose.yml
में) या --add-host
(docker run
के साथ) से आसानी से कर सकते हैं। IP के लिए host.docker.internal
या और बेहतर, host-gateway
का इस्तेमाल करें।
docker run
से इस्तेमाल करें:bashdocker run --add-host=mysite.servbay.demo:host-gateway ... your_image
1(
host-gateway
एक स्पेशल वैल्यू है, जो Docker अपने-आप होस्ट के इंटरनल IP से बदल देता है; Docker 20.10+ में यह आमतौर परhost.docker.internal
का पर्याय होता है।)docker-compose.yml
में:yamlversion: '3.8' # या उच्च संस्करण services: myapp: image: your_image extra_hosts: - "mysite.servbay.demo:host-gateway" # या "mysite.servbay.demo:host.docker.internal" # ... अन्य सेटिंग्स
1
2
3
4
5
6
7
कॉन्फ़िगरेशन के बाद, कंटेनर में:
- जब ऐप
http://mysite.servbay.demo
याhttps://mysite.servbay.demo
एक्सेस करेगा, तो कंटेनर की/etc/hosts
फाइल उस डोमेन को macOS होस्ट की IP पर रेजोल्व कर देगी। - रिक्वेस्ट होस्ट पर चल रहे ServBay वेब सर्वर को जाएगी।
- HTTP
Host
हेडर सही (जैसेmysite.servbay.demo
) रहेगा, जिससे ServBay सही सर्टिफिकेट (अगर HTTPS है) और साइट दे सकेगा।
Q3: मेरा Docker कंटेनर ServBay द्वारा मैनेज किए गए डेटाबेस (जैसे MySQL, PostgreSQL) या अन्य non-HTTP सर्विस से कैसे जुड़े?
वेब सर्विसेज (SNI आधारित) से उलट, डेटाबेस या अन्य TCP सर्विस कनेक्शन के लिए, host.docker.internal
को सर्वर नेम के रूप में इस्तेमाल करना सिफारिश किया गया और असरदार तरीका है।
स्टेप्स:
- पक्का करें कि ServBay की डेटाबेस सर्विस (या अन्य सर्विस) चालू हो और लोकल कनेक्शन स्वीकार कर रही हो (डीफॉल्ट लोकल डेवेलपमेंट में यह true रहता है)।
- कंटेनर एप्लिकेशन की सेटिंग में:
- Host name (Server):
host.docker.internal
रखें। - पोर्ट (Port): ServBay में सेट पोर्ट (जैसे, MySQL —
3306
, PostgreSQL —5432
)। - यूज़रनेम/पासवर्ड: आपकी ServBay डेटाबेस सर्विस की क्रेडेन्शियल्स।
- Host name (Server):
उदाहरण (ServBay वाले MySQL कनेक्शन के लिए): अगर MySQL का पोर्ट 3306
है, तो कंटेनर में सेटिंग्स कुछ इस प्रकार रहेंगी:
- होस्ट:
host.docker.internal
- पोर्ट:
3306
- यूज़र:
your_db_user
- पासवर्ड:
your_db_password
Q4: जब Docker कंटेनर डोमेन नाम (extra_hosts कॉन्फ़िगरेशन के साथ) द्वारा ServBay के HTTPS साइट को एक्सेस करे और उस पर ServBay User CA का सर्टिफिकेट हो — तो कंटेनर में उस CA को ट्रस्टेड कैसे बनाएं?
मान लीजिए आपने Q2 के मुताबिक extra_hosts
/--add-host
से secure.servbay.demo
का मैपिंग host-gateway
से कर दी। अगर secure.servbay.demo
पर ServBay User CA का जारी सर्टिफिकेट लगा है, तो डिफॉल्ट रूप से Docker कंटेनर उसका ट्रस्ट नहीं मानता — SSL हैंडशेक फेल हो जाएगा।
ServBay CA फाइल के पाथ (macOS होस्ट पर):
- ServBay User CA रूट सर्टिफिकेट:
/Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt
- PEM फाइल जिसमें ServBay User CA + Public CA + Mozilla रूट्स सम्मिलित हैं:
- ARM Mac:
/Applications/ServBay/package/common/openssl/3.2/cacert.pem
- Intel Mac:
/Applications/ServBay/package/common/openssl/1.1.1u/cacert.pem
- ARM Mac:
समाधान के तरीके:
आप मुख्यतः तीन तरह से कंटेनर को User CA ट्रस्ट करा सकते हैं:
- विधि 1: इमेज बिल्ड के समय सिस्टम लेवल ट्रस्ट (Dockerfile से) – सबसे भरोसेमंद तरीका, जब इमेज खुद बना रहे हों।
- विधि 2: रनटाइम पर एप्लिकेशन लेवल ट्रस्ट (वॉल्यूम माउंट + env वैरिएबल से) – जब सिर्फ खास ऐप को ट्रस्ट कराना हो या इमेज न बदलना चाहें।
- विधि 3: रनटाइम सिस्टम लेवल ट्रस्ट (वॉल्यूम माउंट + कस्टम कमांड से) – रनिंग कंटेनर में सिस्टम लेवल ट्रस्ट स्थापित करें, बिना इमेज बदले।
विधि 1: बिल्ड टाइम पर सिस्टम लेवल ट्रस्ट (Dockerfile के ज़रिए)
इमेज बनाते समय CA सर्टिफिकेट को सिस्टम ट्रस्ट स्टोर में डालीए।
- CA फाइल तैयार करें:
/Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt
को Dockerfile कंटेक्स्ट में रखें। - Dockerfile उदाहरण (Debian/Ubuntu):dockerfile
# Dockerfile FROM ubuntu:latest COPY ServBay-Private-CA-ECC-Root.crt /usr/local/share/ca-certificates/ServBay-User-CA.crt RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && \ update-ca-certificates && \ rm -rf /var/lib/apt/lists/*
1
2
3
4
5
6 - Dockerfile उदाहरण (Alpine):dockerfile
# Dockerfile FROM alpine:latest COPY ServBay-Private-CA-ECC-Root.crt /usr/local/share/ca-certificates/ServBay-User-CA.crt RUN apk add --no-cache ca-certificates && update-ca-certificates
1
2
3
4 - Docker Compose बिल्डिंग:yaml
# docker-compose.yml version: '3.8' services: myapp: build: context: ./app_service # इसमें Dockerfile और ServBay-Private-CA-ECC-Root.crt शामिल हो dockerfile: Dockerfile extra_hosts: ["secure.servbay.demo:host-gateway"]
1
2
3
4
5
6
7
8
विधि 2: रनटाइम पर एप्लिकेशन लेवल ट्रस्ट (वॉल्यूम माउंट + env वेरिएबल के ज़रिए)
इसमें सर्टिफिकेट को वॉल्यूम के ज़रिए कंटेनर में डालें और एप्लिकेशन को env वैरिएबल्स से बताएं।
docker-compose.yml
उदाहरण:yamlअपनी ऐप के अनुसार उपयुक्त env वेरिएबल्स चुनें।version: '3.8' services: myapp: image: some-base-image volumes: - /Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt:/etc/ssl/certs/MyCustomCA.crt:ro environment: # Node.js के लिए उदाहरण: - NODE_EXTRA_CA_CERTS=/etc/ssl/certs/MyCustomCA.crt # Python (requests) के लिए: # - REQUESTS_CA_BUNDLE=/etc/ssl/certs/MyCustomCA.crt # generic SSL_CERT_FILE के लिए: # - SSL_CERT_FILE=/etc/ssl/certs/MyCustomCA.crt extra_hosts: ["secure.servbay.demo:host-gateway"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
विधि 3: रनटाइम पर सिस्टम लेवल ट्रस्ट (वॉल्यूम माउंट + कस्टम स्टार्टअप कमांड)
इस तरीके में वॉल्यूम से सर्टिफिकेट डालकर कंटेनर स्टार्ट होते ही सिस्टम CA स्टोर अपडेट करते हैं। इमेज में बदलाव नहीं करना पड़ेगा, लेकिन स्टार्ट कमांड लंबा हो सकता है।
docker-compose.yml
उदाहरण (Debian/Ubuntu आधारित इमेज):yamlध्यान दें:version: '3.8' services: myapp: image: ubuntu:latest # या कोई apt वाला इमेज जिसमें update-ca-certificates है volumes: # सर्टिफिकेट डायरेक्ट सिस्टम CA फोल्डर में माउंट करें - /Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt:/usr/local/share/ca-certificates/ServBay-User-CA.crt:ro # command ओवरराइड करें — स्टार्टअप पर CA अपडेट करें और फिर ओरिजिनल ऐप चलाएं command: > sh -c " echo 'Attempting to update CA certificates...' && if command -v update-ca-certificates > /dev/null; then if [ ! -f /usr/bin/update-ca-certificates ]; then apt-get update && apt-get install -y --no-install-recommends ca-certificates; fi && update-ca-certificates && echo 'CA certificates updated.' else echo 'update-ca-certificates command not found, skipping CA update.' fi && echo 'Starting application...' && exec your_original_application_command_here # अपने असली ऐप कमांड से बदलें " extra_hosts: ["secure.servbay.demo:host-gateway"] # root प्रिविलेज (update-ca-certificates के लिए) जरूरी हो सकती है # user: root # आवश्यकता अनुसार
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24- कंप्लीकेटेड स्टार्टअप: command/entrypoint बदलना कभी-कभी जटिल हो सकता है—खासकर ऑफिसियल इमेज के लिए। ऐप का हेल्दी स्टार्ट कमांड सही से जोड़ें।
- परमिशन:
update-ca-certificates
आमतौर पर root यूज़र मांगता है। - पैकेज डिपेंडेंसी: कंटेनर में
ca-certificates
package औरupdate-ca-certificates
कमांड हो। ऊपर स्क्रिप्ट apt बेस्ड इमेज के लिए setup करता है। - Alpine के लिए: Alpine में कमांड:
apk add --no-cache ca-certificates && update-ca-certificates
कौन सी विधि चुनें?
- कस्टम इमेज बना सकते हों और सब जगह ट्रस्ट चाहिए: विधि 1 सबसे अच्छी।
- इमेज न बनानी हो, सिर्फ ऐप लेवल पर ट्रस्ट सेट करना हो: विधि 2 सुविधाजनक है।
- इमेज नहीं बनानी, फिर भी सिस्टम लेवल ट्रस्ट चाहिए: विधि 3 बढ़िया है।
पब्लिक CA (जैसे Let’s Encrypt) द्वारा जारी सर्टिफिकेट के लिए:
अगर आपके ServBay वेबसाइट में पब्लिक CA से सर्टिफिकेट मिला है, तो लगभग सभी डिफॉल्ट Docker इमेज पहले से ही इन्हें ट्रस्ट करती हैं — एक्स्ट्रा सेटअप आवश्यक नहीं।
Q5: मैं ServBay का उपयोग Docker कंटेनर में चल रहे ऐप के लिए कस्टम डोमेन और रिवर्स प्रॉक्सी हेतु कैसे करूं?
अगर आपने Docker कंटेनर (जैसे Node.js ऐप जो 3000 पोर्ट पर सुन रहा है) सेटअप किया है और चाहते हैं कि वह कस्टम डोमेन (जैसे myapp.servbay.demo
) से ब्राउज़र पर खुले—और SSL सुविधा ServBay देखे—तो आप निम्न स्टेप्स अपनाएं:
स्टेप्स:
Docker कंटेनर चलाएं और उसके पोर्ट को होस्ट की
127.0.0.1
से मैप करें: सुनिश्चित करें आपका कंटेनर एप्लिकेशन पोर्ट को macOS होस्ट के किसी पोर्ट (जैसे 3001) पर सिर्फ127.0.0.1
पर मैप करे, ताकि एक्सटर्नल नेटवर्क सुरक्षा बनी रहे।bash# उदाहरण: कंटेनर एप्लिकेशन 3000 पोर्ट सुन रहा है, जबकि होस्ट पर 127.0.0.1:3001 है docker run -d -p 127.0.0.1:3001:3000 your-docker-app-image
1
2अब एप्लिकेशन
http://127.0.0.1:3001
से एक्सेस हो सकता है।ServBay में नया साइट जोड़ें और रिवर्स प्रॉक्सी सेट करें:
- ServBay एडमिन खोलें।
- "Add Website"/"साइट जोड़ें" दबाएँ।
- डोमेन: जैसे
myapp.servbay.demo
। - Website Type: ड्रॉपडाउन में "रिवर्स प्रॉक्सी" चुनें।
- IP पता: डालें
127.0.0.1
। - पोर्ट: कंटेनर का होस्ट पोर्ट (जैसे 3001)।
- "Save"/"ऐड करें" दबाएँ।
(वैकल्पिक) SSL सेट करें: वेबसाइट जोड़ने के बाद, उसकी सेटिंग में जाएं और SSL चालू करें। ServBay Let’s Encrypt आदि का सर्टिफिकेट अपने-आप हैंडल कर लेता है, या आप ServBay User CA/or Public CA चुन सकते हैं। ServBay SSL termination खुद संभालता है; ServBay से Docker तक कनेक्शन आमतौर पर नॉर्मल HTTP (
http://127.0.0.1:3001
) होगा।टेस्ट करें: अब अपने ब्राउज़र में
http://myapp.servbay.demo
याhttps://myapp.servbay.demo
(अगर SSL है) खोलें। ServBay रिक्वेस्ट को कंटेनर ऐप तक भेज देगा।
वर्कफ़्लो संक्षेप: यूज़र ब्राउज़र ->
https://myapp.servbay.demo
->
ServBay (SSL टर्मिनेशन, रिवर्स प्रॉक्सी) ->
http://127.0.0.1:3001
(होस्ट पर) ->
कॉन्टेनर ऐप।
सारांश
ServBay macOS पर लोकल वेब डेवेलपमेंट को बहुत ही सुविधाजनक बनाता है। Docker के साथ सर्वबे का उपयोग करते समय:
- Docker कंटेनर से ServBay वेबसाइट एक्सेस के लिए — कंटेनर में वेबसाइट डोमेन को
host-gateway
से मैप करें (extra_hosts
/--add-host
), जिससेHost
हेड भी सही जाए और SNI प्रॉब्लम न हो। - Docker कंटेनर से ServBay डेटाबेस या अन्य non-HTTP सर्विस एक्सेस के लिए — सामान्यत:
host.docker.internal
होस्टनेम सबसे आसान और असरदार है। - ServBay User CA वाले SSL सर्टिफिकेट को कंटेनर में ट्रस्टेड बनाने के लिए — CA सर्टिफिकेट को इमेज में कॉपी करें और ट्रस्ट स्टोर अपडेट करें (या रनटाइम/एप्लिकेशन लेवल पर भरोसा सेट करें)।
- Docker कंटेनर में चल रहे ऐप के लिए ServBay रिवर्स प्रॉक्सी सेट करने के लिए — ServBay में "रिवर्स प्रॉक्सी" वेबसाइट टाइप चुनें, होस्ट की
127.0.0.1
और कंटेनर पोर्ट सेट करें।
हमेशा यह सुनिश्चित करें कि ServBay (web server, database आदि) के सभी संबंधित सॉफ़्टवेयर और आपके Docker कंटेनर सही कॉन्फ़िगर और चालू हों।