fix: исправления и улучшения от 30.04.2026
Some checks failed
Backend Tests / pytest (Python 3.12) (push) Has been cancelled

- Обновлён backend/Dockerfile и frontend/Dockerfile
- Исправлен async_ops.py (новые асинхронные операции)
- Обновлён config.py
- Исправлены compose.yml и compose.prod.yml
- Обновлён deploy.sh
- Переименованы nginx-конфиги (serverpanel → pvemanager)
- Улучшены InstanceActionDialogs, InstanceDetailPage, InstancesPage
- Обновлён AppLayout.tsx
- Исправлен init.sql
- Обновлён frontend/nginx.conf и package.json
This commit is contained in:
markmorado
2026-04-30 21:58:44 +02:00
parent 79d6864d43
commit adcc86f30a
18 changed files with 403 additions and 153 deletions

53
pve
View File

@@ -41,8 +41,8 @@ declare -a _CF_ARGS
_resolve_compose() {
_CF_ARGS=("-f" "compose.yml")
if [ -f "$PVE_DIR/compose.prod.yml" ] && \
{ docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "serverpanel-nginx" || \
[ -f "$PVE_DIR/nginx/conf.d/serverpanel.conf" ]; }; then
{ docker ps -a --format '{{.Names}}' 2>/dev/null | grep -q "pvemanager-nginx" || \
[ -f "$PVE_DIR/nginx/conf.d/pvemanager.conf" ]; }; then
_CF_ARGS=("-f" "compose.yml" "-f" "compose.prod.yml")
fi
}
@@ -66,14 +66,14 @@ wait_for_containers() {
info "Ожидание готовности контейнеров..."
while [ $elapsed -lt $timeout ]; do
# Проверяем, что все контейнеры запущены и healthy
local app_status=$(docker ps --filter "name=serverpanel-app" --format "{{.State}}")
local db_status=$(docker ps --filter "name=serverpanel-db" --format "{{.State}}")
local frontend_status=$(docker ps --filter "name=serverpanel-frontend" --format "{{.State}}")
local app_status=$(docker ps --filter "name=pvemanager-app" --format "{{.State}}")
local db_status=$(docker ps --filter "name=pvemanager-db" --format "{{.State}}")
local frontend_status=$(docker ps --filter "name=pvemanager-frontend" --format "{{.State}}")
if [ "$app_status" = "running" ] && [ "$db_status" = "running" ] && [ "$frontend_status" = "running" ]; then
# Проверяем healthcheck статусы
local app_health=$(docker inspect serverpanel-app --format='{{.State.Health.Status}}' 2>/dev/null)
local db_health=$(docker inspect serverpanel-db --format='{{.State.Health.Status}}' 2>/dev/null)
local app_health=$(docker inspect pvemanager-app --format='{{.State.Health.Status}}' 2>/dev/null)
local db_health=$(docker inspect pvemanager-db --format='{{.State.Health.Status}}' 2>/dev/null)
if [ "$app_health" = "healthy" ] && [ "$db_health" = "healthy" ]; then
ok "Все контейнеры готовы"
@@ -129,15 +129,16 @@ cmd_stop() {
ok "Панель остановлена"
}
# ── pve restart (полная пересборка) ───────────────────────────────────────────
# ── pve restart (быстрая пересборка с кешем) ─────────────────────────────────
cmd_restart() {
check_docker; check_pve_dir
step "Остановка контейнеров"
pve_dc down
step "Пересборка образа app (без кеша)"
if ! pve_dc build --no-cache app; then
die "Не удалось пересобрать образ app"
step "Пересборка образов (с кешем, BuildKit, параллельно)"
if ! DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 \
pve_dc build --parallel; then
die "Не удалось пересобрать образы"
fi
step "Запуск контейнеров"
@@ -157,6 +158,30 @@ cmd_restart() {
pve_dc ps
}
# ── pve rebuild (полная пересборка БЕЗ кеша — медленно, использовать редко) ──
cmd_rebuild() {
check_docker; check_pve_dir
step "Остановка контейнеров"
pve_dc down
step "Полная пересборка образов (--no-cache, --pull)"
warn "Это займёт несколько минут — кеш слоёв игнорируется."
if ! DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 \
pve_dc build --no-cache --pull --parallel; then
die "Не удалось пересобрать образы"
fi
step "Запуск контейнеров"
if ! pve_dc up -d; then
die "Не удалось запустить панель после пересборки"
fi
wait_for_containers
ok "Панель полностью пересобрана и запущена"
echo ""
pve_dc ps
}
# ── pve update ────────────────────────────────────────────────────────────────
cmd_update() {
check_docker; check_pve_dir
@@ -199,11 +224,11 @@ cmd_backup() {
pg_pass=$(grep -E '^POSTGRES_PASSWORD=' "$PVE_DIR/.env" 2>/dev/null | head -1 | cut -d= -f2- | tr -d '"')
local dump_ok=false
if docker ps --format '{{.Names}}' 2>/dev/null | grep -q "serverpanel-db"; then
if docker ps --format '{{.Names}}' 2>/dev/null | grep -q "pvemanager-db"; then
if docker exec -i \
-e PGPASSWORD="$pg_pass" \
serverpanel-db \
pg_dump -U serverpanel -d serverpanel \
pvemanager-db \
pg_dump -U pvemanager -d pvemanager \
> "$tmp_dir/db_dump.sql" 2>/dev/null; then
dump_ok=true
ok "Дамп БД: $(du -sh "$tmp_dir/db_dump.sql" | cut -f1)"