feat(admin): surface configuration problems in the admin panel
Add GET /api/admin/health powered by a config health service that detects common deployment mistakes: missing or read-only data volume, broken tariffs/locale-override/guides JSON files, payment providers enabled without credentials, webhook providers without WEBHOOK_BASE_URL, no enabled payment methods, missing or non-https mini app URL, missing Redis, partially configured SMTP, untrusted reverse proxy, invalid bot token, missing/mismatched/failing Telegram webhook and unreachable Remnawave panel. Network checks (Telegram, panel) are cached for two minutes; ?refresh=1 forces a re-check. The admin UI shows the alerts as a banner on the dashboard with per-section navigation chips and a manual re-check button, and as a filtered banner inside each affected section. Alerts are localized via admin_health_* keys with built-in Russian fallbacks.
This commit is contained in:
@@ -1024,6 +1024,30 @@
|
||||
"admin_section_backups_subtitle": "Архивы, загрузка и восстановление БД/compose",
|
||||
"admin_section_settings_title": "Настройки приложения",
|
||||
"admin_section_settings_subtitle": "Оверрайды над .env, применяются мгновенно",
|
||||
"admin_health_title": "Проблемы конфигурации",
|
||||
"admin_health_refresh": "Проверить снова",
|
||||
"admin_health_data_dir_missing": "Каталог data ({path}) не найден. Проверьте, что том data смонтирован в контейнер.",
|
||||
"admin_health_data_dir_not_writable": "Нет прав на запись в {path} — бэкапы, тарифы, логотипы и переводы не сохранятся.",
|
||||
"admin_health_backups_dir_not_writable": "Каталог бэкапов {path} недоступен для записи.",
|
||||
"admin_health_tariffs_config_invalid": "Файл тарифов {path} не читается: {error}",
|
||||
"admin_health_locale_overrides_invalid": "Файл переводов {path} повреждён: {error}",
|
||||
"admin_health_subscription_page_config_invalid": "Конфиг гайдов подписки не читается: {error}",
|
||||
"admin_health_provider_not_configured": "Провайдер {provider} включён, но не настроен — оплата через него не работает.",
|
||||
"admin_health_provider_webhook_needs_base_url": "Провайдеру {provider} нужен WEBHOOK_BASE_URL для приёма вебхуков, а он не задан.",
|
||||
"admin_health_no_payment_methods": "Не включён ни один способ оплаты.",
|
||||
"admin_health_mini_app_url_missing": "SUBSCRIPTION_MINI_APP_URL не задан — кнопка Mini App в боте не появится.",
|
||||
"admin_health_mini_app_url_not_https": "SUBSCRIPTION_MINI_APP_URL должен начинаться с https:// (сейчас {url}).",
|
||||
"admin_health_redis_not_configured": "REDIS_URL не задан — состояния диалогов бота и кэш не переживут перезапуск.",
|
||||
"admin_health_smtp_incomplete": "SMTP настроен не полностью — вход по email работать не будет.",
|
||||
"admin_health_proxy_not_trusted": "Запросы приходят через прокси {remote}, которого нет в TRUSTED_PROXIES — вебхуки платёжных провайдеров могут отклоняться по IP.",
|
||||
"admin_health_bot_token_invalid": "Telegram отверг BOT_TOKEN — бот не работает.",
|
||||
"admin_health_telegram_api_error": "Не удалось обратиться к Telegram API: {error}",
|
||||
"admin_health_telegram_webhook_missing": "Вебхук Telegram не установлен — бот не получает обновления.",
|
||||
"admin_health_telegram_webhook_mismatch": "Вебхук Telegram указывает на {actual}, ожидается {expected}.",
|
||||
"admin_health_telegram_webhook_error": "Telegram сообщает об ошибке доставки вебхука: {error}",
|
||||
"admin_health_telegram_webhook_pending": "В очереди Telegram скопилось {count} необработанных обновлений.",
|
||||
"admin_health_panel_api_not_configured": "PANEL_API_URL и PANEL_API_KEY не заданы — синхронизация и выдача подписок не работают.",
|
||||
"admin_health_panel_api_unreachable": "Панель Remnawave недоступна по адресу {url}.",
|
||||
"admin_backups_load_failed": "Не удалось загрузить бэкапы",
|
||||
"admin_backups_upload_done": "Архив загружен",
|
||||
"admin_backups_upload_failed": "Не удалось загрузить архив",
|
||||
|
||||
Reference in New Issue
Block a user