Files
virtuality/web/static/knowledge.html
T

148 строки
8.7 KiB
HTML
Исходник Ответственный История

Этот файл содержит неоднозначные символы Юникода
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>База знаний — Virtuality</title>
<link rel="stylesheet" href="/static/app.css">
</head>
<body>
<div class="v-layout">
<aside class="v-sidebar">
<div class="v-logo">
<strong>Virtuality</strong>
<span>control panel</span>
</div>
<nav class="v-nav">
<a href="/">Обзор</a>
<a href="/vm/create">Создать VM</a>
<div class="v-nav-group">
<button class="v-nav-group-title" type="button">Образы</button>
<a href="/iso">ISO</a>
<a href="/disk-images">Диски</a>
</div>
<a href="/network">Сеть</a>
<a href="/operations">Операции</a>
<a href="/logs">Журналы</a>
<a href="/update">Обновления</a>
<a href="/host">Хост</a>
<a class="v-nav-bottom active" href="/static/knowledge.html">База знаний</a>
</nav>
</aside>
<main class="v-main">
<header class="v-topbar">
<div>
<div class="v-title">База знаний</div>
<div class="v-subtitle">Документация Virtuality, боевые заметки, сетевые схемы и чек-листы</div>
</div>
<div class="top-meta">
<a class="link-pill" href="/">← Дашборд</a>
</div>
</header>
<section class="grid stats compact-stats">
<article class="card stat"><div class="label">Фокус</div><div class="value small">VM / сеть / SSL</div></article>
<article class="card stat"><div class="label">Статус</div><div class="value small">Наполняется</div></article>
<article class="card stat"><div class="label">Правило</div><div class="value small">SSL-ready</div></article>
<article class="card stat"><div class="label">Версия раздела</div><div class="value small">0.8.58</div></article>
</section>
<section class="card">
<div class="card-head"><h2>Главное правило: SSL-ready by default</h2><span class="pill">Lets Encrypt / HTTP-01</span></div>
<div class="notice">При настройке VM и пробросов Virtuality должна сразу учитывать выпуск SSL-сертификатов. Для Let’s Encrypt критичен внешний доступ к HTTP-01 challenge на TCP 80.</div>
<div class="knowledge-list top-space">
<div><strong>DNS</strong><span>A-запись домена должна указывать на реальный внешний IP сервера или роутера.</span></div>
<div><strong>WAN 80/443</strong><span>Порты не должны быть заняты веб-интерфейсом роутера, FastPanel на хосте или другой службой.</span></div>
<div><strong>Firewall</strong><span>Keenetic, внешний firewall и UFW/nftables должны пропускать TCP 80 и TCP 443.</span></div>
<div><strong>Проверка снаружи</strong><span>Перед certbot надо проверять curl с мобильной сети или внешнего хоста, а не только из локальной Wi-Fi сети.</span></div>
</div>
<pre>curl -I http://domain.ru
# Хорошо: ответил nginx, допустимы 200 / 301 / 404
# Плохо: timeout, connection refused или ответ админки роутера</pre>
</section>
<section class="grid two">
<article class="card">
<div class="card-head"><h2>Bridge VM</h2><span class="pill">br0 / LAN node</span></div>
<p class="muted">Если VM подключена к bridge и имеет полноценный LAN IP, самый чистый путь — пробрасывать WAN-порты роутера напрямую на IP VM.</p>
<pre>WAN 80 → IP_VM:80
WAN 443 → IP_VM:443</pre>
<div class="notice top-space">Для сайтов и FastPanel внутри bridge VM этот вариант проще и надёжнее: меньше NAT-слоёв, меньше магии, меньше боли.</div>
</article>
<article class="card">
<div class="card-head"><h2>NAT VM</h2><span class="pill">Virtuality DNAT</span></div>
<p class="muted">Если VM находится во внутренней NAT-сети Virtuality, внешний роутер должен вести трафик на хост Virtuality, а дальше Virtuality DNAT отправит его в VM.</p>
<pre>WAN 80/443 → HOST:80/443
HOST DNAT → IP_VM:80/443</pre>
<div class="notice top-space">Для NAT-сценария правила Virtuality должны быть применены и проверены через /network и tcpdump.</div>
</article>
</section>
<section class="card">
<div class="card-head"><h2>Ключевые директории</h2><span class="pill">filesystem</span></div>
<table>
<thead><tr><th>Путь</th><th>Назначение</th></tr></thead>
<tbody>
<tr><td class="strong">/opt/virtuality/source</td><td>Исходники GitHub-репозитория Virtuality.</td></tr>
<tr><td class="strong">/opt/virtuality/web</td><td>Установленная web-панель, которую запускает systemd.</td></tr>
<tr><td class="strong">/opt/virtuality/venv</td><td>Python virtualenv панели.</td></tr>
<tr><td class="strong">/var/lib/virtuality/iso</td><td>ISO-образы для установки VM.</td></tr>
<tr><td class="strong">/var/lib/virtuality/images</td><td>qcow2-диски виртуальных машин.</td></tr>
<tr><td class="strong">/var/lib/virtuality/disk-images</td><td>Загруженные готовые .img/.raw/.qcow2 образы и распакованные архивы.</td></tr>
<tr><td class="strong">/var/lib/virtuality/network</td><td>Правила пробросов портов и ручные IP VM.</td></tr>
<tr><td class="strong">/var/log/virtuality</td><td>Логи установки, операций и диагностики.</td></tr>
</tbody>
</table>
</section>
<section class="grid two">
<article class="card">
<div class="card-head"><h2>Обновление панели</h2><span class="pill">GitHub → install</span></div>
<pre>cd /opt/virtuality/source
sudo git fetch --all
sudo git reset --hard origin/main
sudo git clean -fd
sudo bash scripts/install_web_panel.sh
sudo systemctl restart virtuality-web</pre>
</article>
<article class="card">
<div class="card-head"><h2>Быстрая диагностика</h2><span class="pill">host / VM / network</span></div>
<pre>sudo vhealth
sudo systemctl status virtuality-web --no-pager
sudo journalctl -u virtuality-web -n 120 --no-pager
virsh list --all
virsh net-list --all
ip route
sudo nft list ruleset | grep -A120 virtuality</pre>
</article>
</section>
<section class="card">
<div class="card-head"><h2>Проверка проброса к VM</h2><span class="pill">tcpdump</span></div>
<p class="muted">Если certbot или внешний сайт не открывается, сначала надо понять, где теряется пакет: на роутере, на хосте Virtuality или уже внутри VM.</p>
<pre># На хосте Virtuality
sudo tcpdump -ni br0 'tcp port 80 or tcp port 443'
# На VM
sudo ss -tulpn | grep -E ':80|:443'
sudo nginx -t</pre>
</section>
<section class="card">
<div class="card-head"><h2>Правила версионирования</h2><span class="pill">release discipline</span></div>
<div class="knowledge-list">
<div><strong>+0.0.1</strong><span>Мелкий фикс, безопасное уточнение, диагностика, маленький UI-патч.</span></div>
<div><strong>+0.1.0</strong><span>Заметная функция или новый раздел панели.</span></div>
<div><strong>+1.0.0</strong><span>Архитектурный разрыв или несовместимое изменение.</span></div>
<div><strong>Коммиты</strong><span>Сообщения коммитов — на русском, в прошедшем времени, без инфинитива.</span></div>
</div>
</section>
</main>
</div>
</body>
</html>