version 1.2.1: авто-SSL при установке, кнопка перезапуска панели

- install-panel.sh: самоподписной сертификат создаётся автоматически при установке, панель сразу работает по HTTPS
- app.py: API /api/panel/restart для перезапуска панели
- index.html: кнопка «Перезапустить панель» на вкладке SSL
- mita-ctl.sh: автоопределение http/https (_panel_proto) для URL панели
- README: обновлена дорожная карта
This commit is contained in:
2026-06-26 23:44:53 +03:00
parent 1f5511a41a
commit 667a0957ac
5 changed files with 84 additions and 13 deletions
+30 -5
View File
@@ -179,11 +179,16 @@
</div>
<div class="card">
<div class="card-title">Применение сертификата</div>
<div class="alert alert-warn">
После смены сертификата необходимо перезапустить панель:<br>
<code style="font-family:var(--mono);font-size:.85rem">systemctl restart mita-panel</code>
</div>
<div class="card-title">Перезапуск панели</div>
<p style="color:var(--muted);font-size:.875rem;margin-bottom:14px;line-height:1.6">
После смены сертификата необходимо перезапустить панель, чтобы применить изменения.
</p>
<button class="btn btn-warn" onclick="restartPanel()">
<svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/></svg>
Перезапустить панель
</button>
<div id="restart-result" style="margin-top:12px"></div>
</div>
</div>
</div>
@@ -886,6 +891,26 @@ async function getLetsEncrypt(){
}
}
async function restartPanel(){
const btn=document.querySelector('#page-ssl .btn-warn');
btn.disabled=true;
btn.innerHTML='<span class="spinner"></span> Перезапуск...';
const el=document.getElementById('restart-result');
try{
const d=await api('/api/panel/restart','POST');
if(d?.ok){
el.innerHTML='<div class="alert alert-ok">✓ Панель перезапущена</div>';
showToast('Панель перезапущена');
}else{
el.innerHTML=`<div class="alert alert-err">Ошибка: ${escH(d?.error||'')}</div>`;
}
}catch(e){
el.innerHTML=`<div class="alert alert-err">Ошибка: ${escH(e.message)}</div>`;
}
btn.disabled=false;
btn.innerHTML='<svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/></svg> Перезапустить панель';
}
// ──────────────── TELEGRAM BOT ────────────────
async function loadBotPage() {
const d = await api('/api/bot/status');