Короткий рассказ о том, как я настроил noVNC. После бесчисленных часов исследований я наконец-то все настроил так, как задумано. Хочу поделиться пошаговой инструкцией, чтобы людям в будущем было проще.
Я использую следующий API Wrapper:
Вкратце, вот что нам нужно сделать:
* Установить API Wrapper на хост-систему.
* Добавить API-пользователя и убедиться, что у него есть необходимые права.
* Создать функции для предварительного просмотра VNC на страницах по вашему выбору.
* Встроить (Iframe) экземпляр VNC в веб-приложение.
Эта настройка может не сработать для вас. Если это так, ответьте в этой теме, и я помогу вам. Возможно, вам потребуется внести некоторые изменения для вашей конкретной настройки.
Вот как создать нового пользователя с необходимыми правами для VNC:
(Нажмите на Datacenter, а затем Users)

Добавить пользователя, нажав здесь:


Затем нам нужно убедиться, что у этого нового пользователя есть пароль. Вот что я лично предпочитаю для этого:

Можно просто добавить нового пользователя с надежным паролем (будьте внимательны к специальным символам, поскольку этот Proxmox wrapper их не любит: '&$').
Bash: `adduser api`
Затем нужно повторить это на уровне Datacenter:
```json
{
"lightbox_close": "Закрыть",
"lightbox_next": "Следующий",
"lightbox_previous": "Предыдущий",
"lightbox_error": "Запрашиваемый контент не может быть загружен. Пожалуйста, попробуйте позже.",
"lightbox_start_slideshow": "Запустить слайдшоу",
"lightbox_stop_slideshow": "Остановить слайдшоу",
"lightbox_full_screen": "Полноэкранный режим",
"lightbox_thumbnails": "Миниатюры",
"lightbox_download": "Загрузить",
"lightbox_share": "Поделиться",
"lightbox_zoom": "Увеличить",
"lightbox_new_window": "Новое окно",
"lightbox_toggle_sidebar": "Переключить боковую панель"
}
```
[ >)
Нажмите на нового пользователя, который был создан, а затем на Password:

Убедитесь, что вы вводите тот же пароль, что и в командной строке хост-системы.
Затем нам нужно убедиться, что у этого нового пользователя есть необходимые права: (Создайте Resource Pool для ресурсов, которые мы хотим предоставить API-пользователю)

Затем просто назовите его – можете назвать как угодно. После этого мы сможем добавлять ресурсы в этот пул:

Нажмите на Virtual Machines, чтобы массово добавить отдельные машины:

Затем просто добавьте машины, к которым API-пользователь должен иметь доступ.
Наконец, мы можем добавить соответствующие права для пользователя:

Структура файлов:
---
VNC\_API:
* vm\_functions.php
* preview\_vnc.php
Установка Wrapper:
Bash: `composer require zzantares/proxmoxve ~4.0`
FILE: vm\_functions.php
```php
<?php
use ProxmoxVE\Proxmox;
use GuzzleHttp\Client;
function PreviewVnc($vmID, $nodeid) {
// pass in the vmid and nodeid from the functions above
$node = $nodeid;
$vmid = $vmID;
// set up the proxmox creds and login
$credentials = [
'hostname' => 'proxmox-domain', // Also can be an IP
'username' => 'api',
'password' => 'password',
];
$host = $credentials['hostname'];
$proxmox = new Proxmox($credentials);
if ($login = $proxmox->login()) {
$ticket = $login->getTicket();
$config = $proxmox->create("/nodes/$node/qemu/$vmid/vncproxy", [
'websocket' => 1, // Start websocket proxy
]);
$websock = $proxmox->get("/nodes/$node/qemu/$vmid/vncwebsocket", [
'vncticket' => $config['data']['ticket'],
'port' => $config['data']['port']
]);
$src_href = 'https://'.$host.':8006/?console=kvm&novnc=1&node='.$node.'&resize=1&vmid='.$vmid.'&path=api2/json/nodes/'.$node.'/qemu/'.$vmid.'/vncwebsocket/port/'.$config['data']['port'].'"/vncticket/"'.$ticket;
echo '<iframe src="'.$src_href.'" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>';
}
}
?>
```
FILE: preview\_vnc.php
```php
<?php
require 'vm_functions.php';
$vmid = 100;
$node = 'proxmox';
PreviewVnc($vmid, $node);
```
Если все пройдет успешно, у вас должна быть инстанция VNC, запущенная на preview\_vnc.php.
Я использую следующий API Wrapper:
Вкратце, вот что нам нужно сделать:
* Установить API Wrapper на хост-систему.
* Добавить API-пользователя и убедиться, что у него есть необходимые права.
* Создать функции для предварительного просмотра VNC на страницах по вашему выбору.
* Встроить (Iframe) экземпляр VNC в веб-приложение.
Эта настройка может не сработать для вас. Если это так, ответьте в этой теме, и я помогу вам. Возможно, вам потребуется внести некоторые изменения для вашей конкретной настройки.
Вот как создать нового пользователя с необходимыми правами для VNC:
(Нажмите на Datacenter, а затем Users)

Добавить пользователя, нажав здесь:


Затем нам нужно убедиться, что у этого нового пользователя есть пароль. Вот что я лично предпочитаю для этого:

Можно просто добавить нового пользователя с надежным паролем (будьте внимательны к специальным символам, поскольку этот Proxmox wrapper их не любит: '&$').
Bash: `adduser api`
Затем нужно повторить это на уровне Datacenter:
```json
{
"lightbox_close": "Закрыть",
"lightbox_next": "Следующий",
"lightbox_previous": "Предыдущий",
"lightbox_error": "Запрашиваемый контент не может быть загружен. Пожалуйста, попробуйте позже.",
"lightbox_start_slideshow": "Запустить слайдшоу",
"lightbox_stop_slideshow": "Остановить слайдшоу",
"lightbox_full_screen": "Полноэкранный режим",
"lightbox_thumbnails": "Миниатюры",
"lightbox_download": "Загрузить",
"lightbox_share": "Поделиться",
"lightbox_zoom": "Увеличить",
"lightbox_new_window": "Новое окно",
"lightbox_toggle_sidebar": "Переключить боковую панель"
}
```
[ >)
Нажмите на нового пользователя, который был создан, а затем на Password:

Убедитесь, что вы вводите тот же пароль, что и в командной строке хост-системы.
Затем нам нужно убедиться, что у этого нового пользователя есть необходимые права: (Создайте Resource Pool для ресурсов, которые мы хотим предоставить API-пользователю)

Затем просто назовите его – можете назвать как угодно. После этого мы сможем добавлять ресурсы в этот пул:

Нажмите на Virtual Machines, чтобы массово добавить отдельные машины:

Затем просто добавьте машины, к которым API-пользователь должен иметь доступ.
Наконец, мы можем добавить соответствующие права для пользователя:

Структура файлов:
---
VNC\_API:
* vm\_functions.php
* preview\_vnc.php
Установка Wrapper:
Bash: `composer require zzantares/proxmoxve ~4.0`
FILE: vm\_functions.php
```php
<?php
use ProxmoxVE\Proxmox;
use GuzzleHttp\Client;
function PreviewVnc($vmID, $nodeid) {
// pass in the vmid and nodeid from the functions above
$node = $nodeid;
$vmid = $vmID;
// set up the proxmox creds and login
$credentials = [
'hostname' => 'proxmox-domain', // Also can be an IP
'username' => 'api',
'password' => 'password',
];
$host = $credentials['hostname'];
$proxmox = new Proxmox($credentials);
if ($login = $proxmox->login()) {
$ticket = $login->getTicket();
$config = $proxmox->create("/nodes/$node/qemu/$vmid/vncproxy", [
'websocket' => 1, // Start websocket proxy
]);
$websock = $proxmox->get("/nodes/$node/qemu/$vmid/vncwebsocket", [
'vncticket' => $config['data']['ticket'],
'port' => $config['data']['port']
]);
$src_href = 'https://'.$host.':8006/?console=kvm&novnc=1&node='.$node.'&resize=1&vmid='.$vmid.'&path=api2/json/nodes/'.$node.'/qemu/'.$vmid.'/vncwebsocket/port/'.$config['data']['port'].'"/vncticket/"'.$ticket;
echo '<iframe src="'.$src_href.'" frameborder="0" scrolling="no" width="100%" height="100%"></iframe>';
}
}
?>
```
FILE: preview\_vnc.php
```php
<?php
require 'vm_functions.php';
$vmid = 100;
$node = 'proxmox';
PreviewVnc($vmid, $node);
```
Если все пройдет успешно, у вас должна быть инстанция VNC, запущенная на preview\_vnc.php.

