Docker Compose
Docker Compose से एक ही Linux सर्वर पर पूरा, मुफ़्त Status200 इंस्टेंस चलाएँ। यह पेज आपको एक नए सर्वर से चलते हुए इंस्टेंस तक ले जाता है, फिर HTTPS, प्रोडक्शन के लिए मज़बूती, बैकअप, अपडेट और हटाने के बारे में बताता है। इसके बजाय Status200 के अपने कोड पर काम करने के लिए देखें स्थानीय विकास।
यह कैसे काम करता है
Docker Compose, Status200 के हर हिस्से को आपके सर्वर पर कंटेनर के रूप में चलाता है। सारा ट्रैफ़िक ingress कंटेनर से आता है, जो उसे app तक भेजता है। ऐप अपना डेटा PostgreSQL, ClickHouse और Valkey में रखता है। साथ आने वाला प्रोब आपके मॉनिटरों की जाँच चलाता है और ingress के ज़रिए नतीजे वापस भेजता है।
Docker Compose डिप्लॉयमेंट
| सेवा | इमेज | यह क्या करती है |
|---|---|---|
ingress | status200/nginx | पोर्ट 80 और 443 पर सारा ट्रैफ़िक लेती है और उसे ऐप तक भेजती है। जब Status200 सर्टिफ़िकेट संभालता है, तब HTTPS देती है। |
app | status200/app | डैशबोर्ड, API, स्टेटस पेज, टेलीमेट्री इनजेस्ट और बैकग्राउंड वर्कर। |
probe-1 | status200/probe | एक ग्लोबल प्रोब जो आपके मॉनिटरों की जाँच चलाता है। यह होस्ट का नेटवर्क इस्तेमाल करता है। |
runner | status200/runner | इंस्टेंस का Runner, जो AI से कोड फ़िक्स चलाता है। यह होस्ट का नेटवर्क इस्तेमाल करता है। |
postgres | postgres:15 | कॉन्फ़िगरेशन और स्थिति: मॉनिटर, इंसिडेंट, उपयोगकर्ता। postgres वॉल्यूम में रखा जाता है। |
clickhouse | clickhouse/clickhouse-server:26.7 | टेलीमेट्री: लॉग, मेट्रिक्स, ट्रेस और एक्सेप्शन। clickhouse वॉल्यूम में रखी जाती है। |
valkey | valkey/valkey:9.1-alpine | कैश और कतारें। यह डिस्क पर कुछ नहीं रखती। |
valkey सेवा Valkey चलाती है, जो Redis 7.2 का BSD लाइसेंस वाला फ़ोर्क है, और config.env की VALKEY_* सेटिंग्स से कॉन्फ़िगर होती है। Redis प्रोटोकॉल वाला कोई भी सर्वर काम करता है — चाहें तो VALKEY_HOST को किसी मैनेज्ड Redis की ओर करें। 13.0.0 तक इन सेटिंग्स के नाम REDIS_* थे; पुराने नाम अब भी पढ़े जाते हैं, कंटेनर अब भी होस्टनेम redis पर जवाब देता है, और npm run update उन्हें दोबारा नहीं लिखता, इसलिए पुराने config.env में बदलाव की ज़रूरत नहीं है।बड़े पैमाने के प्रोडक्शन के लिए, या जब आपको हाई अवेलेबिलिटी चाहिए, इसके बजाय Kubernetes पर Helm चार्ट इस्तेमाल करें: Docker Compose एक सर्वर पर हर सेवा की एक ही कॉपी चलाता है।
ज़रूरतें
सर्वर का आकार इस हिसाब से चुनें कि आप उस पर क्या चलाएँगे। मेमोरी और डिस्क टेलीमेट्री (लॉग, मेट्रिक्स, ट्रेस) तय करती है; अपनी मात्रा पता चलने पर साइज़िंग और क्षमता नियोजन देखें।
| सुझाया गया | होमलैब के लिए न्यूनतम | |
|---|---|---|
| मेमोरी | 16 GB | 8 GB |
| CPU | 8 कोर | 4 कोर |
| डिस्क | 400 GB | 20 GB |
| सिस्टम | Ubuntu 22.04, या Debian, Ubuntu या RHEL पर आधारित कोई दूसरा Linux | वही |
| आर्किटेक्चर | x86-64 (amd64) या ARM (arm64) | वही |
होमलैब के लिए न्यूनतम निजी और प्रयोग वाले इस्तेमाल के लिए ठीक है — कुछ लोग Status200 को Raspberry Pi पर चलाते हैं।
आपको ये भी चाहिए:
- Docker, Docker Compose v2 प्लगइन (
docker composeकमांड) के साथ। - Git, Status200 लाने के लिए।
- Node.js और npm, जो Docker Compose को लपेटने वाली
npm startऔरnpm run updateस्क्रिप्ट चलाते हैं। - सर्वर पर ख़ाली पोर्ट 80 और 443। नीचे की तालिका होस्ट पर Status200 के इस्तेमाल किए हर पोर्ट की सूची देती है।
| होस्ट पोर्ट | किसके द्वारा इस्तेमाल | सेटिंग | किस काम का |
|---|---|---|---|
| 80 | ingress | ONEUPTIME_HTTP_PORT | डैशबोर्ड, API, टेलीमेट्री इनजेस्ट और Let's Encrypt सत्यापन। |
| 443 | ingress | STATUS_PAGE_HTTPS_PORT | जब Status200 सर्टिफ़िकेट संभालता है तब आपके इंस्टेंस के लिए HTTPS, और कस्टम डोमेन पर स्टेटस पेज और डैशबोर्ड के लिए। |
| 5400 | postgres | docker-compose.yml में सेट | npm run backup और restore.sh को सर्वर से ही PostgreSQL तक पहुँचने देता है। यह सिर्फ़ 127.0.0.1 पर प्रकाशित है। |
| 3874 | probe-1 | GLOBAL_PROBE_1_PORT | प्रोब का अपना सर्वर। सर्वर के बाहर किसी को इसकी ज़रूरत नहीं। |
| 3876 | runner | ONEUPTIME_RUNNER_PORT | Runner का अपना सर्वर। सर्वर के बाहर किसी को इसकी ज़रूरत नहीं। |
इंस्टॉलेशन का एक वीडियो वॉकथ्रू भी है।
Status200 इंस्टॉल करें
release ब्रांच क्लोन करें
releaseब्रांच में नवीनतम रिलीज़ की फ़ाइलें हैं।git clone --depth 1 --single-branch --branch release https://git.wilix.dev/status200/status200.git cd oneuptimeconfig.env बनाएँ
Status200 की सारी सेटिंग्स
config.envमें हैं। उदाहरण से शुरू करें:cp config.example.env config.envहोस्टनेम सेट करें
config.envखोलें औरHOSTको उस डोमेन नाम या IP पते पर सेट करें जिससे लोग Status200 तक पहुँचेंगे,http://के बिना।localhostसिर्फ़ तब रखें जब आप Status200 को अपने कंप्यूटर पर आज़मा रहे हों।HOST=status200.example.comरैंडम सीक्रेट बनाएँ
उदाहरण फ़ाइल में प्लेसहोल्डर सीक्रेट हैं जो GitHub पर सार्वजनिक हैं। हर एक को अपने अलग रैंडम मान से बदलें:
while grep -q "please-change-this-to-random-value" config.env; do sed -i "0,/please-change-this-to-random-value/{s/please-change-this-to-random-value/$(openssl rand -hex 32)/}" config.env done grep -c "please-change-this" config.envआख़िरी कमांड
0दिखाती है: कोई प्लेसहोल्डर नहीं बचा। लूप GNUsedइस्तेमाल करता है, जो हर Linux सर्वर पर होता है। यह इन सेटिंग्स को भरता है:सेटिंग यह किसकी सुरक्षा करती है ONEUPTIME_SECRETStatus200 की अपनी सेवाओं के बीच के कॉल। ENCRYPTION_SECRETStatus200 के रखे सीक्रेट, जैसे इंटीग्रेशन टोकन और SMTP पासवर्ड, और उसके जारी किए साइन-इन टोकन। DATABASE_PASSWORD,CLICKHOUSE_PASSWORD,VALKEY_PASSWORDतीनों डेटा स्टोर। REGISTER_PROBE_KEYआपके इंस्टेंस में प्रोब रजिस्टर करना। GLOBAL_PROBE_1_KEY,GLOBAL_PROBE_2_KEYवे ग्लोबल प्रोब जिन्हें Docker Compose चला सकता है ( probe-1डिफ़ॉल्ट रूप से चलता है)।STATUS200_RUNNER_KEYसाथ आने वाला Runner। GLOBAL_RUNNER_KEYसाथ आने वाला ग्लोबल Runner, जो हर प्रोजेक्ट के JavaScript चरण चलाता है। महत्वपूर्णसीक्रेट पहली बार शुरू करने से पहले सेट करें, और बाद में उन्हें न बदलें। PostgreSQL अपना पासवर्ड सिर्फ़ डेटाबेस बनाते समय लेता है, और बाद में
ENCRYPTION_SECRETबदलने से पुराने से एन्क्रिप्ट किया हर मान पढ़ा नहीं जा सकता। अगर पहली बार शुरू करते समयDATABASE_PASSWORDअब भी प्लेसहोल्डर है, तो PostgreSQL के अपना डेटाबेस बनाने से पहलेnpm startउसे एक रैंडम मान देता है।Status200 शुरू करें
npm
npm startDocker CLI
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d)पहली शुरुआत में कई मिनट लगते हैं: Docker इमेज डाउनलोड करता है और Status200 अपने डेटाबेस बनाता है।
npm startहर हिस्से के जवाब देने तक रुकता है और Status200 is up! के साथ ख़त्म होता है।पहला खाता बनाएँ
http://के बाद अपनाHOSTलगाकर खोलें (उदाहरण के लिएhttp://localhost) और साइन अप करें। नए इंस्टेंस का पहला खाता उसका मास्टर एडमिन बनता है, जो/adminपर Admin Dashboard खोल सकता है।जो कोई भी पेज तक पहुँच सकता है, वह आपके बाद साइन अप कर सकता है। इसे रोकने के लिए Admin Dashboard खोलें, सेटिंग्स > प्रमाणीकरण पर जाएँ और साइन अप करने दें बंद करें। जिन लोगों को आप किसी प्रोजेक्ट में बुलाते हैं, वे फिर भी अपना खाता बना सकते हैं।
HTTPS सेट अप करें
जब तक आप HTTPS जोड़ने के दो तरीक़ों में से एक नहीं चुनते, Status200 सादा HTTP देता है:
| Status200 को सर्टिफ़िकेट लेने दें | अपनी ख़ुद की रिवर्स प्रॉक्सी इस्तेमाल करें | |
|---|---|---|
| TLS कहाँ ख़त्म होता है | Status200 के ingress पर, एक मुफ़्त Let's Encrypt सर्टिफ़िकेट के साथ जिसे वह ख़ुद रिन्यू करता है | आपकी प्रॉक्सी पर: Caddy, Nginx या कोई लोड बैलेंसर |
| आपको क्या चाहिए | सर्वर की ओर इशारा करने वाला एक सार्वजनिक डोमेन नाम, और इंटरनेट से पहुँचने योग्य पोर्ट 80 और 443 | एक प्रॉक्सी, और आपके डोमेन का सर्टिफ़िकेट |
| सेटिंग्स | PROVISION_SSL=true, HTTP_PROTOCOL=https | PROVISION_SSL=false, HTTP_PROTOCOL=https, TRUSTED_PROXY_HOPS=2 |
| कस्टम डोमेन पर स्टेटस पेज | बिना अतिरिक्त सेटअप के काम करते हैं | आपकी प्रॉक्सी को वे डोमेन भी देने होंगे |
अगर आप स्टेटस पेज या डैशबोर्ड कस्टम डोमेन पर रखते हैं, तो TLS Status200 को संभालने देना ज़्यादा आसान है: ingress उन डोमेन के सर्टिफ़िकेट ख़ुद ऑर्डर करता है और देता है।
HTTP_PROTOCOL=https के साथ Status200 HTTPS लिंक बनाता है, साइन-इन कुकी को HTTPS पर रखता है और ब्राउज़र से कहता है कि वे आपके HOST तक सिर्फ़ HTTPS से पहुँचें। ब्राउज़र एक साल तक, उस नाम के हर पोर्ट पर, इसी का पालन करता है, इसलिए अगर कभी HOST को फिर से सादे HTTP पर जवाब देना हो, तो कुछ समय पहले HSTS_MAX_AGE_SECONDS=0 को config.env में सेट करें: ब्राउज़र अपनी अगली विज़िट पर यह नियम भूल जाते हैं।
Status200 को सर्टिफ़िकेट लेने दें
अपने डोमेन को सर्वर की ओर करें
अपने डोमेन के लिए एक DNS
Aरिकॉर्ड (IPv6 के लिएAAAA) बनाएँ, जिसका मान सर्वर का सार्वजनिक IP पता हो।AAAAरिकॉर्ड के साथ Status200 के लिए IPv6 भी चालू करें: विज़िटर के पते देखें।सर्टिफ़िकेट प्रोविज़निंग चालू करें
config.envमें ये मान सेट करें:HOST=status200.example.com PROVISION_SSL=true HTTP_PROTOCOL=httpsHOSTएक डोमेन नाम होना चाहिए: Status200 किसी IP पते याlocalhostके लिए सर्टिफ़िकेट नहीं ले सकता।नई सेटिंग्स के साथ फिर से शुरू करें
npm startअपना इंस्टेंस HTTPS पर खोलें
https://status200.example.comखोलें। Status200 शुरू होते समय सर्टिफ़िकेट ऑर्डर करता है और फिर हर घंटे उसे जाँचता है, और 30 दिन से कम बचने पर उसे रिन्यू करता है। पहला सर्टिफ़िकेट आने तक, आम तौर पर कुछ ही मिनटों में, ingress एक अस्थायी सेल्फ़-साइन्ड सर्टिफ़िकेट देता है और आपका ब्राउज़र चेतावनी दिखाता है।
अपनी ख़ुद की रिवर्स प्रॉक्सी इस्तेमाल करें
ये चरण प्रॉक्सी को उसी सर्वर पर चलाते हैं जिस पर Status200 है। अगर आपकी प्रॉक्सी किसी दूसरी मशीन पर चलती है, तो पहला चरण छोड़ दें, प्रॉक्सी को इस सर्वर के पोर्ट 80 की ओर करें, और अपने क्लाउड प्रदाता के फ़ायरवॉल से पोर्ट 80 और 443 तक सिर्फ़ प्रॉक्सी को पहुँचने दें: जो विज़िटर प्रॉक्सी को छोड़कर Status200 तक पहुँचता है, वह वह पता चुन सकता है जिससे Status200 उसे गिनता है।
ingress को पोर्ट 80 और 443 से हटाएँ
प्रॉक्सी को पोर्ट 80 और 443 चाहिए, इसलिए ingress को दूसरे पोर्ट पर ले जाएँ और उन्हें सिर्फ़ इस सर्वर के लूपबैक पते
127.0.0.1पर प्रकाशित करें, ताकि विज़िटर सिर्फ़ आपकी प्रॉक्सी से होकर Status200 तक पहुँचें। प्रोब और Runner होस्ट का नेटवर्क इस्तेमाल करते हैं औरhttp://localhostके ज़रिए Status200 तक पहुँचते हैं, इसलिए वे भी साथ में बदलते हैं:ONEUPTIME_HTTP_PORT=127.0.0.1:8080 STATUS_PAGE_HTTPS_PORT=127.0.0.1:8443 GLOBAL_PROBE_1_STATUS200_URL=http://localhost:8080 ONEUPTIME_RUNNER_STATUS200_URL=http://localhost:8080Status200 को बताएँ कि वह प्रॉक्सी के पीछे है
HOST=status200.example.com HTTP_PROTOCOL=https PROVISION_SSL=false TRUSTED_PROXY_HOPS=2HTTP_PROTOCOL=httpsसे Status200 के बनाए लिंक HTTPS इस्तेमाल करते हैं।TRUSTED_PROXY_HOPS=2आपकी प्रॉक्सी और Status200 के ingress को गिनता है, ताकि Status200 IP अनुमति-सूची और रेट लिमिट के लिए विज़िटर का असली पता पढ़े।X-Forwarded-Forमें जोड़ने वाली हर अगली प्रॉक्सी, जैसे CDN या लोड बैलेंसर, के लिए एक और जोड़ें।नए पोर्ट पर Status200 फिर से शुरू करें
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d) bash Tests/Scripts/status-check.sh localhost:8080npm startपोर्ट 80 परhttp://localhostजाँचता है, जहाँ आपकी प्रॉक्सी होगी, इसलिए नया पोर्ट ख़ुद जाँचें। स्क्रिप्ट Status200 is up! के साथ ख़त्म होती है।प्रॉक्सी कॉन्फ़िगर करें
Caddy
status200.example.com { reverse_proxy localhost:8080 }Caddy सर्टिफ़िकेट ख़ुद लेता और रिन्यू करता है, HTTP को HTTPS पर रीडायरेक्ट करता है और WebSocket कनेक्शन आगे जाने देता है। फ़ाइल बदलने के बाद Caddy को रीलोड करें, उदाहरण के लिए
sudo systemctl reload caddyसे।Nginx
map $http_upgrade $status200_connection_upgrade { default upgrade; "" close; } server { listen 80; server_name status200.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name status200.example.com; ssl_certificate /etc/letsencrypt/live/status200.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/status200.example.com/privkey.pem; # The limits Status200's own ingress uses. client_max_body_size 50M; proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $status200_connection_upgrade; location / { proxy_pass http://127.0.0.1:8080; } # MCP clients keep a stream open. location /mcp { proxy_pass http://127.0.0.1:8080; proxy_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } }सर्टिफ़िकेट के पाथ वे जगहें हैं जहाँ Certbot Let's Encrypt सर्टिफ़िकेट रखता है; अगर आपका सर्टिफ़िकेट कहीं और से आया है, तो उसके पाथ इस्तेमाल करें।
sudo nginx -t && sudo systemctl reload nginxसे फ़ाइल जाँचें और Nginx रीलोड करें।दोनों
X-Forwarded-Protoभेजते हैं, जो Status200 को बताता है कि विज़िटर HTTPS से आया। कोई भी दूसरी प्रॉक्सी भी इसे भेजे, वरना आपके कस्टम डोमेन पर स्टेटस पेज और डैशबोर्ड की साइन-इन कुकी HTTPS पर नहीं रखी जातीं।प्रॉक्सी के ज़रिए अपना इंस्टेंस खोलें
https://status200.example.comखोलें। आपको Status200 का साइन-इन पेज दिखना चाहिए, जो आपकी प्रॉक्सी के सर्टिफ़िकेट के साथ दिया गया हो।
अपनी ख़ुद की प्रॉक्सी के पीछे टेलीमेट्री OTLP/HTTP (/otlp) से भेजें। gRPC पर OTLP, Status200 तक तभी पहुँचता है जब उसका अपना ingress TLS ख़त्म करता है (PROVISION_SSL=true)।
विज़िटर के पते
Status200 हर विज़िटर को उस पते से गिनता है जिससे वह जुड़ता है: साइन-इन की सीमाएँ, प्रति पते की बाकी सीमाएँ, और स्टेटस पेज व डैशबोर्ड की IP अनुमति-सूची, सभी इसी पते को पढ़ती हैं। दो सेटअप में यह पता विज़िटर का अपना हो, इसके लिए एक सेटिंग चाहिए:
| सेटअप | सेटिंग |
|---|---|
लोग IPv6 से Status200 तक पहुँचते हैं, उदाहरण के लिए AAAA रिकॉर्ड के ज़रिए | Status200 के नेटवर्क पर IPv6, docker-compose.override.yml में |
| Status200 के सामने आपकी अपनी रिवर्स प्रॉक्सी है | TRUSTED_PROXY_HOPS=2, और ingress 127.0.0.1 पर प्रकाशित (अपनी ख़ुद की रिवर्स प्रॉक्सी इस्तेमाल करें देखें) |
Status200 के नेटवर्क पर IPv6 के बिना Docker IPv6 से आने वाले हर विज़िटर को अपने एक ही पते से Status200 तक भेजता है, और Status200 उन सभी को एक ही विज़िटर गिनता है: एक व्यक्ति के असफल साइन-इन दूसरों को बाहर कर सकते हैं। IPv6 चालू करने के लिए Docker Engine 27 या नया चाहिए (docker version आपका संस्करण दिखाता है)।
IPv6 चालू करें
docker-compose.override.ymlकोdocker-compose.ymlके बगल में बनाएँ, या जो फ़ाइल आपके पास है उसमें यह जोड़ें;npm startऔरnpm run updateउसे पढ़ते हैं:networks: oneuptime: enable_ipv6: trueStatus200 फिर से शुरू करें
npm stop npm startStatus200 रुकता है, और अपने नेटवर्क पर IPv6 के साथ फिर से शुरू होता है। आपका डेटा बना रहता है। जिस नेटवर्क से आपका अपना कोई कंटेनर, जैसे रिवर्स प्रॉक्सी, अभी जुड़ा है, उसे Docker हटा नहीं सकता: उसे पहले Status200 के नेटवर्क से अलग करें और बाद में फिर से जोड़ें। अगर
npm starthas active endpointsके साथ रुक जाए, तो उसे अलग करें औरnpm stopवnpm startफिर से चलाएँ।नेटवर्क जाँचें
docker network ls --quiet --filter name=_oneuptime | xargs docker network inspect | grep EnableIPv6यह
"EnableIPv6": true,दिखाता है।
जब कई लोग एक ही निजी नेटवर्क पते से साइन इन करते हैं, तो Admin Dashboard का Status200 स्वास्थ्य पेज यह बताता है, और वह सेटिंग भी जो इसे बदलती है।
प्रोडक्शन चेकलिस्ट
Docker Compose एक सर्वर पर हर सेवा की एक ही कॉपी चलाता है, जो छोटी टीमों और होमलैब के लिए ठीक है। इस पर निर्भर होने से पहले यह सूची देख लें।
| क्षेत्र | क्या करें |
|---|---|
| सीक्रेट | config.env का कोई भी मान अब please-change-this-to-random-value प्लेसहोल्डर नहीं है। देखें रैंडम सीक्रेट बनाएँ, और जो इंस्टॉलेशन प्लेसहोल्डर वाले DATABASE_PASSWORD के साथ शुरू हुआ, उसके लिए डेटाबेस पासवर्ड बदलें। |
| HTTPS | लोग Status200 तक HTTPS से पहुँचते हैं और HTTP_PROTOCOL=https सेट है। देखें HTTPS सेट अप करें। |
| साइन-अप | आपकी टीम के खाते बन जाने के बाद, Admin Dashboard में सेटिंग्स > प्रमाणीकरण के तहत साइन अप करने दें बंद करें। |
| फ़ायरवॉल | इंटरनेट के लिए सिर्फ़ पोर्ट 80 और 443 (और SSH) खुले हैं। Status200 PostgreSQL का पोर्ट 5400 सिर्फ़ 127.0.0.1 पर प्रकाशित करता है। आप जो भी दूसरा पोर्ट प्रकाशित करें, उसे अपने क्लाउड प्रदाता के फ़ायरवॉल से बंद करें: ufw नियम उन पोर्ट पर लागू नहीं होते जिन्हें Docker प्रकाशित करता है। |
| विज़िटर के पते | Admin Dashboard का Status200 स्वास्थ्य पेज यह नहीं बताता कि कई लोग एक ही पते से साइन इन करते हैं। विज़िटर के पते देखें। |
| बैकअप | PostgreSQL का बैकअप हर दिन होता है और कॉपियाँ सर्वर से बाहर जाती हैं। देखें बैकअप और रीस्टोर। |
| ईमेल | Admin Dashboard में सेटिंग्स > सूचनाएँ > ईमेल के तहत एक मेल सर्वर सेट है, ताकि Status200 निमंत्रण और सूचनाएँ भेज सके। देखें SMTP। |
| डिस्क | ख़ाली जगह पर नज़र रखी जाती है। ClickHouse आपकी रखी टेलीमेट्री के साथ बढ़ता है (देखें साइज़िंग और क्षमता नियोजन); हर कंटेनर का लॉग 1000 MB तक सीमित है। |
| अपडेट | Status200 हफ़्ते में कम से कम एक बार अपडेट होता है। रिलीज़ अक्सर आती हैं। देखें Status200 अपडेट करें। |
| हाई अवेलेबिलिटी | अगर इसकी ज़रूरत है, तो Kubernetes पर Helm चार्ट पर जाएँ। |
डेटाबेस पासवर्ड बदलें
PostgreSQL वही पासवर्ड रखता है जिसके साथ उसे बनाया गया था, इसलिए config.env में सिर्फ़ DATABASE_PASSWORD बदलने से Status200 अपने डेटाबेस तक नहीं पहुँच पाता। प्लेसहोल्डर के साथ शुरू हुए इंस्टॉलेशन को उसका अपना पासवर्ड देने के लिए, उसे PostgreSQL में और config.env में एक साथ बदलें, फिर Status200 को दोबारा शुरू करें:
NEW_PASSWORD=$(openssl rand -hex 32) &&
(export $(grep -v '^#' config.env | xargs) && docker compose exec -T postgres psql -U "$DATABASE_USERNAME" -d "$DATABASE_NAME" -c "ALTER USER \"$DATABASE_USERNAME\" PASSWORD '$NEW_PASSWORD'") &&
sed -i "s/^DATABASE_PASSWORD=.*/DATABASE_PASSWORD=$NEW_PASSWORD/" config.env
npm startअगर आपने DATABASE_BACKUP_PASSWORD और DATABASE_RESTORE_PASSWORD सेट किए हैं, तो उन्हें भी नया मान दें।
बैकअप और रीस्टोर
PostgreSQL में वह सब है जो आप कॉन्फ़िगर करते हैं: मॉनिटर, इंसिडेंट, स्टेटस पेज, उपयोगकर्ता। npm run backup उसका डंप Backups फ़ोल्डर की एक फ़ाइल में लिखता है।
बैकअप स्क्रिप्ट को डेटाबेस पासवर्ड दें
config.envमेंDATABASE_BACKUP_PASSWORDकोDATABASE_PASSWORDके मान पर सेट करें। स्क्रिप्टconfig.envको सादे टेक्स्ट की तरह पढ़ती है, इसलिए साथ आने वाला${DATABASE_PASSWORD}कभी भरा नहीं जाता।बैकअप चलाएँ
npm run backupयह आपका sudo पासवर्ड माँगता है और
Backups/db-<day of the month>.backupलिखता है, इसलिए रोज़ के बैकअप एक महीने पहले वालों की जगह ले लेते हैं। इसे दिन में कम से कम एक बार चलाएँ।बैकअप को सर्वर से बाहर कॉपी करें
डेटाबेस वाली डिस्क पर रखा बैकअप उस डिस्क के ख़राब होने पर नहीं बचता।
सिर्फ़ सर्वर ही PostgreSQL तक पहुँचता है: वह 127.0.0.1 के पोर्ट 5400 पर जवाब देता है। किसी दूसरी मशीन से उसका बैकअप लेने के लिए, उस मशीन से SSH टनल खोलें, फिर उसी मशीन के अपने पोर्ट 5400 से कनेक्ट करें:
ssh -N -L 5400:127.0.0.1:5400 you@status200.example.comPostgreSQL को किसी निजी नेटवर्क के पते पर प्रकाशित करें
अगर आपके निजी नेटवर्क के किसी टूल को बिना टनल के PostgreSQL तक पहुँचना है, तो उसे उस नेटवर्क में सर्वर के पते पर भी, एक अलग पोर्ट पर, प्रकाशित करें। docker-compose.yml के बगल में docker-compose.override.yml बनाएँ; npm start और npm run update उसे पढ़ते हैं:
services:
postgres:
ports:
- "10.0.0.5:5401:5432"10.0.0.5 की जगह सर्वर का अपना निजी पता लिखें, कभी कोई सार्वजनिक पता नहीं, और पहले PostgreSQL को उसका अपना पासवर्ड दें (देखें डेटाबेस पासवर्ड बदलें)। फिर npm start चलाएँ, और PostgreSQL उस पते के पोर्ट 5401 पर भी जवाब देगा।
ClickHouse आपकी टेलीमेट्री को Docker वॉल्यूम status200_clickhouse में रखता है, और कोई स्क्रिप्ट उसका बैकअप नहीं लेती। अगर वह टेलीमेट्री रखनी है, तो clickhouse-backup जैसे ClickHouse टूल से वॉल्यूम का बैकअप लें, या Status200 रुके रहने पर उसे कॉपी करें।
PostgreSQL रीस्टोर करने के लिए, config.env में DATABASE_RESTORE_* मान सेट करें: DATABASE_RESTORE_PASSWORD को DATABASE_PASSWORD के मान पर, जैसे बैकअप के लिए, और DATABASE_RESTORE_FILENAME को रीस्टोर किए जाने वाले बैकअप पर, जैसे db-31.backup। फिर bash restore.sh चलाएँ। जिस डेटाबेस में यह रीस्टोर करता है, वह पहले से मौजूद होना चाहिए; चल रहे इंस्टॉलेशन में वह होता है।
restore.sh बैकअप के हर ऑब्जेक्ट को फिर से बनाने से पहले लक्ष्य डेटाबेस से हटा देता है। यह शुरू करने से पहले पूछता है; जो डेटाबेस नाम यह दिखाए, उसे जाँच लें।Status200 अपडेट करें
पहले बैकअप लें, फिर चलाएँ:
git checkout release
git pull
npm run updatenpm run update आपका sudo पासवर्ड माँगता है, config.example.env की नई सेटिंग्स आपके config.env में जोड़ता है (आपके अपने मान बने रहते हैं), नई इमेज लाता है और Status200 को फिर से शुरू करता है। npm start की तरह, यह Status200 is up! के साथ ख़त्म होता है।
नए मेजर वर्ज़न पर जाने (उदाहरण के लिए 13 से 14) में ज़्यादा काम लग सकता है: शुरू करने से पहले Status200 अपग्रेड करना पढ़ें।
config.env में APP_TAG=release हमेशा Community Edition की नवीनतम रिलीज़ लाता है। किसी एक वर्ज़न पर रहने के लिए APP_TAG को उसके नंबर पर सेट करें, जैसे 14.0.22। Enterprise Edition के लिए टैग enterprise-release और enterprise-14.0.22 हैं।
Status200 अनइंस्टॉल करें
Status200 रोकें और उसके कंटेनर और नेटवर्क हटाएँ:
npm run downआपका डेटा status200_postgres और status200_clickhouse वॉल्यूम में बना रहता है, और oneuptime फ़ोल्डर में config.env और आपके बैकअप रहते हैं। डेटा भी मिटाने के लिए:
(export $(grep -v '^#' config.env | xargs) && docker compose down --volumes --remove-orphans)फिर oneuptime फ़ोल्डर मिटा दें।
--volumes हर मॉनिटर, इंसिडेंट, उपयोगकर्ता और सारी टेलीमेट्री हमेशा के लिए मिटा देता है। अगर इनमें से किसी की ज़रूरत पड़ सकती है, तो पहले बैकअप लें।समस्या निवारण
npm start चलाने पर Docker "permission denied" कहता है
आपका उपयोगकर्ता Docker डेमन तक नहीं पहुँच पाता। उसे docker समूह में जोड़ें, फिर साइन आउट करके दोबारा साइन इन करें:
sudo usermod -aG docker $USERपोर्ट 80 या 443 के इस्तेमाल में होने से ingress शुरू नहीं हो पाता
सर्वर पर कोई दूसरा प्रोग्राम, अक्सर कोई वेब सर्वर, पोर्ट पकड़े हुए है। उसे रोकें, या ingress को दूसरे पोर्ट पर ले जाएँ और उस प्रोग्राम को Status200 के आगे लगाएँ, जैसा अपनी ख़ुद की रिवर्स प्रॉक्सी इस्तेमाल करें में बताया गया है।
npm start "Maximum retries reached" के साथ ख़त्म होता है
npm start के आख़िर की जाँच Status200 के जवाब देने से पहले हार मान गई। पहली शुरुआत में, जब इमेज डाउनलोड होती हैं और डेटाबेस बनते हैं, जाँच के इंतज़ार से ज़्यादा समय लग सकता है। देखें कि क्या चल रहा है और लॉग पढ़ें:
npm run ps
npm run logsहर कंटेनर चलने लगे तो npm run status-check से जाँच फिर से चलाएँ। अगर आपने ingress को पोर्ट 80 से हटाया है, तो इसके बजाय उसका नया पोर्ट जाँचें: bash Tests/Scripts/status-check.sh localhost:8080।
कुछ पेज लोड होते हैं, लेकिन लाइव अपडेट या अपलोड विफल होते हैं
Status200 को HOST वाले पते पर खोलें। ingress अनुरोधों को होस्टनेम के हिसाब से भेजता है: पूरा ऐप्लिकेशन सिर्फ़ HOST और localhost से मिलता है, और कोई भी दूसरा नाम, जैसे सर्वर का IP पता, स्टेटस पेज का डोमेन माना जाता है। HOST को उस नाम पर सेट करें जो लोग इस्तेमाल करते हैं, फिर npm start चलाएँ।
साइन अप या साइन इन "Page not found" के साथ विफल होता है
साइन-अप पेज लोड होता है, लेकिन साइन अप Page not found - /identity/signup और साइन इन Page not found - /identity/login के साथ विफल होता है। अनुरोध Status200 तक HOST के अलावा किसी दूसरे होस्टनेम से पहुँचा, इसलिए ingress ने उसे किसी स्टेटस पेज के अपने डोमेन की तरह भेजा, जहाँ Status200 का अपना साइन अप और साइन इन नहीं मिलता। इन दोनों बातों की जाँच करें:
HOSTवही पता है जो लोग खोलते हैं, और अगर वे कोई पोर्ट इस्तेमाल करते हैं तो उसके साथ, जैसेstatus200.example.com:8080। इसे बदलने के बादnpm startचलाएँ।- Status200 के आगे लगी प्रॉक्सी वही होस्टनेम आगे भेजती है जो ब्राउज़र ने माँगा था। Caddy ऐसा डिफ़ॉल्ट रूप से करता है, Nginx
proxy_set_header Host $host;से, जैसा अपनी ख़ुद की रिवर्स प्रॉक्सी इस्तेमाल करें में है, और ApacheProxyPreserveHost Onसे।
PROVISION_SSL सेट करने के बाद ब्राउज़र सर्टिफ़िकेट के बारे में चेतावनी देता है
जब तक Let's Encrypt सर्टिफ़िकेट जारी नहीं करता, ingress एक अस्थायी सेल्फ़-साइन्ड सर्टिफ़िकेट देता है। अगर चेतावनी कुछ मिनट से ज़्यादा रहे, तो जाँचें कि:
HOSTएक डोमेन नाम है, IP पता याlocalhostनहीं।- डोमेन का DNS रिकॉर्ड इस सर्वर की ओर इशारा करता है।
- पोर्ट 80 इंटरनेट से पहुँच योग्य है, ताकि Let's Encrypt डोमेन सत्यापित कर सके।
जब कोई ऑर्डर विफल होता है, तो ऐप CoreSSL:EnsurePrimaryHostCertificate से शुरू होने वाली एक त्रुटि लॉग करता है, जिसके बाद वजह होती है:
(export $(grep -v '^#' config.env | xargs) && docker compose logs app) | grep -A 5 CoreSSLingress का पोर्ट बदलने के बाद साथ आने वाला प्रोब डिस्कनेक्टेड दिखाता है
Admin Dashboard प्रोब को सेटिंग्स > निगरानी > वैश्विक प्रोब के तहत दिखाता है। यह Status200 तक GLOBAL_PROBE_1_STATUS200_URL पर पहुँचता है, जो डिफ़ॉल्ट रूप से http://localhost (पोर्ट 80) है। इसे ingress के नए पोर्ट पर सेट करें, उदाहरण के लिए http://localhost:8080, ONEUPTIME_RUNNER_STATUS200_URL भी इसी तरह सेट करें, और Status200 को फिर से शुरू करें।