VPS Provisioning (Proxmox / Virtualizor / VMware / AutoVM / Cloud)
| فیلد | مقدار |
|------|--------|
| **نسخه** | 1.27 |
| **آخرین بروزرسانی** | 2026-09-26 |
| **مخاطب** | ادمین |
کلودهای عمومی (Hetzner، DO، Vultr، Linode، Contabo، OVH، آروان، آسیاتک، AWS، GCP، Azure): [cloud-vps-provisioning.md](./cloud-vps-provisioning.md)
---
تفکیک فیلدها
| داده | کجا | توضیح |
|------|-----|--------|
| CPU / RAM / Disk | فیلد محصول | منابع ثابت پلن |
| `hostname` | **Custom Field سفارش (اجباری)** | مشتری هنگام خرید وارد میکند → **نام VM**. روی **Proxmox/Virtualizor/VMware** همان مقدار معمولاً نام کاربری سرویس هم میشود؛ روی **کلود عمومی** (Linode، LightNode، Hetzner، …) نام کاربری ورود `root` / `Administrator` است (نه hostname) |
| `guest_username` | فیلد محصول | Proxmox: فقط اگر مشتری hostname ندهد. کلود عمومی: پیشفرض ورود (معمولاً `root`) |
| `password_type` | فیلد محصول | `auto` یا `fixed` |
| `root_password` | فیلد محصول | فقط وقتی نوع=ثابت |
| `iso` | **Custom Field سفارش** | مشتری بین چند قالب/ISO انتخاب میکند (`101:Ubuntu` یا `local:iso/ubuntu.iso:Ubuntu`) |
| `template_vmid` / `iso_image` / `osid` / `template_id` | فیلد محصول | پیشفرض اگر مشتری در سفارش انتخاب نکرد |
| `bandwidth` / `traffic` | فیلد محصول / افزونه | پهنای باند GB؛ AutoVM Cloud و Virtualizor |
---
AutoVM Cloud (WHMCS product 05.16+)
ماژول BSS با **API Cloud** همتراز بستهٔ رسمی WHMCS است (نه API کلاسیک `/api/vps/*`). مرجع: `AutoVM-WHMCS-Modules-05.16.00`.
| عمل BSS | API AutoVM |
|---------|------------|
| Create | `POST {backend}/admin/machine/smart/pool` + هدر `token` |
| Traffic بعد از ساخت | `POST .../admin/machine/traffic/{id}` |
| Suspend / Unsuspend | `.../candy/backend/machine/forceSuspend\|forceUnsuspend/{id}` |
| Terminate | `.../forceDestroy/{id}` |
| ChangePackage | `POST .../admin/machine/upgrade/{id}` (+ `reboot=active`) |
| Reinstall | `POST .../candy/backend/machine/change/{id}` (`templateId`) |
| Console | `console` + `console_route?host&port&ticket` |
فیلدهای اتصال سرور
| کلید | معنی |
|------|------|
| `host` | Backend URL کامل با scheme (مثل `http://backend.dpco.local`) — اگر scheme نباشد BSS خودش `http://` میگذارد |
| `api_key` | Admin Token (هدر `token`) |
| `console_route` | آدرس کنسول مشتری (مثل `https://panel.example.com/console`) |
**نکته LAN:** اگر Backend فقط با نام `.local` در WHMCS کار میکند، روی سرور BSS همان نام را در `/etc/hosts` به IP واقعی Backend بزنید (مثلاً `89.33.129.175 backend.dpco.local`). درخواست AutoVM **از پروکسی CURSOR رد نمیشود** و با `CURLOPT_INTERFACE` از IP خود سرور (`PROVISIONING_DIRECT_SOURCE_IP`، پیشفرض `89.44.112.5`) خارج میشود.
**وضعیت تست dpco (2026-09-26):** `backend.dpco.local` → `89.33.129.175` resolve میشود؛ خروجی از `89.44.112.5` بدون پروکسی؛ روی `.175:80` هنوز **Connection refused** است (سرویس Backend باید روشن شود). Sandbox خاموش است.
فیلدهای محصول
| کلید | معنی |
|------|------|
| `poolId` | Pool فعال (اجباری) |
| `cores` / `ram_mb` / `disk_gb` | منابع پلن |
| `cpu_limit` / `memory_limit` | سقفها (MHz / MB) |
| `traffic` یا `bandwidth` | ترافیک ماهانه GB |
| `ipv` | `ipv4` / `ipv6` / `both` |
| `template_id` | پیشفرض قالب اگر `iso` انتخاب نشد |
فیلد سفارش `iso`: نام یا شناسه قالب از لیست `candy/frontend/common/templates`.
جریان Create: `smart/pool` → ذخیره `machine_id` / `vpsid` / `vmid` → تخصیص traffic.
خرید حجم پهنای باند
افزونهٔ `bandwidth` بعد از پرداخت، `changePackage` → `upgrade` (فیلد `traffic`).
پنل مشتری
پنل بومی BSS: وضعیت، Start/Stop/Reboot، تعلیق، نصب مجدد OS، و **Control Panel** از `console_route`.
---
Proxmox VE — دو مدل تحویل
فیلد سفارش `iso` میتواند دو شکل داشته باشد:
| مقدار | معنی | جریان ساخت |
|--------|------|------------|
| `101` یا `101:Ubuntu 22.04` | VMID قالب QEMU | clone قالب + cloud-init (`ciuser` / `cipassword`) |
| `local:iso/ubuntu-24.04.iso` یا `local:iso/ubuntu-24.04.iso:Ubuntu` | فایل ISO روی استوریج Proxmox | VM خالی + دیسک + CD-ROM + boot از ISO |
نصب از ISO **تعاملی** است: ماشین روشن میشود و مشتری/ادمین از **کنسول VNC** نصبکننده را جلو میبرد. رمز مهمان در BSS ذخیره میشود ولی روی ISO خام (بدون cloud-init) اعمال نمیشود.
**نصب مجدد از ISO در پنل:** قبل از تغییر دیسک/CD-ROM سرور باید **خاموش** باشد. اگر روشن باشد، پیام «سرور باید خاموش باشد…» نمایش داده میشود و دکمه غیرفعال است. بعد از موفقیت، BSS ماشین را روشن میکند تا نصبگر از کنسول ادامه یابد.
اگر در کنسول فقط پیام `starting serial terminal on interface serial0` دیده شود، معمولاً از قالب cloud-init سریال مانده است. در **نصب مجدد از ISO**، BSS سریال را حذف و `vga=std` میگذارد تا نصبگر گرافیکی در noVNC بیاید.
اولویت انتخاب OS: فیلد سفارش `iso` → در غیر این صورت `template_vmid` محصول → در غیر این صورت `iso_image` محصول.
جریان قالب cloud-init
جریان نصب از فایل ISO
اگر روی استوریج `iso` فایلی نباشد، لیست `iso_image` خالی است.
پیشنیاز روی Proxmox
فیلدهای محصول مهم Proxmox
بعد از انتخاب **گروه سرور** روی محصول، این فیلدها از API همان Proxmox بهصورت Select میآیند (نه تایپ دستی):
| کلید | معنی |
|------|------|
| `node` | نودهای زنده (مثلاً `pmx`) |
| `storage` | استوریجهای `images` همان نود (مثلاً `local-lvm`) |
| `template_vmid` | اختیاری — فقط پیشفرض اگر مشتری در سفارش انتخاب نکرد |
| `iso_image` | اختیاری — فایل `.iso` پیشفرض |
| `bridge` | اختیاری — اگر خالی بماند **`vmbr0`** استفاده میشود |
اگر چند قالب (یا ISO) روی Proxmox باشد، **لازم نیست** یکی را روی محصول قفل کنید. با انتخاب ماژول Proxmox و گروه سرور، فیلد سفارش `iso` ساخته/بهروز میشود و مشتری هنگام خرید از همان لیست انتخاب میکند. دکمهٔ «ایجاد فیلد پیشفرض ISO» همان کار را دستی میکند. اگر فیلد روی محصول ذخیره نشده باشد، هنگام checkout هم از API تزریق میشود.
با انتخاب قالب، `disk_key` و `cloudinit_drive` از تنظیمات همان VM پر میشوند. اگر قالبی روی Proxmox نباشد، لیست قالب خالی است — میتوانید بهجای آن `iso_image` بگذارید. اگر ISO هم خالی باشد، اول فایل را در Proxmox آپلود کنید.
| کلید | معنی |
|------|------|
| `disk_key` | دیسک برای resize (پیشفرض `scsi0`) |
| `cloudinit_drive` | اگر قالب cloudinit نداشته باشد (`ide2`) |
| `full_clone` | `1` توصیه میشود |
| `clone_timeout` | حداکثر انتظار clone (ثانیه، پیشفرض ۶۰۰) |
| `disk_gb` | اندازهٔ **مطلق** دیسک پلن (نه جمعشونده) |
چرخه عمر
| عمل | رفتار |
|-----|--------|
| Suspend | `status/suspend` (+ wait task) |
| Unsuspend | `status/start` |
| Terminate | stop در صورت روشن بودن → `DELETE` با query `purge`/`skiplock` (بدون body؛ body → HTTP 501) |
| ChangePackage | CPU/RAM + resize مطلق دیسک؛ کوچککردن دیسک اغلب توسط Proxmox رد میشود |
احراز هویت در همهٔ این عملیات اجباری است (API Token یا user/pass).
عیبیابی اتصال Proxmox
دکمهٔ **تست اتصال** در سرورهای بیرونی باید خطای واقعی را نشان بدهد (نه فقط «احراز هویت ناموفق»).
| نشانه | معنی |
|--------|------|
| `Connection refused` روی پورت 8006 | اول خروجی CSF روی WHM همین سرور BSS: `TCP_OUT` باید `8006` داشته باشد (الان باز است). اگر باز بود، روی خود Proxmox `pveproxy` و فایروال مقصد را چک کنید. |
| HTTP 401 / 403 | Token یا رمز غلط است. `token_id` باید `user@pam!tokenname` باشد و `token_secret` جدا. یا `username=root` + `password` با realm `pam`. |
| خطای SSL | برای گواهی self-signed مقدار `verify_ssl=0` |
| Sandbox روشن | تست اتصال موفق مصنوعی است و به Proxmox واقعی وصل نمیشود |
`host` را `https://IP` بگذارید و پورت را در فیلد `port` (۸۰۰۶). پورت را داخل خود host تکرار نکنید.
---
تنظیم محصول
نمونه گزینهها: `101:Ubuntu 22.04` ، `local:iso/ubuntu-24.04.iso:Ubuntu 24.04` ، `102:Debian 12` (برای AutoVM Cloud: نام یا شناسه قالب)
منابع پلن (`cores` / `ram_mb` / `disk_gb`) از فیلد محصول است. **روی محصول `ram_mb` به مگابایت است** (مثلاً `2048` برای ۲ گیگ؛ عدد `2` یعنی ۲ مگابایت و Proxmox با خطای حداقل ۱۶ رد میکند). انتخاب مشتری روی **گزینه قابل تنظیم** با همان کلیدها **جمع** میشود. روی هر سطح گزینه، عنوان فقط برای مشتری است؛ Provision از **نام مقدار در سرور مقصد** و **مقدار** میآید (برای همهٔ ماژولها، نه فقط Proxmox). اگر نام `ram_mb` و مقدار `2` باشد یعنی ۲ گیگابایت رم (تبدیل به ۲۰۴۸ MB). جزئیات فرم: [product-addons.md](product-addons.md)
اگر بعد از clone، تنظیم cloud-init/منابع با HTTP 400 روی `memory` شکست بخورد، معمولاً رم محصول کمتر از ۱۶ مگابایت است.
---
جریان
رمز سرویس از فیلد محصول ساخته میشود و **با رمز API هایپروایزر قاطی نمیشود**.
---
پنل مدیریت VPS
در صفحه مدیریت اشتراک (پورتال و ریسلر) برای سرویسهای VPS یک باکس iframe/پنل نمایش داده میشود.
اگر IP ثابت از انبار تخصیص شده باشد، در پنل بومی کنار IP مقادیر **Gateway** و **Subnet** استخر هم نشان داده میشوند (`metadata.static_ip_gateway` / `static_ip_subnet`).
| ماژول | نوع پنل | نیازمندی |
|--------|---------|----------|
| **Virtualizor** | iframe SSO Enduser (پورت 4083) | `enduser_api_key` / `enduser_api_pass` یا Admin API + `uid` |
| **Proxmox** | پنل بومی BSS روی API | همان تنظیمات سرور Proxmox (token یا user/pass) |
| **VMware** | پنل بومی BSS روی vCenter API | `host` + `username` + `password` |
| **AutoVM Cloud** | پنل بومی + کنسول | `host` + `api_key` + `console_route` |
| **کلود عمومی** | پنل بومی (`PUBLIC_CLOUD_MODULES`) | توکن سرور؛ جزئیات: [cloud-vps-provisioning.md](./cloud-vps-provisioning.md) |
Virtualizor
| فیلد | توضیح |
|------|--------|
| `enduser_port` | پورت پنل مشتری (پیشفرض `4083`) |
| `enduser_api_key` | API Key کاربر Cloud/Enduser مالک VPSها |
| `enduser_api_pass` | API Pass همان کاربر |
اگر کلید Enduser روی سرور نباشد، سیستم با Admin API و `uid` مالک VPS سعی میکند SSO بسازد.
Proxmox / VMware / AutoVM / کلود عمومی (پنل بومی)
عملیات: وضعیت لحظهای، Start / Stop / Reboot، تعلیق، **نصب مجدد** (Proxmox از ISO؛ کلود از ایمیج API)، و لینک Console / Control Panel. بخش **Resources** با گیج مایع CPU / RAM / Disk / Uptime — برچسبها و ارقام **انگلیسی** (Latin digits). Proxmox مصرف لحظهای دارد؛ کلود عمومی معمولاً فقط ظرفیت اختصاصیافته (+ در LightNode سن نمونه از `createTime`).
**کنسول Proxmox:** لینک مستقیم `:8006/?console=...` بدون کوکی `PVEAuthCookie` خطای **401** میدهد (مرورگر نمیتواند از دامنه BSS برای IP پروکسموکس کوکی بگذارد). BSS کوکی را روی `.bss.hostkhaneh.com` ست میکند و کنسول را از درگاه `https://pve.<APP_HOST>/` (پروکسی Apache به Proxmox) باز میکند. برای کنسول باید روی سرور **username/password** باشد (نه فقط API Token). اختیاری: `console_gateway` در تنظیمات سرور.
**ارتقاء / کاهش منابع:** منابع نهایی = پایه محصول + گزینههای افزونه. فیلدهای خالی/`null` و همچنین `0` روی محصول مقصد دیگر بهعنوان override روی جمع افزونه نوشته نمیشوند (قبلاً HTTP 400 یا «هسته ۰» میداد). تغییر پلن فقط تنظیمات غیرمنبع (node/storage/…) را از محصول هدف میگیرد.
**تغییر گزینهٔ افزونه (CPU/RAM وسط دوره):** بعد از پرداخت modify/حذف، BSS همان `changePackage` را روی VM والد اعمال میکند — نه فقط متادیتای اشتراک.
دکمه «باز کردن در پنجره جدید» برای وقتی که مرورگر iframe را بلاک کند مفید است.
---
پنل مدیریت هاستینگ (Login As)
برای ماژولهای هاست (`cpanel`, `directadmin`, `plesk`, `hestia`, `cyberpanel`, `webuzo`, `ispconfig`, `aapanel`, `zpanel`) در صفحه اشتراک یک باکس iframe + دکمه **Login As** نمایش داده میشود.
| پنل | روش Login As |
|------|----------------|
| cPanel | WHM `create_user_session` |
| DirectAdmin | Login Key |
| سایر | لینک ورود پنل + نمایش یوزر/رمز در اطلاعات فنی |
جزئیات هاستینگ: [provisioning-modules.md](provisioning-modules.md)