---
title: Configuration as code
description: ส่งออกการกำหนดค่าพาเนลของคุณเป็นไฟล์ YAML ดูตัวอย่างการเปลี่ยนแปลง และนำไปใช้ด้วย nexcmp config หรือหน้า Import/Export โดยข้อมูลลับจะไม่ถูกบันทึกในไฟล์และมีการตรวจสอบผ่าน JSON Schema
url: https://nexcmp.com/th/docs/configure-with-ai/config-as-code/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

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

> **ตำแหน่งในแอดมิน:** System › Settings › Import/Export (`/agent/config`) บนเซิร์ฟเวอร์: คำสั่ง `nexcmp config export`, `plan` และ `apply` รวมถึง `nexcmp admin <tool>`

## What it does {#what-it-does}

คุณสามารถบันทึกการกำหนดค่าพานิลของคุณ (การสร้างแบรนด์, การตั้งค่าทั่วไป, อีเมล, การแจ้งเตือนผ่าน Telegram, โมดูล,สกุลเงิน, เกตเวย์การชำระเงิน, ขีดจำกัด, โซน, แพ็กเกจ, ผู้ให้บริการ AI และหน้าข้อกฎหมาย) ให้เป็นไฟล์ YAML ไฟล์เดียว คุณสามารถแก้ไขไฟล์ได้ด้วยตนเอง, ให้ผู้ช่วย AI ช่วยแก้ไข, เก็บไว้ในระบบควบคุมเวอร์ชัน และนำไปใช้กับพานิลเดิมหรือพานิลอื่นได้ ก่อนที่จะมีการเปลี่ยนแปลงใดๆ คุณจะเห็นรายการความแตกต่างเสมอ ข้อมูลลับจะไม่ถูกเขียนลงในไฟล์เด็ดขาด

ใช้เพื่อโคลนการตั้งค่าไปยังการติดตั้งชุดที่สอง, เพื่อตรวจสอบการเปลี่ยนแปลงก่อนนำไปใช้งานจริง, เพื่อกู้คืนการตั้งค่าหลังจากเกิดความผิดพลาด, หรือเพื่อให้ AI เสนอโครงสร้างการกำหนดค่าทั้งหมดที่คุณสามารถอ่านได้เสมือนเป็นเอกสารชุดเดียว

## ข้อกำหนด {#requirements}

| Item | Requirement |
|---|---|
| NexCMP | 1.4.0 หรือใหม่กว่า |
| บรรทัดคำสั่ง | คุณคือ `root` บนเซิร์ฟเวอร์พานิล (ใช้ `sudo`) คำสั่งจะขอคีย์ชั่วคราว (15 นาที, สิทธิ์การใช้งานทั้งหมด) จากพานิลโดยอัตโนมัติ หากต้องการใช้คีย์ที่จำกัดสิทธิ์มากกว่าแทน ให้ตั้งค่า `NEXCMP_KEY` เป็น [admin API key](https://nexcmp.com/th/docs/configure-with-ai/admin-api-keys/) และคงสิทธิ์นั้นไว้ผ่าน sudo เช่น `sudo --preserve-env=NEXCMP_KEY nexcmp config plan -f nexcmp.yaml` |
| หน้าผู้ดูแลระบบ | เข้าสู่ระบบในฐานะผู้ดูแลระบบแล้ว หน้านี้จะเป็นแบบอ่านอย่างเดียวบนพานิลทดลอง |
| ข้อมูลลับ | ค่าที่ระบุในเวลาที่ทำการปรับใช้ (ดู [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` คำสั่งจะเป็นการ **dry run** และจะพิมพ์เพียงรายการที่เหมือนกันออกมาเท่านั้น:

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

5. อ่านผลลัพธ์: `applied`, `pending` (รอการยืนยันของคุณ), `skipped` และ `errors`

| ตัวเลือก | ความหมาย |
|---|---|
| `-f <file>` | ไฟล์ YAML (จำเป็นสำหรับ `plan` และ `apply`) |
| `--yes` | ปรับใช้จริง หากไม่มีตัวเลือกนี้ `apply` จะเป็นเพียงการ dry run |
| `--confirm-billing` | ปรับใช้ส่วนการเรียกเก็บเงินด้วย (`payments`, `currency`, `plans`) หากไม่มีส่วนนี้จะถูกข้ามไป |
| `--section <name>` | ปรับใช้เฉพาะส่วนนี้เท่านั้น ทำซ้ำตัวเลือกนี้สำหรับหลายส่วน |
| `-o <file>` | ด้วย `export`: เขียนโค้ด YAML ลงในไฟล์ |

รหัสสถานะการออก (exit code) จะเป็น 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` |

## ไฟล์ตัวอย่าง {#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}

| ส่วน | สิ่งที่ควบคุม | หมายเหตุ |
|---|---|---|
| `branding` | ชื่อแบรนด์ (สูงสุด 60 ตัวอักษร), สีหลัก, สุลเงินที่แสดง (`usd` หรือ `vnd`), ชื่อผู้ขาย | โลโก้ไม่ได้เป็นส่วนหนึ่งของไฟล์; ให้ใช้ [branding page](https://nexcmp.com/th/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 and e-mail templates](https://nexcmp.com/th/docs/administration/smtp-and-emails/) การเปลี่ยนโฮสต์ พอร์ต หรือความปลอดภัยจำเป็นต้องใส่รหัสผ่านใหม่อีกครั้ง |
| `telegram` | เปิดหรือปิดช่องทางแจ้งเตือน, chat id, bot token | [Telegram notifications](https://nexcmp.com/th/docs/administration/telegram-notifications/) |
| `modules` | เปิดหรือปิดโมดูลเสริม (`key: true/false`) | เฉพาะคีย์ที่พาเนลอนุญาตให้สลับได้ ดูที่ [Modules](https://nexcmp.com/th/docs/infrastructure/modules/) |
| `currency` | สกุลเงินที่แสดงและอัตราแลกเปลี่ยน USD เป็น VND แบบกำหนดเอง (`0` แบบอัตโนมัติ มิฉะนั้นคือ 15000 ถึง 50000) | ส่วนการเรียกเก็บเงิน ดูที่ [Currency and exchange rates](https://nexcmp.com/th/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/th/docs/billing/payment-channels/) |
| `quotas` | ขีดจำกัด `quota_*` | ดูที่ [Quotas](https://nexcmp.com/th/docs/billing/quotas/) |
| `zones` | โซนตาม `slug` (จำเป็น: `slug`, `name`, `country`; ทางเลือก `city`, `enabled`, `is_default`) | โซนใหม่จะถูกสร้างขึ้น โซนที่มีอยู่แล้วจะ **ไม่ถูกเปลี่ยนแปลง** โดยไฟล์ ดูที่ [Zones](https://nexcmp.com/th/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`) | ส่วนการเรียกเก็บเงิน แผนบริการใหม่จะถูกสร้างขึ้น แผนที่มีอยู่จะถูกอัปเดตตาม slug ราคาเป็น USD ต่อชั่วโมง ดูที่ [Plans](https://nexcmp.com/th/docs/catalog/plans/) |
| `ai_provider` | ผู้ให้บริการ AI ของพาเนลที่ใช้งานโดย AI Chat และ AI Agent ของลูกค้า | [AI provider](https://nexcmp.com/th/docs/ai/ai-providers/). |
| `legal` | ข้อกำหนดและนโยบายความเป็นส่วนตัวตามแต่ละภาษา (`en`, `vi`) | [Legal pages](https://nexcmp.com/th/docs/customers/legal/) |

ลำดับของการนำไปใช้คือลำดับด้านบน: รายการที่มีลักษณะเป็นโครงสร้างพื้นฐานก่อนแผนบริการ

## กฎที่ควรจำ {#rules-to-remember}

- **มีคุณสมบัติ Idempotent** การใช้ไฟล์เดิมซ้ำจะไม่เปลี่ยนแปลงสิ่งใดในครั้งที่สอง `plan` จะแสดง "No changes"
- **ไม่มีการลบ** ไฟล์จะไม่ลบโซน, แผนบริการ หรือการตั้งค่าใดๆ การลบรายการออกจากไฟล์จะทำให้พาเนลคงอยู่ตามเดิม
- **กฎความปลอดภัยปกติยังคงมีผล** จากบรรทัดคำสั่ง การเปลี่ยนแปลงแต่ละครั้งจะถูกส่งผ่านการตรวจสอบเดียวกับการเปลี่ยนแปลง API: ขอบเขตและกฎ IP การเปลี่ยนแปลงที่ต้องมีการยืนยัน (เช่น สวิตช์ทั่วทั้งไซต์) จะถูกรายงานภายใต้ `pending` พร้อมตัวอย่างภาพรวมแทนที่จะถูกนำไปใช้ทันที เว้นแต่คุณจะส่ง `--confirm-billing` ซึ่งจะเป็นการยืนยันทั้งหมด
- **ไคลเอนต์ AI ไม่สามารถปลดล็อกการเรียกเก็บเงินได้** เมื่อ `config_apply` ถูกเรียกโดยไคลเอนต์ MCP, `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 (เครื่องมือ `config_apply` ในไคลเอนต์ MCP หรือ AI Chat) แฟล็กนี้จะถูกละเว้น และการเปลี่ยนแปลงด้านการเงินจะต้องรอการอนุมัติจากคุณแทน

## ใช้หน้า Import/Export {#use-the-import-export-page}

1. เปิด **System › Settings › Import/Export**
2. ภายใต้ **Export** คลิก **Get current configuration** จากนั้น **Download .yaml** เพื่อบันทึก `nexcmp.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** ที่มุมบนขวาจะเปิดสคีมาขึ้นมา

![หน้า Import/Export ที่มีการ์ด Export และการ์ด Import สำหรับเก็บ YAML ที่ส่งออกแล้ว](https://nexcmp.com/th/docs/images/configure-with-ai/config-as-code-01-import-export.webp)

![ตารางตัวอย่างการเปลี่ยนแปลงจัดกลุ่มตามหมวดหมู่ พร้อมแท็กการเรียกเก็บเงินและปุ่ม Apply selected](https://nexcmp.com/th/docs/images/configure-with-ai/config-as-code-02-preview.webp)

## รันเครื่องมือใดๆ จากบรรทัดคำสั่ง {#run-any-tool-from-the-command-line}

`nexcmp admin` รันเครื่องมือเดียวกับที่ผู้ช่วย AI ใช้ ([the tool list](https://nexcmp.com/th/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` เพื่อนำไปใช้ เมื่อรันในฐานะ root คำสั่งจะได้คีย์ 15 นาทีที่มีสิทธิ์ทั้งหมด ดังนั้นขั้นตอนการยืนยันจึงเป็นมาตรการป้องกันของคุณ และเมื่อใช้ `NEXCMP_KEY` จะใช้สิทธิ์ของคีย์นั้นๆ เอง

## ตรวจสอบ {#verify}

1. `sudo nexcmp config plan -f nexcmp.yaml` ทันทีหลัง `apply --yes` จะพิมพ์ "No changes"
2. ในระบบผู้ดูแล หน้าที่คุณแก้ไขจะแสดงค่าใหม่ และ **Logs › Admin actions** จะแสดงรายการการเปลี่ยนแปลง
3. การนำไฟล์เดิมมาใช้ซ้ำจะไม่ทำให้เกิดการเปลี่ยนแปลงใดๆ

## ขีดจำกัดและหมายเหตุ {#limits-notes}

- ไฟล์นี้ครอบคลุมการตั้งค่าด้านบน ไม่รวมถึงลูกค้า เซิร์ฟเวอร์ ใบแจ้งหนี้ หรือแหล่งที่มาของโครงสร้างพื้นฐาน (การเชื่อมต่อ CloudStack และ Proxmox) ให้เชื่อมต่อสิ่งเหล่านี้ด้วย [AI Chat](https://nexcmp.com/th/docs/configure-with-ai/ai-chat-in-admin/) หรือหน้าผู้ดูแล
- โซนและแผนจะถูกจับคู่โดย `slug` ห้ามเปลี่ยนชื่อสลัก (slug) ในไฟล์ เพราะจะถูกสร้างเป็นรายการใหม่
- แผนที่ลูกค้าใช้งานอยู่แล้วจะไม่สามารถเปลี่ยนขนาดได้ ให้สร้างแผนใหม่แทน
- เก็บรักษาไฟล์ที่ส่งออกไว้เป็นความลับ แม้ว่าจะไม่มีข้อมูลลับก็ตาม เนื่องจากไฟล์ดังกล่าวแสดงรายการราคา ที่อยู่ และชื่อบัญชีของคุณ

## การแก้ Problme {#troubleshooting}

| อาการ | สาเหตุ | วิธีแก้ปัญหา |
|---|---|---|
| `missing version: 1` | ไฟล์ไม่ได้เริ่มต้นด้วย `version: 1` | เพิ่มเข้าไป |
| `unsupported version 2` | ไฟล์มีหมายเลขเวอร์ชันอื่น | แผงควบคุมนี้อ่านเฉพาะเวอร์ชัน 1 เท่านั้น |
| `unknown section 'x' (known: ...)` | คีย์ระดับบนสุดสะกดผิดหรือไม่รองรับ | ใช้ส่วนต่างๆ ด้านบน |
| `YAML error: ...` | YAML ไม่ถูกต้อง (การเยื้อง, แท็บ) | แก้ไขบรรทัดที่ข้อความระบุ |
| `config is larger than 1 MB` | ไฟล์มีขนาดใหญ่เกินไป | แบ่งไฟล์แล้วใช้ `--section` |
| `no API key: set NEXCMP_KEY=ak_... or run as root on the server` | คำสั่งไม่พบคีย์ | รันด้วย `sudo` หรือส่งออก `NEXCMP_KEY` และคงไว้ผ่าน sudo |
| `panel not reachable` | บริการแผงควบคุมไม่ได้ทำงานอยู่บนพอร์ตเริ่มต้น | ตรวจสอบ `sudo nexcmp status` |
| รายการเรียกเก็บเงินภายใต้ `skipped` | ส่วนการเรียกเก็บเงินต้องใช้ `--confirm-billing` | เพิ่มแฟล็กและตรวจสอบรายการ `$` ก่อน |
| รายการภายใต้ `pending` | การเปลี่ยนแปลงต้องได้รับการยืนยัน | เปิด **API & AI agents** หรือผลลัพธ์การ Import/Export และกด **Confirm** บนบัตร |
| ข้อมูลลับไม่ได้รับการอัปเดต | ไม่ได้ตั้งค่า `NEXCMP_SECRET_<NAME>` จึงยังคงใช้ข้อมูลลับที่บันทึกไว้เดิม | ส่งออกตัวแปรแล้วลองใช้อีกครั้ง |
| รายการภายใต้ `errors` พร้อม HTTP 403 `insufficient_scope` | คีย์ขาดสิทธิ์ (scope) สำหรับส่วนนั้น | ใช้คีย์ที่มีสิทธิ์ หรือรันในฐานะ root |
| รายการภายใต้ `errors` พร้อม HTTP 403 `demo_read_only` | แผงเดโม | ใช้กับการติดตั้งจริง |


