---
title: Configuration as code
description: अपनी पैनल कॉन्फ़िगरेशन को YAML फ़ाइल में निर्यात करें, परिवर्तनों का पूर्वावलोकन करें और उन्हें nexcmp config या Import/Export पृष्ठ के साथ लागू करें; सीक्रेट फ़ाइल से बाहर रहते हैं और JSON Schema इसकी जाँच करता है।
url: https://nexcmp.com/hi/docs/configure-with-ai/config-as-code/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# Configuration as code {#configuration-as-code}

> **Where in the admin:** System › Settings › Import/Export (`/agent/config`)। सर्वर पर: कमांड `nexcmp config export`, `plan` और `apply`, और `nexcmp admin <tool>`।

## यह क्या करता है {#what-it-does}

आपकी पैनल कॉन्फ़िगरेशन (ब्रैंडिंग, सामान्य सेटिंग्स, ईमेल, टेलीग्राम अलर्ट, मॉड्यूल, मुद्रा, पेमेंट गेटवे, सीमाएं, ज़ोन, प्लान, AI प्रोवाइडर और कानूनी पेज) को एक YAML फ़ाइल के रूप में सहेजा जा सकता है। आप फ़ाइल को खुद संपादित कर सकते हैं, किसी AI सहायक से इसे संपादित करने के लिए कह सकते हैं, इसे वर्शन कंट्रोल में रख सकते हैं, और इसे उसी या किसी अन्य पैनल पर लागू कर सकते हैं। कुछ भी बदलने से पहले आपको हमेशा अंतरों की एक सूची दिखाई देती है। सीक्रेट्स को कभी भी फ़ाइल में नहीं लिखा जाता है।

इसका उपयोग किसी सेटअप को दूसरे इंस्टॉलेशन पर क्लोन करने, लाइव होने से पहले बदलावों की समीक्षा करने, गलती के बाद सेटिंग्स को रीस्टोर करने, या किसी AI को एक पूरा कॉन्फ़िगरेशन प्रस्तावित करने देने के लिए करें जिसे आप एक दस्तावेज़ के रूप में पढ़ते हैं।

## आवश्यकताएं {#requirements}

| आइटम | आवश्यकता |
|---|---|
| NexCMP | 1.4.0 या नया। |
| कमांड लाइन | आप पैनल सर्वर पर `root` हैं (`sudo` का उपयोग करें)। कमांड अपने आप पैनल से एक अस्थायी की (15 मिनट, सभी स्कोप) मांगती है। इसके बजाय एक संकीर्ण की का उपयोग करने के लिए, `NEXCMP_KEY` को [admin API key](https://nexcmp.com/hi/docs/configure-with-ai/admin-api-keys/) पर सेट करें और इसे sudo के माध्यम से बनाए रखें, उदाहरण के लिए `sudo --preserve-env=NEXCMP_KEY nexcmp config plan -f nexcmp.yaml`। |
| एडमिन पेज | एडमिन में साइन इन किया हुआ है। डेमो पैनल पर पेज रीड-ऑनलाइन है। |
| Secrets | लागू करते समय आपूर्ति किए गए मान ([Secrets](#secrets) देखें); कभी भी फ़ाइल के अंदर नहीं। |

## एक्सपोर्ट, एडिट, प्रीव्यू, अप्लाई {#export-edit-preview-apply}

1. वर्तमान कॉन्फ़िगरेशन एक्सपोर्ट करें:

   ```bash
   sudo nexcmp config export -o nexcmp.yaml
   ```

   `-o` के बिना YAML को स्क्रीन पर प्रिंट किया जाता है।
2. `nexcmp.yaml` संपादित करें (नीचे दिया गया [उदाहरण](#example-file) देखें)। शीर्ष पर `version: 1` रखें।
3. पूर्वावलोकन करें कि क्या बदलेगा। इससे कुछ नहीं बदलता:

   ```bash
   sudo nexcmp config plan -f nexcmp.yaml
   ```

   प्रत्येक लाइन अनुभाग, आइटम, फ़ील्ड और `old → new` दिखाती है। `$` के रूप में चिह्नित लाइनें बिलिंग अनुभागों से संबंधित हैं ([Billing sections](#billing-sections) देखें)। यदि पैनल पहले से ही फ़ाइल से मेल खाता है तो आपको "No changes" दिखाई देता है।
4. लागू करें। `--yes` के बिना कमांड एक **ड्राय रन** है और केवल वही सूची प्रिंट करती है:

   ```bash
   sudo nexcmp config apply -f nexcmp.yaml --yes
   ```

5. परिणाम पढ़ें: `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 {#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` |

## उदाहरण फ़ाइल {#example-file}

```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 {#sections}

| सेक्शन | यह क्या नियंत्रित करता है | नोट्स |
|---|---|---|
| `branding` | ब्रैंड नाम (60 वर्णों तक), प्राथमिक रंग, प्रदर्शन मुद्रा (`usd` या `vnd`), विक्रेता का नाम। | लोगो फ़ाइल का हिस्सा नहीं हैं; [branding page](https://nexcmp.com/hi/docs/customers/branding/) का उपयोग करें। |
| `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 और ई-मेल टेम्प्लेट](https://nexcmp.com/hi/docs/administration/smtp-and-emails/)। होस्ट, पोर्ट या सुरक्षा बदलने के लिए फिर से पासवर्ड की आवश्यकता होती है। |
| `telegram` | अलर्ट चैनल चालू या बंद, चैट आईडी, बॉट टोकन। | [Telegram notifications](https://nexcmp.com/hi/docs/administration/telegram-notifications/)। |
| `modules` | वैकल्पिक मॉड्यूल चालू या बंद (`key: true/false`)। | केवल वे कुंजियाँ जिन्हें पैनल आपको स्विच करने देता है। [Modules](https://nexcmp.com/hi/docs/infrastructure/modules/) देखें। |
| `currency` | प्रदर्शन मुद्रा और मैन्युअल USD से VND दर (`0` स्वचालित, अन्यथा 15000 से 50000)। | बिलिंग अनुभाग। [Currency and exchange rates](https://nexcmp.com/hi/docs/catalog/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](https://nexcmp.com/hi/docs/billing/payment-channels/) देखें। |
| `quotas` | `quota_*` सीमाएँ। | [Quotas](https://nexcmp.com/hi/docs/billing/quotas/) देखें। |
| `zones` | `slug` द्वारा ज़ोन (आवश्यक: `slug`, `name`, `country`; वैकल्पिक `city`, `enabled`, `is_default`)। | नए ज़ोन बनाए जाते हैं। पहले से मौजूद ज़ोन फ़ाइल द्वारा **बदला नहीं जाता** है। [Zones](https://nexcmp.com/hi/docs/infrastructure/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](https://nexcmp.com/hi/docs/catalog/plans/) देखें। |
| `ai_provider` | पैनल AI प्रदाता जिसका उपयोग ग्राहक AI Chat और AI Agent द्वारा करते हैं। | [AI provider](https://nexcmp.com/hi/docs/ai/ai-providers/)। |
| `legal` | प्रति भाषा नियम और गोपनीयता पाठ (`en`, `vi`)। | [Legal pages](https://nexcmp.com/hi/docs/customers/legal/)। |

लागू करने का क्रम ऊपर दिया गया क्रम है: योजनाओं से पहले बुनियादी ढाँचे जैसी वस्तुएँ।

## याद रखने योग्य नियम {#rules-to-remember}

- **आइडेम्पोटेंट (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` (सार्वजनिक रूप से पठनीय)।

### बिलिंग अनुभाग {#billing-sections}

`payments`, `currency` और `plans` कीमतों या धन पथों को बदलते हैं। `nexcmp config apply --yes` उन्हें **छोड़ देता है** जब तक कि आप `--confirm-billing` न जोड़ें; फिर उन्हें `skipped` ("billing section - pass confirm_billing") के तहत सूचीबद्ध किया जाता है। फ़्लैग आपकी पुष्टिकरण है: इसके साथ, फ़ाइल में हर बिलिंग परिवर्तन (और कोई अन्य परिवर्तन जिसके लिए पुष्टिकरण की आवश्यकता होगी) दूसरे संकेत के बिना लागू किया जाता है। पहले `plan` चलाएँ और `$` के रूप में चिह्नित प्रत्येक पंक्ति को पढ़ें।

जब किसी AI (MCP क्लाइंट या AI Chat में `config_apply` टूल) द्वारा समान फ़ाइल लागू की जाती है, तो फ़्लैग को अनदेखा कर दिया जाता है, और इसके बजाय धन परिवर्तन आपकी स्वीकृति की प्रतीक्षा करते हैं।

## Import/Export पेज का उपयोग करें {#use-the-import-export-page}

1. **System › Settings › Import/Export** खोलें।
2. **Export** के तहत **Get current configuration** पर क्लिक करें, फिर `nexcmp.yaml` को सहेजने के लिए **Download .yaml** पर क्लिक करें। गुप्त कुंजियाँ प्लेसहोल्डर के रूप में दिखाई देती हैं।
3. **Import** के तहत कोई फ़ाइल चुनें, उसे बॉक्स में खींचें, या YAML पेस्ट करें।
4. वैकल्पिक: **Secrets that come with it (not in the file)** खोलें और प्रत्येक संदर्भ के लिए एक नाम और मान जोड़ें, उदाहरण के लिए `smtp_password`।
5. **Preview changes** पर क्लिक करें। तालिका परिवर्तनों को अनुभागों द्वारा समूहीकृत करती है; धन-संबंधी अनुभागों में "Money-related" टैग होता है। जिन अनुभागों को आप नहीं चाहते हैं, उन्हें अनटिक करें।
6. यदि धन-संबंधी अनुभाग सूचीबद्ध हैं, तो **Also apply money-related changes (prices, payment gateways, balances)** पर टिक करें। टिक के बिना उन्हें छोड़ दिया जाता है।
7. **Apply selected** पर क्लिक करें। परिणाम दिखाता है कि क्या लागू किया गया, छोड़ा गया या विफल रहा। एक परिवर्तन जिसे पुष्टि की प्रतीक्षा के रूप में लौटाया जाता है, एक पुष्टिकरण कार्ड के रूप में दिखाई देता है; उस पर **Confirm** दबाएँ।

शीर्ष दाईं ओर **JSON Schema** बटन स्कीमा खोलता है।

![निर्यात किए गए YAML को रखने वाले Export कार्ड और Import कार्ड के साथ Import/Export पेज](https://nexcmp.com/hi/docs/images/configure-with-ai/config-as-code-01-import-export.webp)

![बिंग टैग और Apply selected बटन के साथ अनुभागों द्वारा समूहीकृत परिवर्तनों की पूर्वावलोकन तालिका](https://nexcmp.com/hi/docs/images/configure-with-ai/config-as-code-02-preview.webp)

## कमांड लाइन से कोई भी टूल चलाएँ {#run-any-tool-from-the-command-line}

`nexcmp admin` वही टूल चलाता है जो AI सहायक हैं ([टूल सूची](https://nexcmp.com/hi/docs/configure-with-ai/mcp-admin/#tools)) और 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` के साथ कुंजी के अपने स्कोप लागू होते हैं।

## सत्यापित करें {#verify}

1. `sudo nexcmp config plan -f nexcmp.yaml` के ठीक बाद `apply --yes` "No changes" प्रिंट करता है।
2. एडमिन में, आपके द्वारा बदले गए पेज नए मान दिखाते हैं, और **Logs › Admin actions** परिवर्तनों को सूचीबद्ध करता है।
3. उसी फ़ाइल को दोबारा लागू करने से कुछ नहीं बदलता।

## Limits & notes {#limits-notes}

- यह फ़ाइल ऊपर दी गई सेटिंग्ज़ को कवर करती है, ग्राहकों, सर्वर, इनवॉइस या बुनियादी ढांचे के स्रोतों (CloudStack और Proxmox कनेक्शन) को नहीं। इन्हें [AI Chat](https://nexcmp.com/hi/docs/configure-with-ai/ai-chat-in-admin/) या व्यवस्थापक पृष्ठों के माध्यम से कनेक्ट करें।
- ज़ोन और प्लान `slug` द्वारा मिलाए जाते हैं। फ़ाइल में किसी स्लग का नाम न बदलें: ऐसा करने पर वह एक नई प्रविष्टि के रूप में बन जाएगा।
- जिस प्लान का उपयोग ग्राहक पहले से कर रहे हैं, उसका आकार नहीं बदला जा सकता; इसके बजाय एक नया प्लान बनाएं।
- निर्यात की गई फ़ाइलों को निजी रखें, भले ही उनमें कोई गोपनीय जानकारी न हो: उनमें आपके मूल्य, पते और खाते के नाम सूचीबद्ध होते हैं।

## ट्रबलशूटिंग {#troubleshooting}

| लक्षण | कारण | सुधार |
|---|---|---|
| `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` के साथ | डेमो पैनल | वास्तविक इंस्टॉलेशन पर लागू करें। |


