Helm के साथ Kubernetes पर डिप्लॉय करें
BostonIvy का Helm चार्ट सर्वर (API, MCP, CalDAV और बैकग्राउंड जॉब), उसी पते पर उसके आगे BostonIvy Web, और जल्दी शुरू करने के लिए एक बंडल्ड PostgreSQL चलाता है। सर्वर की हर रिलीज़ के साथ नया चार्ट oci://ghcr.io/ivylabsapp/charts/bostonivy पर प्रकाशित होता है।
शुरू करने से पहले
- एक Kubernetes क्लस्टर,
kubectl, और Helm 3.8 या नया, जो OCI रजिस्ट्री से चार्ट इंस्टॉल कर सकता है। - एक Ingress कंट्रोलर (उदाहरणों में ingress-nginx) और उसकी ओर इशारा करता डोमेन नेम। इनके बिना आज़माने के लिए Ingress के बिना आज़माएँ देखें।
read:packagesस्कोप वाला GitHub टोकन। इमेज और चार्ट GitHub Container Registry पर प्राइवेट पैकेज हैं।
इंस्टॉल करें
एक नेमस्पेस और प्राइवेट इमेज खींचने के लिए एक पुल सीक्रेट बनाएँ:
kubectl create namespace bostonivy kubectl -n bostonivy create secret docker-registry ghcr \ --docker-server=ghcr.io --docker-username=<आपका GitHub यूज़रनेम> --docker-password=<read:packages वाला टोकन>Helm को रजिस्ट्री में साइन इन कराएँ, ताकि वह चार्ट ला सके:
echo "$GITHUB_TOKEN" | helm registry login ghcr.io -u <आपका GitHub यूज़रनेम> --password-stdinअपनी सेटिंग एक फ़ाइल में लिखें, जैसे
values.yaml।urlज़रूरी है: ईमेल के लिंक, शेयर लिंक, और OAuth व OIDC कॉलबैक इसी का इस्तेमाल करते हैं।url: https://tasks.example.com imagePullSecrets: - name: ghcr ingress: enabled: true className: nginx annotations: # लाइव अपडेट /api/v1/realtime पर लंबे चलने वाले WebSocket हैं; अपलोड 64 MiB तक nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/proxy-body-size: 64m tls: - secretName: bostonivy-tls hosts: [tasks.example.com]bostonivy-tlsआपके डोमेन का सर्टिफ़िकेट है: आपका बनाया TLS Secret, या cert-manager का बनाया हुआ।इंस्टॉल करें:
helm install ivy oci://ghcr.io/ivylabsapp/charts/bostonivy --version 0.7.0 -n bostonivy -f values.yamlइस पेज के उदाहरणों में रिलीज़ का नाम
ivyहै, इसलिए उसके रिसोर्सivy-bostonivy-…कहलाते हैं। bostonivy-os का चेकआउट हो तो आपdeploy/helm/bostonivyसे भी इंस्टॉल कर सकते हैं।
पहला एडमिनिस्ट्रेटर बनाएँ
इंस्टॉल के बाद Helm भी ये कदम दिखाता है। पासवर्ड बिना दिखाए पढ़ा जाता है:
printf 'Password: '; read -rs PW; echo
printf '%s\n' "$PW" | kubectl -n bostonivy exec -i deploy/ivy-bostonivy-server -- bostonivy admin create-user <यूज़रनेम> <ईमेल> --admin
unset PW
सर्वर सीक्रेट का बैकअप लें
सर्वर सीक्रेट और बंडल्ड डेटाबेस का पासवर्ड इंस्टॉल के समय बनते हैं, हर अपग्रेड में बने रहते हैं, और Secret ivy-bostonivy-secrets में रखे जाते हैं, जिसे Helm अनइंस्टॉल करने पर भी नहीं हटाता। सभी साइनिंग और एन्क्रिप्शन कुंजियाँ सर्वर सीक्रेट से बनती हैं: यह खो जाए तो सबको दोबारा साइन इन करना होगा, और सहेजे गए TOTP और webhook सीक्रेट पढ़े नहीं जा सकेंगे। इसे अभी किसी सुरक्षित जगह कॉपी कर लें:
kubectl -n bostonivy get secret ivy-bostonivy-secrets -o jsonpath='{.data.auth-secret}' | base64 -d
अपना सीक्रेट इस्तेमाल करना हो तो auth.secret सेट करें, या उसे अपने मैनेज किए Secret की auth-secret की में रखकर auth.existingSecret सेट करें।
Ingress के बिना आज़माएँ
ingress.enabled बंद रहने दें, auth.cookieSecure=false सेट करें, फिर वेब सर्विस को अपनी मशीन पर फ़ॉरवर्ड करें:
kubectl -n bostonivy port-forward svc/ivy-bostonivy-web 8080:80
और http://localhost:8080 खोलें। जैसे ही BostonIvy HTTPS पर चलने लगे, auth.cookieSecure को फिर से true कर दें।
वैल्यू
| वैल्यू | डिफ़ॉल्ट | काम |
|---|---|---|
url |
ज़रूरी | वह पता जहाँ लोग BostonIvy खोलते हैं; लिंक, OAuth और OIDC कॉलबैक इसी का इस्तेमाल करते हैं |
imagePullSecrets |
[] |
प्राइवेट इमेज खींचने के पुल सीक्रेट |
auth.secret, auth.existingSecret |
अपने-आप बनता है | सर्वर सीक्रेट, सीधे दिया गया या आपके अपने Secret (की auth-secret) से |
auth.cookieSecure |
true |
HTTPS के पीछे चालू रखें; सिर्फ़ सादे http पर आज़माने के लिए बंद करें |
database.url, database.existingSecret |
बंडल्ड | बाहरी PostgreSQL 16 या नया; ख़ाली हो तो बंडल्ड वाला इस्तेमाल होता है |
postgresql.enabled |
true |
क्लस्टर में एक PostgreSQL, आज़माने या छोटे सेटअप के लिए |
mail.smtpUrl, mail.from |
ख़ाली | जैसे smtp://user:password@host:587, या log; ख़ाली हो तो ईमेल नहीं जाते |
config |
ख़ाली | TOML में सर्वर की अतिरिक्त सेटिंग, जैसे [[auth.oidc]] साइन-इन प्रोवाइडर |
server.env, server.envFrom |
[] |
कोई भी दूसरी BOSTONIVY_<सेक्शन>__<की> सेटिंग |
server.replicas |
1 |
एक से ज़्यादा के लिए S3 स्टोरेज और worker.separate चाहिए |
worker.separate, worker.replicas |
false, 1 |
बैकग्राउंड जॉब (ईमेल, webhook, रिमाइंडर, मेंटेनेंस) अलग पॉड में चलाता है |
persistence.* |
10Gi, ReadWriteOnce | लोकल स्टोरेज रहने तक अटैचमेंट और अवतार |
web.image.tag |
0.2.0 |
परोसी जाने वाली BostonIvy Web रिलीज़ |
ingress.* |
बंद | होस्ट डिफ़ॉल्ट रूप से url वाला होता है; लाइव अपडेट के लिए लंबे WebSocket रीड की अनुमति दें |
डेटाबेस
बंडल्ड PostgreSQL एक ही पॉड है, जो आज़माने और छोटे सेटअप के लिए ठीक है। प्रोडक्शन में मैनेज्ड डेटाबेस या ऑपरेटर इस्तेमाल करें, और BostonIvy को उसकी ओर पॉइंट करें:
postgresql:
enabled: false
database:
url: postgres://bostonivy:<पासवर्ड>@db.example.com:5432/bostonivy
या पता अपने Secret में रखें और database.existingSecret सेट करें। BostonIvy को PostgreSQL 16 या नया चाहिए।
ईमेल, साइन-इन और दूसरी सेटिंग
ईमेल:
mail.smtpUrlऔरmail.from।logसे ईमेल सर्वर लॉग में लिखे जाते हैं, जो आज़माने में काम आता है।TOML में सर्वर सेटिंग:
configमें TOML फ़ाइल दी जा सकती है, जैसे साइन-इन प्रोवाइडर:config: | [[auth.oidc]] id = "google" # बाक़ी फ़ील्ड bostonivy.example.toml में हैंबाक़ी सब:
server.envमेंBOSTONIVY_<सेक्शन>__<की>वेरिएबल दिए जाते हैं; bostonivy-os कीbostonivy.example.tomlमें हर सेटिंग की सूची है।
स्केल करें
लोकल रखी फ़ाइलों को छोड़कर सर्वर अपनी कोई स्थिति नहीं रखता। एक से ज़्यादा रेप्लिका के लिए:
server:
replicas: 3
env:
- name: BOSTONIVY_STORAGE__KIND
value: s3
# और bostonivy.example.toml के [storage] वाली बकेट सेटिंग
worker:
separate: true
persistence:
enabled: false
- फ़ाइलें उस वॉल्यूम के बजाय S3-संगत स्टोरेज में जाती हैं, जिसे सिर्फ़ एक पॉड माउंट कर सकता है।
worker.separateबैकग्राउंड जॉब को अलग पॉड में ले जाता है, ताकि वे हर सर्वर रेप्लिका में नहीं, बस एक बार चलें।- अगर रेप्लिका को रेट-लिमिट गिनती साझा करनी हो तो
server.envमेंBOSTONIVY_REDIS__URLसेट करें। - लाइव अपडेट, सेशन रद्द करना और प्लगइन PostgreSQL के ज़रिए रेप्लिका के बीच सिंक होते हैं; और कुछ नहीं चाहिए।
अपग्रेड और बैकअप
नई रिलीज़ के चार्ट से अपग्रेड करें:
helm upgrade ivy oci://ghcr.io/ivylabsapp/charts/bostonivy --version <नया वर्ज़न> -n bostonivy -f values.yaml
सर्वर पॉड एक-एक करके बदलते हैं, और नया वर्ज़न शुरू होते समय डेटाबेस माइग्रेट करता है। माइग्रेशन सिर्फ़ जोड़ते हैं, कभी हटाते नहीं, इसलिए बैकअप के साथ आप वापस जा सकते हैं।
तीन चीज़ों का बैकअप लें:
डेटाबेस। बंडल्ड PostgreSQL के साथ:
kubectl -n bostonivy exec ivy-bostonivy-postgresql-0 -- pg_dump -U bostonivy bostonivy > backup.sqlअटैचमेंट और अवतार: फ़ाइलों वाला वॉल्यूम, या आपका बकेट।
सर्वर सीक्रेट:
auth-secret(सर्वर सीक्रेट का बैकअप लें देखें)।