Configuration as code
Where in the admin: System › Settings › Import/Export (
/agent/config)। सर्वर पर: कमांडnexcmp config export,planऔरapply, औरnexcmp admin <tool>।
यह क्या करता है
आपकी पैनल कॉन्फ़िगरेशन (ब्रैंडिंग, सामान्य सेटिंग्स, ईमेल, टेलीग्राम अलर्ट, मॉड्यूल, मुद्रा, पेमेंट गेटवे, सीमाएं, ज़ोन, प्लान, AI प्रोवाइडर और कानूनी पेज) को एक YAML फ़ाइल के रूप में सहेजा जा सकता है। आप फ़ाइल को खुद संपादित कर सकते हैं, किसी AI सहायक से इसे संपादित करने के लिए कह सकते हैं, इसे वर्शन कंट्रोल में रख सकते हैं, और इसे उसी या किसी अन्य पैनल पर लागू कर सकते हैं। कुछ भी बदलने से पहले आपको हमेशा अंतरों की एक सूची दिखाई देती है। सीक्रेट्स को कभी भी फ़ाइल में नहीं लिखा जाता है।
इसका उपयोग किसी सेटअप को दूसरे इंस्टॉलेशन पर क्लोन करने, लाइव होने से पहले बदलावों की समीक्षा करने, गलती के बाद सेटिंग्स को रीस्टोर करने, या किसी AI को एक पूरा कॉन्फ़िगरेशन प्रस्तावित करने देने के लिए करें जिसे आप एक दस्तावेज़ के रूप में पढ़ते हैं।
आवश्यकताएं
| आइटम | आवश्यकता |
|---|---|
| NexCMP | 1.4.0 या नया। |
| कमांड लाइन | आप पैनल सर्वर पर root हैं (sudo का उपयोग करें)। कमांड अपने आप पैनल से एक अस्थायी की (15 मिनट, सभी स्कोप) मांगती है। इसके बजाय एक संकीर्ण की का उपयोग करने के लिए, NEXCMP_KEY को admin API key पर सेट करें और इसे sudo के माध्यम से बनाए रखें, उदाहरण के लिए sudo --preserve-env=NEXCMP_KEY nexcmp config plan -f nexcmp.yaml। |
| एडमिन पेज | एडमिन में साइन इन किया हुआ है। डेमो पैनल पर पेज रीड-ऑनलाइन है। |
| Secrets | लागू करते समय आपूर्ति किए गए मान (Secrets देखें); कभी भी फ़ाइल के अंदर नहीं। |
एक्सपोर्ट, एडिट, प्रीव्यू, अप्लाई
वर्तमान कॉन्फ़िगरेशन एक्सपोर्ट करें:
bashsudo nexcmp config export -o nexcmp.yaml-oके बिना YAML को स्क्रीन पर प्रिंट किया जाता है।nexcmp.yamlसंपादित करें (नीचे दिया गया उदाहरण देखें)। शीर्ष परversion: 1रखें।पूर्वावलोकन करें कि क्या बदलेगा। इससे कुछ नहीं बदलता:
bashsudo nexcmp config plan -f nexcmp.yamlप्रत्येक लाइन अनुभाग, आइटम, फ़ील्ड और
old → newदिखाती है।$के रूप में चिह्नित लाइनें बिलिंग अनुभागों से संबंधित हैं (Billing sections देखें)। यदि पैनल पहले से ही फ़ाइल से मेल खाता है तो आपको "No changes" दिखाई देता है।लागू करें।
--yesके बिना कमांड एक ड्राय रन है और केवल वही सूची प्रिंट करती है:bashsudo nexcmp config apply -f nexcmp.yaml --yesपरिणाम पढ़ें:
applied,pending(आपकी पुष्टि की प्रतीक्षा कर रहा है),skippedऔरerrors।
| विकल्प | अर्थ |
|---|---|
-f <file> | YAML फ़ाइल (plan और apply के लिए आवश्यक)। |
--yes | वाकई लागू करें। इसके बिना apply एक ड्राय रन है। |
--confirm-billing | बिलिंग अनुभाग (payments, currency, plans) भी लागू करें। इसके बिना उन्हें छोड़ दिया जाता है। |
--section <name> | केवल इस अनुभाग को लागू करें। कई के लिए विकल्प को दोहराएं। |
-o <file> | export के साथ: YAML को किसी फ़ाइल में लिखें। |
जब सब कुछ लागू हो जाता है या कुछ नहीं बदलता है तो निकास कोड 0 होता है, त्रुटि लौटने पर 1, उपयोग या की त्रुटि के लिए 2 होता है।
Secrets
फ़ाइल में सीक्रेट्स के बजाय संदर्भ होते हैं, जैसे password: secret://smtp_password। लागू करने के समय मान NEXCMP_SECRET_ नामक पर्यावरण चर और बड़े अक्षरों में संदर्भ नाम से आता है:
bash
sudo -i
read -rs NEXCMP_SECRET_SMTP_PASSWORD && export NEXCMP_SECRET_SMTP_PASSWORD
read -rs NEXCMP_SECRET_STRIPE_SECRET_KEY && export NEXCMP_SECRET_STRIPE_SECRET_KEY
nexcmp config apply -f nexcmp.yaml --yes --confirm-billingयदि किसी संदर्भ का कोई मान नहीं है, तो पैनल में पहले से सहेजा गया सीक्रेट सुरक्षित रखा जाता है। एक सीक्रेट जिसे कभी नहीं सहेजा गया और आपूर्ति नहीं की गई है, वह खाली रहता है।
| संदर्भ का नाम | यह कहाँ जाता है |
|---|---|
smtp_password | email.smtp.password |
telegram_bot_token | telegram.bot_token |
stripe_secret_key, stripe_webhook_secret | payments.stripe |
paypal_client_secret | payments.paypal.client_secret |
binance_api_key, binance_api_secret | payments.crypto |
sepay_api_token, sepay_webhook_secret | payments.bank |
ai_provider_key | ai_provider.api_key |
उदाहरण फ़ाइल
yaml
# NexCMP configuration. Preview: nexcmp config plan -f nexcmp.yaml
version: 1
branding:
name: Example Cloud
primary: "#1677ff"
currency: usd
seller_name: Example Cloud LLC
settings:
brand_name: Example Cloud
support_email: support@example.com
default_lang: en
invoice_prefix: EX
company_name: Example Cloud LLC
company_address: "1 Example Street, New York, NY"
min_topup_cents: 500
email:
smtp:
host: smtp.example.com
port: 587
security: starttls
username: mailer@example.com
password: secret://smtp_password
from_email: no-reply@example.com
from_name: Example Cloud
reply_to: support@example.com
telegram:
enabled: true
chat_id: "123456789"
bot_token: secret://telegram_bot_token
modules:
s3: true
k8s: false
currency:
site_currency: usd
manual_rate_vnd: 0 # 0 = automatic
payments:
stripe:
mode: test
publishable_key: pk_test_XXXX
secret_key: secret://stripe_secret_key
webhook_secret: secret://stripe_webhook_secret
bank:
bank_code: BANK
account_number: "0000000000"
account_name: EXAMPLE CLOUD LLC
prefix: EX
api_token: secret://sepay_api_token
channels:
pay_card_enabled: true
quotas:
quota_enabled: true
quota_max_vms_24h: 5
quota_max_vms_30d: 30
zones:
- slug: new-york
name: New York
country: US
city: New York
enabled: true
is_default: true
plans:
- slug: vps-1c-1g
name: 1 vCPU, 1 GB RAM, 25 GB
cpu: 1
ram_mb: 1024
disk_gb: 25
hourly_usd: 0.0112
cs_offering_id: OFFERING_ID
enabled: true
visible: true
ai_provider:
enabled: true
name: Example AI
base_url: https://api.example.com/v1
model: example-model
fallback_models: [example-model-mini]
reasoning_effort: low
api_key: secret://ai_provider_key
legal:
terms:
en: |
# Terms of service
Your terms in simple markdown (no HTML).
privacy:
en: |
# Privacy policy
Your policy in simple markdown (no HTML).एक फ़ाइल में अनुभागों का कोई भी सबसेट हो सकता है। जिस अनुभाग को आप छोड़ देते हैं उसे छुआ नहीं जाता है। 1 MB से बड़ी फ़ाइल, एक गुम version: 1, एक अलग वर्शन नंबर या एक अज्ञात अनुभाग को कुछ भी चलने से पहले अस्वीकार कर दिया जाता है।
Sections
| सेक्शन | यह क्या नियंत्रित करता है | नोट्स |
|---|---|---|
branding | ब्रैंड नाम (60 वर्णों तक), प्राथमिक रंग, प्रदर्शन मुद्रा (usd या vnd), विक्रेता का नाम। | लोगो फ़ाइल का हिस्सा नहीं हैं; branding page का उपयोग करें। |
settings | सामान्य सेटिंग्स की एक निश्चित सूची: brand_name, support_email, support_telegram_url, default_lang, require_email_verified, min_topup_cents, max_topup_cents, invoice_prefix, company_name, company_address, company_tax_id, auto_destroy_days, low_balance_cents। | अन्य कीज़ को अनदेखा कर दिया जाता है। |
email.smtp | SMTP होस्ट, पोर्ट, सुरक्षा (starttls, tls, none), उपयोगकर्ता, पासवर्ड, प्रेषक का नाम और पता, रिप्लाई-टू। | SMTP और ई-मेल टेम्प्लेट। होस्ट, पोर्ट या सुरक्षा बदलने के लिए फिर से पासवर्ड की आवश्यकता होती है। |
telegram | अलर्ट चैनल चालू या बंद, चैट आईडी, बॉट टोकन। | Telegram notifications। |
modules | वैकल्पिक मॉड्यूल चालू या बंद (key: true/false)। | केवल वे कुंजियाँ जिन्हें पैनल आपको स्विच करने देता है। Modules देखें। |
currency | प्रदर्शन मुद्रा और मैन्युअल USD से VND दर (0 स्वचालित, अन्यथा 15000 से 50000)। | बिलिंग अनुभाग। Currency and exchange rates देखें। |
payments | stripe, paypal, crypto, bank क्रेडेंशियल्स और channels स्विच (pay_card_enabled, pay_wallets_enabled, pay_alipay_enabled, pay_paypal_enabled, pay_usdt_enabled, pay_sepay_enabled)। | बिलिंग अनुभाग। Payment channels देखें। |
quotas | quota_* सीमाएँ। | Quotas देखें। |
zones | slug द्वारा ज़ोन (आवश्यक: slug, name, country; वैकल्पिक city, enabled, is_default)। | नए ज़ोन बनाए जाते हैं। पहले से मौजूद ज़ोन फ़ाइल द्वारा बदला नहीं जाता है। Zones देखें। |
plans | slug द्वारा योजनाएँ (आवश्यक: slug, name, cpu, ram_mb, disk_gb, hourly_usd; वैकल्पिक cs_offering_id, backend_id, zone_id, enabled, visible, sort, description)। | बिलिंग अनुभाग। नई योजनाएँ बनाई जाती हैं, मौजूदा योजनाओं को स्लग द्वारा अपडेट किया जाता है। कीमतें प्रति घंटे USD में हैं। Plans देखें। |
ai_provider | पैनल AI प्रदाता जिसका उपयोग ग्राहक AI Chat और AI Agent द्वारा करते हैं। | AI provider। |
legal | प्रति भाषा नियम और गोपनीयता पाठ (en, vi)। | Legal pages। |
लागू करने का क्रम ऊपर दिया गया क्रम है: योजनाओं से पहले बुनियादी ढाँचे जैसी वस्तुएँ।
याद रखने योग्य नियम
- आइडेम्पोटेंट (Idempotent)। एक ही फ़ाइल को दो बार लागू करने से दूसरी बार कुछ नहीं बदलता।
plan"No changes" दिखाता है। - कोई विलोपन नहीं। फ़ाइल कभी भी ज़ोन, योजना या सेटिंग को नहीं हटाती है। फ़ाइल से प्रविष्टि हटाने से पैनल जैसा है वैसा ही रहता है।
- सामान्य सुरक्षा नियम अभी भी लागू होते हैं। कमांड लाइन से प्रत्येक परिवर्तन को API परिवर्तन के समान जाँच से भेजा जाता है: स्कोप और IP नियम। जिस परिवर्तन के लिए पुष्टिकरण की आवश्यकता होती है (उदाहरण के लिए साइट-व्यापी स्विच), उसे लागू किए जाने के बजाय पूर्वावलोकन के साथ
pendingके तहत रिपोर्ट किया जाता है, जब तक कि आप--confirm-billingपास न करें, जो उन सभी की पुष्टि करता है। - AI क्लाइंट बिलिंग को अनलॉक नहीं कर सकते। जब किसी MCP क्लाइंट द्वारा
config_applyको कॉल किया जाता है, तोconfirm_billingको अनदेखा कर दिया जाता है; धन परिवर्तन आपकी प्रतीक्षा करते हैं। - लागू करने से पहले जाँच करें। JSON Schema प्रत्येक फ़ील्ड का वर्णन करता है। अपने एडिटर को इसकी ओर इंगित करें, या इसे किसी AI को दें ताकि वह वैध YAML लिख सके:
https://cloud.example.com/v1/admin/agent/config/schema.json(सार्वजनिक रूप से पठनीय)।
बिलिंग अनुभाग
payments, currency और plans कीमतों या धन पथों को बदलते हैं। nexcmp config apply --yes उन्हें छोड़ देता है जब तक कि आप --confirm-billing न जोड़ें; फिर उन्हें skipped ("billing section - pass confirm_billing") के तहत सूचीबद्ध किया जाता है। फ़्लैग आपकी पुष्टिकरण है: इसके साथ, फ़ाइल में हर बिलिंग परिवर्तन (और कोई अन्य परिवर्तन जिसके लिए पुष्टिकरण की आवश्यकता होगी) दूसरे संकेत के बिना लागू किया जाता है। पहले plan चलाएँ और $ के रूप में चिह्नित प्रत्येक पंक्ति को पढ़ें।
जब किसी AI (MCP क्लाइंट या AI Chat में config_apply टूल) द्वारा समान फ़ाइल लागू की जाती है, तो फ़्लैग को अनदेखा कर दिया जाता है, और इसके बजाय धन परिवर्तन आपकी स्वीकृति की प्रतीक्षा करते हैं।
Import/Export पेज का उपयोग करें
- System › Settings › Import/Export खोलें।
- Export के तहत Get current configuration पर क्लिक करें, फिर
nexcmp.yamlको सहेजने के लिए Download .yaml पर क्लिक करें। गुप्त कुंजियाँ प्लेसहोल्डर के रूप में दिखाई देती हैं। - Import के तहत कोई फ़ाइल चुनें, उसे बॉक्स में खींचें, या YAML पेस्ट करें।
- वैकल्पिक: Secrets that come with it (not in the file) खोलें और प्रत्येक संदर्भ के लिए एक नाम और मान जोड़ें, उदाहरण के लिए
smtp_password। - Preview changes पर क्लिक करें। तालिका परिवर्तनों को अनुभागों द्वारा समूहीकृत करती है; धन-संबंधी अनुभागों में "Money-related" टैग होता है। जिन अनुभागों को आप नहीं चाहते हैं, उन्हें अनटिक करें।
- यदि धन-संबंधी अनुभाग सूचीबद्ध हैं, तो Also apply money-related changes (prices, payment gateways, balances) पर टिक करें। टिक के बिना उन्हें छोड़ दिया जाता है।
- Apply selected पर क्लिक करें। परिणाम दिखाता है कि क्या लागू किया गया, छोड़ा गया या विफल रहा। एक परिवर्तन जिसे पुष्टि की प्रतीक्षा के रूप में लौटाया जाता है, एक पुष्टिकरण कार्ड के रूप में दिखाई देता है; उस पर Confirm दबाएँ।
शीर्ष दाईं ओर JSON Schema बटन स्कीमा खोलता है।


कमांड लाइन से कोई भी टूल चलाएँ
nexcmp admin वही टूल चलाता है जो AI सहायक हैं (टूल सूची) और JSON प्रिंट करता है:
bash
sudo nexcmp admin tools # name, scope and title of every tool
sudo nexcmp admin system_health
sudo nexcmp admin customers_search q=customer@example.com
sudo nexcmp admin settings_update --json '{"values":{"support_email":"support@example.com"}}'तर्क key=value युग्म हैं (मानों को JSON के रूप में पढ़ा जाता है जब वे पार्स होते हैं, अन्यथा पाठ के रूप में) या एक --json '{...}' ऑब्जेक्ट। यदि कार्रवाई को पुष्टि की आवश्यकता है, तो कमांड पूर्वावलोकन प्रिंट करता है और निकास कोड 3 और "Nothing changed" के साथ रुक जाता है। पूर्वावलोकन पढ़ें, फिर इसे लागू करने के लिए --yes के साथ वही कमांड फिर से चलाएँ। रूट के रूप में चलाने पर कमांड को सभी स्कोप के साथ 15 मिनट की कुंजी मिलती है, इसलिए पुष्टिकरण चरण आपका सुरक्षा उपाय है; NEXCMP_KEY के साथ कुंजी के अपने स्कोप लागू होते हैं।
सत्यापित करें
sudo nexcmp config plan -f nexcmp.yamlके ठीक बादapply --yes"No changes" प्रिंट करता है।- एडमिन में, आपके द्वारा बदले गए पेज नए मान दिखाते हैं, और Logs › Admin actions परिवर्तनों को सूचीबद्ध करता है।
- उसी फ़ाइल को दोबारा लागू करने से कुछ नहीं बदलता।
Limits & notes
- यह फ़ाइल ऊपर दी गई सेटिंग्ज़ को कवर करती है, ग्राहकों, सर्वर, इनवॉइस या बुनियादी ढांचे के स्रोतों (CloudStack और Proxmox कनेक्शन) को नहीं। इन्हें AI Chat या व्यवस्थापक पृष्ठों के माध्यम से कनेक्ट करें।
- ज़ोन और प्लान
slugद्वारा मिलाए जाते हैं। फ़ाइल में किसी स्लग का नाम न बदलें: ऐसा करने पर वह एक नई प्रविष्टि के रूप में बन जाएगा। - जिस प्लान का उपयोग ग्राहक पहले से कर रहे हैं, उसका आकार नहीं बदला जा सकता; इसके बजाय एक नया प्लान बनाएं।
- निर्यात की गई फ़ाइलों को निजी रखें, भले ही उनमें कोई गोपनीय जानकारी न हो: उनमें आपके मूल्य, पते और खाते के नाम सूचीबद्ध होते हैं।
ट्रबलशूटिंग
| लक्षण | कारण | सुधार |
|---|---|---|
missing version: 1 | फ़ाइल इससे शुरू नहीं होती: version: 1 | इसे जोड़ें। |
unsupported version 2 | फ़ाइल में कोई अन्य वर्ज़न नंबर है | यह पैनल केवल वर्ज़न 1 को पढ़ता है। |
unknown section 'x' (known: ...) | वर्तनी की अशुद्धि वाला या असमर्थित टॉप-लेवल की (key) | ऊपर दिए गए अनुभागों का उपयोग करें। |
YAML error: ... | अमान्य YAML (इंडेंटेशन, टैब) | संदेश में बताई गई लाइन को ठीक करें। |
config is larger than 1 MB | फ़ाइल बहुत बड़ी है | इसे विभाजित करें और --section का उपयोग करें। |
no API key: set NEXCMP_KEY=ak_... or run as root on the server | कमांड को कोई की (key) नहीं मिली | sudo के साथ चलाएं, या NEXCMP_KEY का निर्यात करें और sudo के माध्यम से रखें। |
panel not reachable | पैनल सेवा डिफ़ॉल्ट पोर्ट पर नहीं चल रही है | sudo nexcmp status की जाँच करें। |
इसके अंतर्गत बिलिंग लाइनें: skipped | बिलिंग अनुभागों के लिए इसकी आवश्यकता है: --confirm-billing | फ्लैग जोड़ें और पहले $ लाइनों की समीक्षा करें। |
इसके अंतर्गत आइटम: pending | बदलाव के लिए पुष्टि की आवश्यकता है | API & AI agents, या आयात/निर्यात परिणाम खोलें, और कार्ड पर Confirm दबाएं। |
| कोई गुप्त जानकारी (secret) अपडेट नहीं की गई | कोई NEXCMP_SECRET_<NAME> मान सेट नहीं किया गया था, इसलिए सहेजी गई गुप्त जानकारी को बनाए रखा गया | चर (variable) का निर्यात करें और दोबारा लागू करें। |
errors के अंतर्गत प्रविष्टि HTTP 403 insufficient_scope के साथ | की (key) में उस अनुभाग का दायरा (scope) नहीं है | दायरे वाली की (key) का उपयोग करें, या root के रूप में चलाएं। |
errors के अंतर्गत प्रविष्टि HTTP 403 demo_read_only के साथ | डेमो पैनल | वास्तविक इंस्टॉलेशन पर लागू करें। |