<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Дилшод Расулов</title>
    <description>The latest articles on DEV Community by Дилшод Расулов (@markmorado).</description>
    <link>https://dev.to/markmorado</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1974734%2F23705179-933a-4960-b7af-12d142b7db71.jpg</url>
      <title>DEV Community: Дилшод Расулов</title>
      <link>https://dev.to/markmorado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/markmorado"/>
    <language>en</language>
    <item>
      <title>PVEmanager: Self-hosted Panel for Managing Proxmox Clusters</title>
      <dc:creator>Дилшод Расулов</dc:creator>
      <pubDate>Mon, 16 Mar 2026 17:21:03 +0000</pubDate>
      <link>https://dev.to/markmorado/pvemanager-self-hosted-panel-for-managing-proxmox-clusters-3pgl</link>
      <guid>https://dev.to/markmorado/pvemanager-self-hosted-panel-for-managing-proxmox-clusters-3pgl</guid>
      <description>&lt;h1&gt;
  
  
  PVEmanager: Self-hosted Panel for Managing Proxmox Clusters
&lt;/h1&gt;

&lt;p&gt;If you manage multiple Proxmox VE servers, you know that the native interface is not designed for multi-cluster management. Each server is a separate tab, there's no unified view, and audit logging is limited.&lt;/p&gt;

&lt;p&gt;I developed &lt;strong&gt;PVEmanager&lt;/strong&gt; — a panel that solves these problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What PVEmanager Does
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-01-dashboard.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-01-dashboard.jpg" alt="PVEmanager Dashboard" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main dashboard shows a summary of all connected Proxmox clusters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node status (online/offline)&lt;/li&gt;
&lt;li&gt;Quick CPU/RAM metrics&lt;/li&gt;
&lt;li&gt;Active user sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  VM Management
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-02-vms.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-02-vms.jpg" alt="Virtual Machines List" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full VM lifecycle management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create from templates&lt;/li&gt;
&lt;li&gt;Start / stop / restart&lt;/li&gt;
&lt;li&gt;Disk and memory resize&lt;/li&gt;
&lt;li&gt;Deletion with confirmation&lt;/li&gt;
&lt;li&gt;Bulk operations on VM groups&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LXC Containers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-03-lxc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-03-lxc.jpg" alt="LXC Containers List" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Similar operations for LXC containers + direct terminal access.&lt;/p&gt;

&lt;h3&gt;
  
  
  VNC Console
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-04-vnc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-04-vnc.jpg" alt="VNC Console" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built-in noVNC for accessing VMs directly from the browser — no separate client needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  xterm.js Terminal
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-05-terminal.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-05-terminal.jpg" alt="Terminal for LXC" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full shell for LXC containers via xterm.js. Works even without QEMU Guest Agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and Access
&lt;/h2&gt;

&lt;h3&gt;
  
  
  RBAC v2
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-06-rbac.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-06-rbac.jpg" alt="Role Management" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Granular roles with resource-level permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create custom roles&lt;/li&gt;
&lt;li&gt;Bind to specific VMs/LXCs&lt;/li&gt;
&lt;li&gt;Workspace conflict prevention&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Notifications
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-07-notifications.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-07-notifications.jpg" alt="Notification Settings" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three notification channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-App&lt;/strong&gt; — bell icon in the interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt; — SMTP (Yandex, Gmail, Mail.ru)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt; — Bot API via &lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Real-time Metrics
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-08-metrics.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-08-metrics.jpg" alt="CPU/RAM Charts" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chart.js displays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage per core&lt;/li&gt;
&lt;li&gt;RAM utilization&lt;/li&gt;
&lt;li&gt;Disk I/O&lt;/li&gt;
&lt;li&gt;Network traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Charts are available at both node level and individual VM level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network Management
&lt;/h2&gt;

&lt;h3&gt;
  
  
  IPAM (IP Address Management)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-09-ipam.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-09-ipam.jpg" alt="IP Address Management" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP address allocation&lt;/li&gt;
&lt;li&gt;Allocation history&lt;/li&gt;
&lt;li&gt;Orphan address detection&lt;/li&gt;
&lt;li&gt;List export&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Audit
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Action Log
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-10-audit.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-10-audit.jpg" alt="Audit Log" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Complete action history:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who performed (user)&lt;/li&gt;
&lt;li&gt;What was done (operation)&lt;/li&gt;
&lt;li&gt;When (timestamp)&lt;/li&gt;
&lt;li&gt;On which resource (VM/LXC/node)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Settings
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-11-settings.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-11-settings.jpg" alt="System Settings" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Global settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timezone&lt;/li&gt;
&lt;li&gt;Update checks&lt;/li&gt;
&lt;li&gt;GitHub token for private repos&lt;/li&gt;
&lt;li&gt;SMTP configuration&lt;/li&gt;
&lt;li&gt;Telegram bot token&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python 3.12, FastAPI, SQLAlchemy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Jinja2, Vanilla JS, Bootstrap 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL 16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;Docker, Alpine Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxmox API&lt;/td&gt;
&lt;td&gt;proxmoxer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VNC&lt;/td&gt;
&lt;td&gt;noVNC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charts&lt;/td&gt;
&lt;td&gt;Chart.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal&lt;/td&gt;
&lt;td&gt;xterm.js&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Clone
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/markmorado/pvemanager.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pvemanager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="nb"&gt;cp &lt;/span&gt;backend/.env.example backend/.env
&lt;span class="c"&gt;# Edit .env — set POSTGRES_PASSWORD and TZ&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Access
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Default login: &lt;code&gt;admin / admin123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Change the default password after first login!&lt;/p&gt;

&lt;h2&gt;
  
  
  .env Configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Database&lt;/span&gt;
&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_secure_password

&lt;span class="c"&gt;# Timezone (IANA format)&lt;/span&gt;
&lt;span class="nv"&gt;TZ&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Europe/Tashkent

&lt;span class="c"&gt;# Update checks (for private repos — disable or provide token)&lt;/span&gt;
&lt;span class="nv"&gt;DISABLE_UPDATE_CHECK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="c"&gt;# optional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Who Is This For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sysadmins&lt;/strong&gt; with Proxmox server farms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting providers&lt;/strong&gt; (Eskiz, for example 😄)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps teams&lt;/strong&gt; needing RBAC and audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Labs&lt;/strong&gt; with test clusters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Roadmap:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Proxmox Backup Server integration&lt;/li&gt;
&lt;li&gt;[ ] Scheduled automatic backups&lt;/li&gt;
&lt;li&gt;[ ] Template deployment monitoring&lt;/li&gt;
&lt;li&gt;[ ] External orchestration API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/markmorado/pvemanager/blob/main/WIKI.md" rel="noopener noreferrer"&gt;WIKI.md&lt;/a&gt; — full guide&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/markmorado/pvemanager/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG.md&lt;/a&gt; — version history&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fork the repository&lt;/span&gt;
&lt;span class="c"&gt;# Create feature branch&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/my-feature

&lt;span class="c"&gt;# Commit&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'feat: add my feature'&lt;/span&gt;

&lt;span class="c"&gt;# Push&lt;/span&gt;
git push origin feature/my-feature

&lt;span class="c"&gt;# Pull Request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/markmorado/pvemanager/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt; — free to use, modify, and distribute.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/markmorado/pvemanager" rel="noopener noreferrer"&gt;markmorado/pvemanager&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; Open issues or write on Telegram.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>proxm</category>
      <category>virtualization</category>
      <category>opensource</category>
    </item>
    <item>
      <title>PVEmanager: Self-hosted панель для управления Proxmox кластерами</title>
      <dc:creator>Дилшод Расулов</dc:creator>
      <pubDate>Mon, 16 Mar 2026 17:15:15 +0000</pubDate>
      <link>https://dev.to/markmorado/pvemanager-self-hosted-paniel-dlia-upravlieniia-proxmox-klastierami-4f70</link>
      <guid>https://dev.to/markmorado/pvemanager-self-hosted-paniel-dlia-upravlieniia-proxmox-klastierami-4f70</guid>
      <description>&lt;h1&gt;
  
  
  PVEmanager: Self-hosted панель для управления Proxmox кластерами
&lt;/h1&gt;

&lt;p&gt;Если вы управляете несколькими Proxmox VE серверами, то знаете, что родной интерфейс не предназначен для мульти-кластерного управления. Каждый сервер — отдельная вкладка, нет единой картины, аудит логирование ограничено.&lt;/p&gt;

&lt;p&gt;Я разработал &lt;strong&gt;PVEmanager&lt;/strong&gt; — панель, которая закрывает эти проблемы.&lt;/p&gt;

&lt;h2&gt;
  
  
  Что умеет PVEmanager
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Дашборд
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-01-dashboard.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-01-dashboard.jpg" alt="PVEmanager Dashboard" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Главная панель показывает сводку по всем подключённым Proxmox кластерам:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Статус узлов (онлайн/офлайн)&lt;/li&gt;
&lt;li&gt;Быстрые метрики CPU/RAM&lt;/li&gt;
&lt;li&gt;Активные сессии пользователей&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Управление VM
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-02-vms.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-02-vms.jpg" alt="Список виртуальных машин" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Полный жизненный цикл VM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Создание из шаблонов&lt;/li&gt;
&lt;li&gt;Старт / стоп / рестарт&lt;/li&gt;
&lt;li&gt;Resize дисков и памяти&lt;/li&gt;
&lt;li&gt;Удаление с подтверждением&lt;/li&gt;
&lt;li&gt;Bulk операции над группой машин&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LXC контейнеры
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-03-lxc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-03-lxc.jpg" alt="Список LXC контейнеров" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Аналогичные операции для LXC контейнеров + прямой доступ в терминал.&lt;/p&gt;

&lt;h3&gt;
  
  
  VNC консоль
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-04-vnc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-04-vnc.jpg" alt="VNC консоль" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Встроенный noVNC для доступа к VM прямо из браузера — не нужен отдельный клиент.&lt;/p&gt;

&lt;h3&gt;
  
  
  xterm.js терминал
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-05-terminal.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-05-terminal.jpg" alt="Терминал для LXC" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Полноценный shell для LXC контейнеров через xterm.js. Работает даже без QEMU Guest Agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Безопасность и доступ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  RBAC v2
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-06-rbac.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-06-rbac.jpg" alt="Управление ролями" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Гранулярные роли с правами на ресурсы:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Создание кастомных ролей&lt;/li&gt;
&lt;li&gt;Привязка к конкретным VM/LXC&lt;/li&gt;
&lt;li&gt;Запрет конфликтов workspace&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Нотификации
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-07-notifications.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-07-notifications.jpg" alt="Настройка уведомлений" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Три канала уведомлений:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-App&lt;/strong&gt; — колокольчик в интерфейсе&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt; — SMTP (Yandex, Gmail, Mail.ru)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt; — Bot API через &lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Мониторинг
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Метрики в реальном времени
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-08-metrics.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-08-metrics.jpg" alt="Графики CPU/RAM" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chart.js отображает:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU загрузку по ядрам&lt;/li&gt;
&lt;li&gt;Использование RAM&lt;/li&gt;
&lt;li&gt;Disk I/O&lt;/li&gt;
&lt;li&gt;Network трафик&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Графики доступны как на уровне узла, так и на уровне отдельной VM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Управление сетью
&lt;/h2&gt;

&lt;h3&gt;
  
  
  IPAM (IP Address Management)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-09-ipam.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-09-ipam.jpg" alt="Управление IP адресами" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Аллокация IP адресов&lt;/li&gt;
&lt;li&gt;История выделений&lt;/li&gt;
&lt;li&gt;Детекция orphan адресов&lt;/li&gt;
&lt;li&gt;Экспорт списков&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Аудит
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Лог действий
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-10-audit.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-10-audit.jpg" alt="Аудит лог" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Полная история действий:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Кто выполнил (пользователь)&lt;/li&gt;
&lt;li&gt;Что сделал (операция)&lt;/li&gt;
&lt;li&gt;Когда (таймстемп)&lt;/li&gt;
&lt;li&gt;На каком ресурсе (VM/LXC/узел)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Настройки
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-11-settings.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/pvemanager-11-settings.jpg" alt="Настройки системы" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Глобальные настройки:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Таймзона&lt;/li&gt;
&lt;li&gt;Проверка обновлений&lt;/li&gt;
&lt;li&gt;GitHub токен для приватных репо&lt;/li&gt;
&lt;li&gt;SMTP конфигурация&lt;/li&gt;
&lt;li&gt;Telegram бот токен&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Архитектура
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Слой&lt;/th&gt;
&lt;th&gt;Технология&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python 3.12, FastAPI, SQLAlchemy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Jinja2, Vanilla JS, Bootstrap 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL 16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;Docker, Alpine Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxmox API&lt;/td&gt;
&lt;td&gt;proxmoxer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VNC&lt;/td&gt;
&lt;td&gt;noVNC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Графики&lt;/td&gt;
&lt;td&gt;Chart.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Терминал&lt;/td&gt;
&lt;td&gt;xterm.js&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Быстрый старт
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Клонирование
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/markmorado/pvemanager.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pvemanager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Конфигурация
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="nb"&gt;cp &lt;/span&gt;backend/.env.example backend/.env
&lt;span class="c"&gt;# Редактируйте .env — установите POSTGRES_PASSWORD и TZ&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Запуск
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Доступ
&lt;/h3&gt;

&lt;p&gt;Откройте &lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Логин по умолчанию: &lt;code&gt;admin / admin123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Важно:&lt;/strong&gt; Смените пароль после первого входа!&lt;/p&gt;

&lt;h2&gt;
  
  
  Конфигурация .env
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Database&lt;/span&gt;
&lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_secure_password

&lt;span class="c"&gt;# Timezone (IANA format)&lt;/span&gt;
&lt;span class="nv"&gt;TZ&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Europe/Tashkent

&lt;span class="c"&gt;# Update checks (для приватных репо — отключите или укажите токен)&lt;/span&gt;
&lt;span class="nv"&gt;DISABLE_UPDATE_CHECK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="c"&gt;# опционально&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Для кого этот проект
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Сисадмины&lt;/strong&gt; с парком Proxmox серверов&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Хостинг провайдеры&lt;/strong&gt; (Eskiz, например 😄)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Команды DevOps&lt;/strong&gt; needing RBAC и аудит&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Лаборатории&lt;/strong&gt; с тестовыми кластерами&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Что дальше
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Roadmap:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Интеграция с Proxmox Backup Server&lt;/li&gt;
&lt;li&gt;[ ] Автоматические бэкапы по расписанию&lt;/li&gt;
&lt;li&gt;[ ] Мониторинг template deployment&lt;/li&gt;
&lt;li&gt;[ ] API для внешнего orchestration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Документация:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/markmorado/pvemanager/blob/main/WIKI.md" rel="noopener noreferrer"&gt;WIKI.md&lt;/a&gt; — полный гайд&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/markmorado/pvemanager/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG.md&lt;/a&gt; — история версий&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fork репозиторий&lt;/span&gt;
&lt;span class="c"&gt;# Создайте feature branch&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/my-feature

&lt;span class="c"&gt;# Коммит&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s1"&gt;'feat: add my feature'&lt;/span&gt;

&lt;span class="c"&gt;# Push&lt;/span&gt;
git push origin feature/my-feature

&lt;span class="c"&gt;# Pull Request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/markmorado/pvemanager/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt; — свободно для использования, модификации и распространения.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/markmorado/pvemanager" rel="noopener noreferrer"&gt;markmorado/pvemanager&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Вопросы?&lt;/strong&gt; Открывайте issues или пишите в Telegram.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>proxmox</category>
      <category>virtualization</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
