Отчёт о работе 27–28 июля 2026 m.kurs.dn.ua

Как панель управления переехала в контейнер

Сервер на Ubuntu 26.04. Панель, которая эту версию не поддерживает. Сначала мы заставили её работать силой — семью правками в чужом коде. Потом поняли, что правильный ответ проще: дать панели ту систему, которую она ждёт, не трогая сервер.

7 → 0ручных патчей понадобилось
51пакет вычищен подчистую
8несовместимостей найдено
24.04система под панелью теперь

Что произошло

Панель официально поддерживает Ubuntu 20.04, 22.04 и 24.04

На сервере стояла 26.04 — вышла слишком недавно. Установщик FastPanel читает /etc/os-release и на незнакомой версии просто отказывается работать. Это не каприз: пакеты панели собраны под конкретный набор системных библиотек.

Обойти проверку версии оказалось легко. Гораздо интереснее было то, что началось после неё.

  1. 01

    Вход по ключу

    Настроили SSH-ключ. Попутно выяснилось, что домен в первой команде не существовал вовсе: правильный адрес — m.kurs.dn.ua, с точкой.

  2. 02

    Обход проверки версии

    Прочитали установщик, не запуская. Подключили репозиторий 24.04 с низким приоритетом — ради четырёх старых библиотек. Симуляция показала: ничего не удаляется, libc6 не трогается. Можно.

  3. 03

    Семь правок в чужом коде

    Конфиги под новую ОС, ветка MySQL 8.4 вместо 8.0, PHP 8.5 вместо 8.3, директивы Apache и ProFTPD, правило AppArmor. Панель поднялась, сертификат Let's Encrypt выпустился.

  4. 04

    Стена

    Создание сайта роняло панель наглухо — обращение по пустому указателю в обработчике Apache. Удаление сайта роняло её же. Dovecot не стартовал: в 26.04 это версия 2.4 с полностью переписанным форматом конфигов. Дальше чинить означало переписывать панель.

  5. 05

    Полная очистка

    51 пакет, 350 МБ данных, лишние пользователи, репозитории, кроны. Ядро, загрузчик и SSH намеренно не тронули — они попали в список «установлено вчера» из-за параллельного обновления Ubuntu, и их удаление сделало бы сервер незагружаемым.

  6. 06

    Контейнер

    Ubuntu 24.04 внутри Docker, systemd внутри контейнера, сеть — хостовая. Установка прошла штатно с первого раза. Ни одного патча. Dovecot запустился сам.

Стена несовместимости

Восемь мест, где новая система расходится со старой

Каждая строка — отдельная поломка, найденная по логам и исправленная вручную. Вместе они и есть ответ на вопрос «почему нельзя просто обойти проверку версии».

КомпонентВ чём расхождение
libxml2Библиотека сменила версию: libxml2.so.2libxml2.so.16. Старого файла в системе просто нет, а PHP панели слинкован с ним.
PHPВ 26.04 нет ветки 8.3 — там 8.5. Системный php-common прямо конфликтует с пакетами 8.3.
MySQL 8.4Удалён параметр default-authentication-plugin. Панель пишет его в конфиг — сервер отказывается стартовать.
mod_rpafВерсия 0.6 против 0.8: директивы называются RPAFenable, а не RPAF_Enable. Apache падал на второй строке конфига.
ProFTPD 1.3.9Убраны пять директив разом: ShowSymlinks, TimeoutNoTransfer, TimeoutStalled, ListOptions, AllowOverwrite.
AppArmorНовый профиль разрешает читать конфиги только владельцу файла. Панель создаёт их от своего пользователя, а читаются они от root.
Dovecot 2.4Требует dovecot_config_version первой строкой и другую структуру секций. Панель пишет конфиги в формате 2.3.
Конфиги панелиВнутри панели нет описаний для новой ОС — ни файлов ubu26.yml, ни ключа ubu26 в таблице обработчиков PHP. Отсюда падения и «record not found».

Решение

Дать панели ту систему, которую она ждёт

Контейнер здесь работает не как изолированная машина, а как слой совместимости. Внутри — Ubuntu 24.04 со всеми библиотеками нужных версий. Снаружи сервер остаётся на 26.04 и получает обычные обновления безопасности.

Сеть у контейнера общая с сервером. Это принципиально: FTP в пассивном режиме и почта плохо переживают проброс портов, а так все службы слушают прямо на внешнем адресе — снаружи выглядит ровно так, будто панель стоит на самом сервере.

Что проверялиНа сервереВ контейнере
Приём почты (Dovecot)не запускалсяработает
Создание сайтападение панелиработает
Удаление сайтападение панелиработает
Патчей для запускасемьни одного
ОС под панелью26.04, не поддерживается24.04, поддерживается

Честная оговорка. systemd внутри контейнера требует привилегированного режима, и вендор такую схему официально не поддерживает. Работает — но если что-то сломается, в поддержку FastPanel с этим не обратишься. SSH контейнера пришлось вынести на отдельный порт: основной занят самим сервером.

Передышка

Аквариум

Без практического смысла — просто потому, что попросили. Потяните мышью, чтобы повернуть; колесо приближает.

Потяните, чтобы повернуть · колесо — приближение

Из чего собрано

Стек

Внутри контейнера — обычный набор веб-сервера, ровно тех версий, которые панель ожидает увидеть. Снаружи сервер живёт своей жизнью и получает штатные обновления безопасности Ubuntu.

СлойЧто работает
СерверUbuntu 26.04 LTS, Docker
КонтейнерUbuntu 24.04 LTS с systemd внутри
Вебnginx впереди, Apache позади, PHP 8.3
База данныхMySQL 8.0
ПочтаExim и Dovecot
ФайлыProFTPD
СертификатLet’s Encrypt, продлевается сам