BSS HostKhaneh

VPS Provisioning (Proxmox / Virtualizor / VMware / AutoVM / Cloud)

← بازگشت به راهنما

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



  • مشتری در checkout سیستم‌عامل را از لیست `iso` انتخاب می‌کند (VMID قالب)

  • بعد از پرداخت، صف `provisioning_queue` با `action=create`

  • API: `cluster/nextid` → **clone** قالب → **انتظار UPID** → تنظیم CPU/RAM + `ciuser`/`cipassword` (+ درایو cloudinit در صورت نیاز) → **resize مطلق** دیسک به `disk_gb` → **start**

  • در مدیریت سرویس پنل بومی VPS (وضعیت، پاور، کنسول)


  • جریان نصب از فایل ISO



  • ISO را در Proxmox آپلود کنید: Datacenter → Storage (معمولاً `local`) → ISO Images

  • در محصول `iso_image` را از لیست زنده انتخاب کنید، یا در فیلد سفارش گزینه‌ای مثل `local:iso/ubuntu-24.04.iso:Ubuntu 24.04` بگذارید

  • بعد از پرداخت: `cluster/nextid` → `POST /nodes/{node}/qemu` با دیسک `storage:disk_gb` + `ide2: volid,media=cdrom` + `boot=order=ide2;scsi0` + `net0=virtio,bridge=vmbr0` → start

  • نصب سیستم‌عامل از کنسول VPS در پورتال


  • اگر روی استوریج `iso` فایلی نباشد، لیست `iso_image` خالی است.

    پیش‌نیاز روی Proxmox



  • برای نصب خودکار: برای هر OS یک **Template** QEMU با cloud-init بسازید و Convert to template کنید

  • برای نصب از فایل: ISO را روی استوریج `iso` آپلود کنید (نه Convert to template)

  • گزینه‌های Custom Field `iso`: با انتخاب ماژول و گروه سرور روی محصول پر می‌شوند (قالب `101:Ubuntu 22.04` و ISO `local:iso/ubuntu.iso:Ubuntu`) تا مشتری هنگام خرید انتخاب کند

  • Remote User / API Token با دسترسی VM.Allocate / VM.Clone / VM.Config / VM.PowerMgmt (برای ISO: VM.Allocate بدون Clone هم کافی است)

  • شبکهٔ قالب معمولاً DHCP؛ `ipconfig0` اختیاری روی محصول. Bridge اگر خالی باشد **`vmbr0`** است — لازم نیست انتخاب شود


  • فیلدهای محصول مهم 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 تکرار نکنید.

    ---

    تنظیم محصول



  • ماژول: `proxmox` / `virtualizor` / `vmware` / `autovm`

  • تب **فنی / Provision** — منابع و username/password

  • تب **فیلدهای سفارش** — فیلد `iso` از نوع لیست انتخابی، اجباری


  • نمونه گزینه‌ها: `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` شکست بخورد، معمولاً رم محصول کمتر از ۱۶ مگابایت است.

    ---

    جریان



  • مشتری در checkout سیستم‌عامل را انتخاب می‌کند

  • مقدار روی OrderItem و سپس Subscription ذخیره می‌شود

  • موقع Provision، ماژول VPS مقدار `iso` را می‌خواند: اگر volid فایل ISO باشد VM از ISO ساخته می‌شود، وگرنه قالب clone می‌شود


  • رمز سرویس از فیلد محصول ساخته می‌شود و **با رمز 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: `node` و `vmid` از `provisioning_data`؛ نصب مجدد دیسک را خالی می‌کند، ISO را CD-ROM می‌بندد و از CD بوت می‌کند (نصب تعاملی از کنسول)

  • VMware: `vm_id` / `vmid` از `provisioning_data`

  • AutoVM Cloud: `machine_id`/`vpsid` + reinstall با `template_id`؛ کنسول از `console_route`

  • کلود عمومی: پاور برای همه؛ live status / rebuild / console مطابق جدول در [cloud-vps-provisioning.md](./cloud-vps-provisioning.md)


  • **کنسول 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)