ServBay और Docker के साथ काम करने से जुड़े सामान्य प्रश्न (FAQ)
ServBay के साथ स्थानीय वेब विकास करते समय आप Docker कंटेनर का उपयोग करना चाह सकते हैं। इस FAQ का उद्देश्य macOS और Windows पर 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 की कार्यविधि के कारण, Docker कंटेनर host सिस्टम (macOS या Windows) की hosts फ़ाइल पढ़ता है, जिससे mysite.servbay.demo
को 127.0.0.1
पर रूट किया जाता है, और Docker अपने कंटेनर पर ही सर्विस एक्सेस करता है, जो सही सर्विस नहीं है।
प्रमुख सिद्धांत:
- जब आप ServBay में नया वेबसाइट बनाते हैं और कोई डोमेन नाम (जैसे
example.servbay.demo
) चुनते हैं, तो ServBay वह डोमेन automatic रूप से127.0.0.1
पर रूट कर देता है। - यह लोकल फ्रेंडली डोमेन से वेबसाइट एक्सेस करने का स्टैंडर्ड तरीका है। अगर ServBay द्वारा hosts फ़ाइल न बदली जाए, तो आप केवल
http://127.0.0.1:PORT
से साइट एक्सेस कर पाएंगे, कस्टम डोमेन नहीं।
क्या इसे रोका जा सकता है?
सिद्धांत रूप में, आप ServBay के जोड़े हुए रिकॉर्ड्स को manually हटा सकते हैं, लेकिन तब आप ServBay के डोमेन के जरिए अपना लोकल साइट एक्सेस नहीं कर पाएंगे, जिससे ServBay की मुख्य उपयोगिता प्रभावित होगी। ServBay का उद्देश लोकल वेबसाइट बनाना और एक्सेस करना आसान बनाना है। अगर आप ServBay से किसी डोमेन के लिए hosts एंट्री नहीं चाहते, तो उस डोमेन के लिए ServBay में वेबसाइट न बनाएं।
ज्यादातर लोकल डेवेलपमेंट में, ServBay द्वारा hosts फ़ाइल का ऑटो-मैनेजमेंट अपेक्षित है और विकास प्रक्रिया को काफी आसान बनाता है।
Q2: मेरा Docker कंटेनर कैसे ServBay द्वारा होस्ट किए गए वेबसाइट को डोमेन नेम से सही तरह एक्सेस करेगा (जैसे mysite.servbay.demo
)?
यह एक आम आवश्यकता है, पर इसे सही तरह से हैंडल करना ज़रूरी है। जब ServBay आपके host सिस्टम (macOS या Windows) पर वेबसाइट चला रहा है (जैसे mysite.servbay.demo
, जो host पर 127.0.0.1
पर resolve होता है), Docker कंटेनर के भीतर 127.0.0.1
कंटेनर खुद को ही दर्शाता है, host सिस्टम को नहीं।
गलत तरीका: URL में host.docker.internal
को सीधे hostname बनाकर ServBay वेबसाइट एक्सेस करना।
Docker Desktop for Mac/Windows में एक विशेष DNS नाम host.docker.internal
है, जो कंटेनर से host के IP को resolve करता है। पर यह सलाह दी जाती है कि इस host name से सीधे URL बनाकर ServBay वेबसाइट एक्सेस न करें (जैसे http://host.docker.internal/
, जिससे उम्मीद की जाती है कि यह mysite.servbay.demo
को resolve कर देगा)।
ऐसा करने पर, ServBay वेब सर्वर (जैसे Caddy या Nginx) को भेजे गए HTTP request का Host
हेडर host.docker.internal
होगा, न कि mysite.servbay.demo
। ServBay के वेब सर्वर को यह Host हेडर चाहिए ताकि यह सही वेबसाइट route कर सके। अगर HTTPS है, तो SNI (Server Name Indication) त्रुटि होगी, क्योंकि SSL सर्टिफिकेट mysite.servbay.demo
के लिए होता है, host.docker.internal
के लिए नहीं।
सही समाधान: Docker कंटेनर शुरू करते वक्त extra_hosts
सेट करें
ताकि कंटेनर के एप्लिकेशन mysite.servbay.demo
नाम का उपयोग कर सकें और सही Host हेड भेज सकें, कंटेनर के /etc/hosts
में एक रिकॉर्ड जोड़ना चाहिए, जिससे डोमेन को host के IP से जोड़ा जाये। यह extra_hosts
(docker-compose.yml में) या --add-host
(docker run के साथ) से किया जा सकता है — host.docker.internal
या और बेहतर, host-gateway
के साथ।
docker run का उपयोग करते हुए:
bashdocker run --add-host=mysite.servbay.demo:host-gateway ... your_image
1(
host-gateway
एक विशेष value है जिसे Docker host के internal IP में बदल देता है। Docker 20.10+ में यह आमतौर परhost.docker.internal
का low-level alias है।)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 host के IP पर रूट होगा।- HTTP
Host
हेड सही तरह सेmysite.servbay.demo
रहेगा, जिससे ServBay सही routing और वायर किए गए SSL सर्टिफिकेट प्रदान कर सकेगा।
Q3: मेरा Docker कंटेनर ServBay द्वारा मैनेज किए गए डेटाबेस (जैसे MySQL, PostgreSQL) या अन्य non-HTTP सर्विस तक कैसे पहुंचे?
वेब सर्विस के डोमेन एक्सेस से अलग, डेटाबेस या कोई अन्य TCP सर्विस (जो SNI पर निर्भर नहीं करती) के लिए, host.docker.internal
का इस्तेमाल करना वस्तव में सही और आसान तरीका है।
स्टेप्स:
- सुनिश्चित करें कि ServBay का डेटाबेस (या अन्य सर्विस) चालू है और लोकल कनेक्शन की अनुमति देता है (आमतौर पर डिफॉल्ट सेटिंग्स ठीक रहती हैं)।
- कंटेनर में, डेटाबेस कनेक्शन सेट करते समय:
- Host name/Server:
host.docker.internal
सेट करें। - Port: ServBay में दिए गए डेटाबेस के पोर्ट (जैसे, MySQL:
3306
, PostgreSQL:5432
) - User/Password: ServBay में सेट किया गया यूज़र व पासवर्ड
- Host name/Server:
उदाहरण (ServBay MySQL कनेक्शन): मान लीजिए MySQL सर्वर 3306
पर चलता है:
- Host:
host.docker.internal
- Port:
3306
- User:
your_db_user
- Password:
your_db_password
Q4: Docker कंटेनर ServBay के HTTPS साइट (ServBay User CA सर्टिफिकेट वाले) को डोमेन (extra_hosts के साथ) के जरिए एक्सेस करते समय CA ट्रस्ट कैसे करें?
मान लें आपने Q2 की तरह secure.servbay.demo
को host-gateway
से जोड़ लिया है। अगर secure.servbay.demo
ServBay User CA द्वारा साइन किया SSL सर्टिफिकेट इस्तेमाल करता है, तो Docker कंटेनर आमतौर पर इस CA को ट्रस्ट नहीं करता, जिससे SSL हाथ मिलाने में error आती है।
ServBay CA फ़ाइल लोकेशन:
- ServBay User CA root certificate:
- macOS:
/Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt
- Windows:
C:\ServBay\ssl\private\ServBay-Private-CA-ECC-Root.crt
- macOS:
- PEM फ़ाइल (CA + Mozilla root):
- macOS (ARM):
/Applications/ServBay/package/common/openssl/3.2/cacert.pem
- macOS (Intel):
/Applications/ServBay/package/common/openssl/1.1.1u/cacert.pem
- Windows:
C:\ServBay\package\common\openssl\3.3\cacert.pem
- macOS (ARM):
समाधान के विकल्प:
Docker कंटेनर में ServBay User CA ट्रस्ट करने के कई तरीके हैं—
- विधि 1: इमेज बिल्ड के दौरान सिस्टम ट्रस्ट (Dockerfile से)
- विधि 2: रनटाइम में एप्लिकेशन ट्रस्ट (वॉल्यूम व environment variable से)
- विधि 3: रनटाइम में सिस्टम ट्रस्ट (वॉल्यूम व custom startup command से)
विधि 1: बिल्ड टाइम सिस्टम लेवल ट्रस्ट (Dockerfile)
यह तरीका CA सर्टिफिकेट को Docker इमेज में सिस्टम ट्रस्ट स्टोर में जोड़ता है।
- CA फ़ाइल तैयार करें: ServBay का root certificate Docker build context (Dockerfile के पास) में रखें:
- macOS:
/Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt
- Windows:
C:\ServBay\ssl\private\ServBay-Private-CA-ECC-Root.crt
- macOS:
- 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: रनटाइम एप्लिकेशन लेवल ट्रस्ट (वॉल्यूम व वातावरण वेरिएबल से)
इसमें CA सर्टिफिकेट को वॉल्यूम से कंटेनर में माउंट कर, एप्लिकेशन को environment variable से बताएं कि इस CA को ट्रस्ट करे।
- docker-compose.yml उदाहरण:yamlसंबंधित ऐप के डॉक्युमेंटेशन में environment variable की सही जानकारी देखें।
version: '3.8' services: myapp: image: some-base-image volumes: # macOS example path - /Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt:/etc/ssl/certs/MyCustomCA.crt:ro # Windows path (adjust as needed) # - C:\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
15
16
17
विधि 3: रनटाइम सिस्टम लेवल ट्रस्ट (वॉल्यूम व विशेष स्टार्टअप कमांड से)
यह तरीका वॉल्यूम से certificate माउंट कर, कंटेनर स्टार्टअप में CA ट्रस्ट स्टोर अपडेट करता है, बिना कस्टम इमेज बनाए।
- docker-compose.yml उदाहरण (Debian/Ubuntu):yamlनोट्स:
version: '3.8' services: myapp: image: ubuntu:latest # या कोई इमेज जिसमें update-ca-certificates हो volumes: # CA को अपेक्षित सिस्टम पथ पर माउंट करें # macOS path example - /Applications/ServBay/ssl/private/ServBay-Private-CA-ECC-Root.crt:/usr/local/share/ca-certificates/ServBay-User-CA.crt:ro # Windows path (as needed) # - C:\ServBay\ssl\private\ServBay-Private-CA-ECC-Root.crt:/usr/local/share/ca-certificates/ServBay-User-CA.crt:ro # कमांड ओवरराइड करें, स्टार्टअप पर 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 privileges चाहिए, तो user: root या entrypoint script का उपयोग करें # user: root # यदि जरूरी हो तो अस्थायी रूप से 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
25
26
27- जटिलता: command/entrypoint बदलने पर स्टार्टअप लॉजिक जटिल हो सकती है, खासकर complex official images में।
- पॉवर: update-ca-certificates को अक्सर root की आवश्यकता होती है।
- पैकैजेस: ca-certificates पैकेज व update-ca-certificates कमांड कंटेनर में जरूर हो।
- स्टार्टअप समय: हर startup पर चेक/अपडेट चलेगा, जिससे startup time बढ़ सकता है।
- Alpine: इसके लिए रन करें:
apk add --no-cache ca-certificates && update-ca-certificates
कौन सा तरीका चुनें?
- अगर आप कस्टम इमेज बना सकते हैं और व्यापक ट्रस्ट चाहते हैं, तो विधि 1 सबसे अच्छा है।
- अगर इमेज बदलना न चाहें या सिर्फ ऐप ट्रस्ट चाहिए, विधि 2 आसान है।
- अगर बिना इमेज बिल्ड किए system level ट्रस्ट चाहिए, विधि 3 उपयुक्त है।
सार्वजनिक CA (जैसे Let's Encrypt) के सर्टिफिकेट के लिए: अगर ServBay वेबसाइट ACME प्रोटोकॉल से प्राप्त público सर्टिफिकेट का उपयोग करती है (जैसे Let's Encrypt), तब लगभग सभी Docker बेस images उन्हें पहले से ट्रस्ट करती हैं; कोई अतिरिक्त कदम नहीं चाहिए।
Q5: ServBay से Docker कंटेनर में रन हो रहे ऐप के लिए डोमेन सेटअप और रिवर्स प्रॉक्सी कैसे करें?
मान लें आप Docker कंटेनर में कोई ऐप (जैसे Node.js सर्विस जो 3000
पोर्ट पर listen करती है) चला रहे हैं और इसे ServBay के कस्टम डोमेन (जैसे myapp.servbay.demo
) व SSL प्रबंधन के साथ host करना चाहते हैं।
स्टेप्स:
Docker कंटेनर को पोर्ट मैप करें और host के
127.0.0.1
पर bind करें: सुनिश्चित करें कि Docker कंटेनर का ऐप पोर्ट आपके host सिस्टम (macOS/Windows) के किसी पोर्ट पर bind हो — और वह पोर्ट खास तौर पर127.0.0.1
पर bind हो ताकि वह सिर्फ लोकल से ही उपलब्ध हो, बाहरी नेटवर्क से नहीं।bash# उदाहरण: कंटेनर में ऐप 3000 पोर्ट पर, होस्ट पर 127.0.0.1:3001 पर bind docker run -d -p 127.0.0.1:3001:3000 your-docker-app-image
1
2इस उदाहरण में, host से ऐप को
http://127.0.0.1:3001
पर access किया जा सकता है।ServBay में नई वेबसाइट जोड़ें और रिवर्स प्रॉक्सी कॉन्फिगर करें:
- ServBay management का interface खोलें।
- "वेबसाइट जोड़ें" विकल्प क्लिक करें।
- डोमेन नाम: वह डोमेन डालें जिसका आप उपयोग करना चाहते हैं, जैसे
myapp.servbay.demo
। - वेबसाइट टाइप: ड्रॉपडाउन में से "रिवर्स प्रॉक्सी" चुनें।
- IP एड्रेस: इनपुट में
127.0.0.1
लिखें। - पोर्ट: वह पोर्ट डालें जिसे आपने first step में host पर bind किया है, जैसे
3001
। - सेव/जोड़ें बटन क्लिक करें।
(ऐच्छिक) SSL कॉन्फिगर करें: वेबसाइट जुड़ने पर, सेटिंग्स में जाकर SSL चालू करें। ServBay Let's Encrypt जैसे सार्वजनिक CA से स्वचालित सर्टिफिकेट प्राप्त कर सकता है, या आप ServBay User CA/Public CA भी चुन सकते हैं। ServBay SSL टर्मिनेशन संभालेगा, जबकि ServBay से Docker कंटेनर का ट्रैफिक साधारण HTTP (
http://127.0.0.1:3001
) होगा।एक्सेस टेस्ट करें: ServBay में सेटअप सेव होने के बाद, ब्राउज़र से
http://myapp.servbay.demo
याhttps://myapp.servbay.demo
(अगर SSL सेट है) से एक्सेस करें। ServBay request सीधे Docker कंटेनर में running ऐप तक भेज देगा।
वर्कफ़्लो:
यूज़र ब्राउज़र —> https://myapp.servbay.demo
—> ServBay (SSL संभालेगा, प्रॉक्सी रूल देखेगा) —> http://127.0.0.1:3001
(host port) —> Docker कंटेनर में आपका ऐप
सारांश
ServBay macOS और Windows पर लोकल वेब डेवेलपमेंट को बहुत आसान बनाता है। जब Docker के साथ इस्तेमाल करें:
- Docker कंटेनर से ServBay वेबसाइट एक्सेस के लिए
extra_hosts
या--add-host
से वेबसाइट का डोमेनhost-gateway
पर route करें, ताकि Host हेड सही रहे और SNI प्रॉब्लम न आए। - Docker कंटेनर से ServBay डेटाबेस और अन्य non-HTTP सर्विस एक्सेस के लिए
host.docker.internal
का उपयोग करें — आसान और सीधे। - Docker कंटेनर में ServBay User CA के सर्टिफिकेट ट्रस्ट कराने के लिए CA सर्टिफिकेट कॉपी कर इमेज में सिस्टम ट्रस्ट स्टोर अपडेट करें।
- ServBay से Docker कंटेनर एप्लिकेशन के लिए रिवर्स प्रॉक्सी हेतु वेबसाइट टाइप "रिवर्स प्रॉक्सी" चुनें, और Docker कंटेनर के mapped port को ServBay में पॉइंट करें।
हमेशा ध्यान रखें — ServBay के सॉफ़्टवेयर पैकेज (Web सर्वर, डेटाबेस आदि) और आपके Docker कंटेनर ठीक तरह से सेट और चल रहे हों।