Как самостоятельно разместить Beszel в 2026 году: агенты, приватная сеть и резервные копии
Практическое руководство по самостоятельному размещению Beszel: Docker, порты, постоянное хранение данных, TLS, безопасность, резервные копии и проблемы, которые мешают использовать систему в production. Пошаговая инструкция.
Самая короткая демонстрация Beszel доказывает лишь то, что процесс слушает порт 8090. Для production нужны более весомые подтверждения. Система должна проходить этот сценарий даже после замены контейнера: подключить агент, отобразить графики CPU, памяти и диска, вызвать alert по пороговому значению и повторно подключить агент после перезапуска hub.
Beszel разворачивают для конкретной задачи: лёгкого мониторинга серверов в небольшом контейнере. Самая распространённая проблема при развёртывании — hub не может подключиться к порту 45876 на агенте или у агента изменился SSH-ключ. Поэтому обработке публичного URL и долговременному хранению состояния нужно уделить столько же внимания, сколько и запуску image.
Определите границы среды выполнения Beszel
Состояние процесса и состояние продукта — разные вещи для Beszel. Порт 8090 может отвечать, даже если пользовательский сценарий по-прежнему не работает. Сетевой контракт Beszel предполагает наличие агента Beszel на каждой отслеживаемой машине. Оставляйте приватные endpoint во внутреннем DNS, разрешайте только необходимые исходящие подключения и выдавайте Beszel service credential с ограниченными правами.
Используйте это упражнение для проверки готовности после существенных изменений конфигурации: подключите агент, отобразите графики CPU, памяти и диска, вызовите alert по пороговому значению и повторно подключите агент после перезапуска hub. Не включайте дорогостоящие внешние проверки в liveness probe, чтобы сбой у провайдера не вызвал цикл перезапусков. При планировании capacity учитывайте количество агентов, retention метрик, хранилище hub и доступность сети до каждого агента через выделенный порт — это точнее отражает реальную нагрузку Beszel, чем запросы к страницам.
Сделайте публичный origin однозначным
Браузер, API-клиент и Beszel должны использовать один и тот же origin. Чтобы обеспечить это, направьте hub через HTTPS, а порты агентов оставьте приватными. Сохраняйте исходные host и protocol, но не оставляйте порт 8090 доступным извне как конкурирующий публичный адрес.
Руководство по диагностике недоступности сайта помогает отличить недоступный маршрут от приложения, которое отвечает. В данном случае это различие особенно важно: hub не может подключиться к порту 45876 на агенте или у агента изменился SSH-ключ. Изменения ingress исправят только первую проблему; для второй потребуется изучить логи Beszel, состояние или workload.
Запустите первый экземпляр, близкий к production
Первый контейнер должен легко удаляться и создаваться заново. Храните данные не в writable layer, привязывайте порт 8090 только там, откуда до него может достучаться proxy, и передавайте конфигурацию во время запуска.
docker run -d \
--name beszel \
--restart unless-stopped \
-p 127.0.0.1:8090:8090 \
-v beszel-data:/beszel_data \
henrygd/beszel:latest
После первичного тестирования зафиксируйте image. Читайте самую раннюю ошибку запуска, а не последнее сообщение о перезапуске, проверяйте каждый mount с помощью docker inspect и следите за логами, пока подключаете агент, просматриваете графики CPU, памяти и диска, вызываете alert по пороговому значению и повторно подключаете агент после перезапуска hub. Эта последовательность помогает отличить некорректную команду запуска image от проблемы с зависимостью или правами доступа.
Логи, которые помогают ответить на следующий вопрос
Работающий контейнер необходим, но этого недостаточно. Service-level indicator — успешное выполнение сценария «подключить агент, отобразить графики CPU, памяти и диска, вызвать alert по пороговому значению и повторно подключить агент после перезапуска hub». Вероятные сигналы нагрузки — количество агентов, retention метрик, хранилище hub и доступность сети до каждого агента через выделенный порт.
Контроль изменений важен, поскольку версии hub и агента следует тестировать вместе: изменения протокола могут выглядеть как незаметные пробелы в мониторинге. Сохраняйте предыдущий image, тестируйте миграции на копии состояния и документируйте, поддерживается ли rollback после изменения schema. Если hub не может подключиться к порту 45876 на агенте или у агента изменился SSH-ключ, диагностируйте первую границу, которая отличается от рабочего окружения.
Приёмочное испытание Beszel для production
До подключения реальных пользователей подготовьте release worksheet для Beszel. В нём должны быть указаны зафиксированный image, порт 8090, canonical origin, постоянные пути и ответственный за агент Beszel на каждой отслеживаемой машине. Добавьте ожидаемый результат этого сценария: подключить агент, отобразить графики CPU, памяти и диска, вызвать alert по пороговому значению и повторно подключить агент после перезапуска hub.
Используйте worksheet после обычной замены и после чистого восстановления. Восстановление считается успешным только тогда, когда возвращаются системы, история и alerts, а каждый восстановленный агент снова начинает отправлять актуальные метрики. Также соберите короткий ресурсный trace, охватывающий количество агентов, retention метрик, хранилище hub и доступность сети до каждого агента через выделенный порт; храните его рядом с release, чтобы будущие изменения capacity сравнивались при той же нагрузке.
Добавьте один контролируемый сбой: временно запретите тестовой identity доступ к агенту Beszel на каждой отслеживаемой машине. Убедитесь, что Beszel сообщает о проблеме на правильной границе, восстановите корректное состояние и повторите сценарий. Это проверяет не только успешную работу, но и видимость ошибок, не позволяя интерфейсу, который выглядит исправным, скрывать сломанный worker, callback или подключение к database.
Спроектируйте восстановление Beszel до запуска
Составьте перечень всех постоянных артефактов: данные hub, пользователей, систем и конфигурацию alerts. Подключите /beszel_data до bootstrap, запишите безвредные тестовые данные и замените контейнер, чтобы доказать фактическую постоянность этого пути. Включите конфигурацию, которая меняет интерпретацию сохранённых данных, а не только самый большой каталог.
Настройте retention, копируйте резервные данные за пределы хоста и выполните восстановление в чистом окружении. Проверка Beszel считается завершённой, когда возвращаются системы, история и alerts, а каждый восстановленный агент снова начинает отправлять актуальные метрики. Если в плане есть snapshots, используйте рекомендации по сравнению PITR и snapshot, чтобы документировать, какие данные можно восстановить каждым механизмом.
Закройте временный доступ для настройки
Оценивайте угрозы, связанные с действиями Beszel, а не только с его login form. В данном случае самая опасная ошибка — опубликовать listeners агентов в интернете без сетевых ограничений. Установите следующую границу: оставляйте listeners агентов в приватных сетях и защищайте account hub и ключи enrollment.
В этой базовой конфигурации Beszel не требует обязательного bootstrap secret; вместо этого защитите фактический administrator account или upstream authentication. Не устраняйте ошибку прав, запуская контейнер от root или монтируя хост целиком. Resource limits также относятся к security design, поскольку пользователи могут влиять на количество агентов, retention метрик, хранилище hub и доступность сети до каждого агента через выделенный порт.
Перенесите повторяющиеся инфраструктурные задачи в Dockup
Для Beszel Dockup особенно полезен на границе между image и постоянным сервисом. Он сохраняет маршрут к 8090, TLS, значения secret и хранилище при замене контейнеров независимо от того, принадлежат ли вычислительные ресурсы Dockup или подключённому серверу.
Завершите настройку с учётом особенностей приложения: направьте hub через HTTPS и оставьте порты агентов приватными; подключите и протестируйте агент Beszel на каждой отслеживаемой машине; выполните следующую проверку: подключите агент, отобразите графики CPU, памяти и диска, вызовите alert по пороговому значению и повторно подключите агент после перезапуска hub. Сохраните результат как deployment check, чтобы следующая обновление image оценивалось по поведению, а не по статусу контейнера.
Часто задаваемые вопросы
Что требуется Beszel для развёртывания в production?
Направьте контейнер Beszel на порту 8090 через один origin HTTPS. Дополнительное сетевое требование — наличие агента Beszel на каждой отслеживаемой машине. Не объявляйте Beszel готовым, пока не сможете подключить агент, отобразить графики CPU, памяти и диска, вызвать alert по пороговому значению и повторно подключить агент после перезапуска hub.
Какие данные Beszel нужно включать в резервную копию?
Сохраняйте /beszel_data и включайте данные hub, пользователей, систем и конфигурацию alerts в один recovery manifest. Чистое восстановление Beszel считается успешным только тогда, когда возвращаются системы, история и alerts, а каждый восстановленный агент снова начинает отправлять актуальные метрики.
Нужен ли Beszel HTTPS за reverse proxy?
Используйте HTTPS для публичного origin Beszel, а порт 8090 оставьте во внутреннем маршруте. Корректно применяйте настройку Beszel: направляйте hub через HTTPS и оставляйте порты агентов приватными. Для Beszel HTTPS защищает credentials и пользовательский контент при передаче и обеспечивает согласованное поведение клиентов, зависящее от origin.
Как тестировать обновление Beszel?
Восстановите текущее состояние Beszel в изолированном deployment, примените candidate version и повторите приёмочный сценарий. Обратите особое внимание на то, что версии hub и агента следует тестировать вместе: изменения протокола могут выглядеть как незаметные пробелы в мониторинге. Храните предыдущий image Beszel, пока не будут понятны границы миграции данных и rollback.
