Skip to content

Releases: Logmen/MonoPanel

MonoPanel 0.8.10

Choose a tag to compare

@github-actions github-actions released this 24 Sep 13:53

v0.8.10 — ротация логов сайтов, трассировки slow-лога на EL / site log rotation, slow-log backtraces on EL

Русский

  • Логи сайтов в /var/www/<логин>/data/logs теперь ротируются: раньше их не ротировал никто, и они росли без ограничений. Файл /etc/logrotate.d/monopanel-sites — по блоку на аккаунт, logrotate работает правами самого аккаунта: раз в неделю или раньше, если лог перевалил за 100 МБ, восемь копий, сжатые начиная со второй. Панель переписывает файл при создании и удалении аккаунта и при старте, поэтому после обновления ротация сразу охватывает существующие аккаунты.
  • nginx теперь действительно переоткрывает логи сайтов. Его рабочие процессы не могли зайти в data/logs и после USR1 — в том числе после ночной ротации самого nginx — продолжали писать в старые файлы, а в журнал nginx каждую ночь падали ошибки «Permission denied». Группа веб-серверов получила проход через data/logs.
  • Логи сайта принадлежат аккаунту с правами 0660: так их может ротировать и сжимать logrotate на EL9.
  • На EL в slow-логе php-fpm появились трассировки PHP: панель ставит небольшой модуль политики SELinux monopanel, который разрешает php-fpm подключаться к своим рабочим процессам через ptrace.
  • mp update apply запоминает найденный релиз: после обновления статус больше не называет последней версию, которую видела прошлая проверка.
  • Документация сверена с кодом: справочник CLI и API в docs/04 переписан по настоящим командам и эндпоинтам, в быстром старте README исправлены mp db create (флага --generate нет, пароль генерируется и так) и выпуск сертификата панели (mp ssl panel issue), скриншоты пересняты с панелью Valkey.

English

  • Site logs in /var/www//data/logs now rotate: nothing rotated them before, and they grew without limit. /etc/logrotate.d/monopanel-sites has a stanza per account, and logrotate works with that account's rights: weekly, or sooner once a log passes 100 MB, eight copies compressed from the second one on. The panel rewrites the file when accounts come and go and at start, so an upgraded server covers its existing accounts at once.
  • nginx now really reopens site logs. Its workers could not enter data/logs, so after USR1 — including nginx's own nightly rotation — they kept writing into the old files, and nginx logged "Permission denied" errors every night. The web server group may now pass through data/logs.
  • A site's logs belong to its account with mode 0660, so logrotate on EL9 can rotate and compress them.
  • On EL the php-fpm slow log now gets PHP backtraces: the panel installs a small SELinux policy module, monopanel, that lets php-fpm attach to its own workers with ptrace.
  • mp update apply remembers the release it found: after an update the status no longer calls the version the previous check saw the latest.
  • The documentation was checked against the code: the CLI and API reference in docs/04 is rewritten from the actual commands and endpoints, the README quick start fixes mp db create (there is no --generate; the password is generated anyway) and the panel certificate (mp ssl panel issue), and the screenshots are retaken with the Valkey panel.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.9

Choose a tag to compare

@github-actions github-actions released this 24 Sep 11:27

v0.8.9 — Valkey на аккаунт: отдельные экземпляры для кеша и PHP-сессий / Valkey per account: separate instances for the cache and PHP sessions

Русский

  • Valkey на аккаунт. mp stack install valkey ставит Valkey из дистрибутива (где его нет — Ubuntu 22.04, Debian 12 без backports — Redis с тем же протоколом) и выключает общий экземпляр пакета, который слушал 127.0.0.1:6379 без пароля для всех аккаунтов сервера. Каждому аккаунту можно создать два отдельных экземпляра — для кеша и для PHP-сессий: mp valkey add cache|sessions --user <логин> [--memory МБ] или кнопка valkey на странице «Пользователи». Экземпляр работает от имени аккаунта с лимитом памяти и слушает только свой unix-сокет с правами 600: ни другие аккаунты, ни веб-сервер к нему не подключатся, TCP-порта нет. Кеш вытесняет самые редкие ключи и ничего не пишет на диск, экземпляр сессий сохраняет снимок раз в минуту, и сессии переживают перезапуск.
  • PHP-сессии сайта переводятся в Valkey одной настройкой: mp site set <домен> --sessions valkey или поле «PHP-сессии» в настройках сайта (обратно — files). Нужно расширение redis у ветки PHP сайта; пока сайт держит сессии в экземпляре, ни экземпляр, ни расширение удалить нельзя.
  • Удаление аккаунта уносит его экземпляры Valkey. Перенос между панелями переносит их настройки (данные — нет), а сессии сайта остаются в Valkey, только если приёмник может их обслужить.
  • На EL9 и EL10 экземпляры работают в домене SELinux redis_t. Проверено на Debian 13, Ubuntu 22.04, AlmaLinux 10 и Rocky 9.
  • Значок панели во вкладке браузера — тот же логотип, что в шапке.

English

  • Valkey per account. mp stack install valkey installs Valkey from the distribution (Redis with the same protocol where it has none — Ubuntu 22.04, Debian 12 without backports) and switches off the package's shared instance, which listened on 127.0.0.1:6379 without a password for every account on the server. Each account can get two separate instances, one for the cache and one for PHP sessions: mp valkey add cache|sessions --user <login> [--memory MB] or the valkey button on the Users page. An instance runs as the account with a memory limit and listens only on its own unix socket with mode 600: neither other accounts nor the web server can connect, and there is no TCP port. The cache evicts the least used keys and writes nothing to disk; the sessions instance saves a snapshot every minute, so sessions survive a restart.
  • A site moves its PHP sessions to Valkey with one setting: mp site set <domain> --sessions valkey or the PHP sessions field in the site settings (files to go back). The redis extension of the site's PHP version is needed; while a site keeps sessions in an instance, neither the instance nor the extension can be removed.
  • Deleting an account removes its Valkey instances. Moving an account to another panel brings their settings (not the data), and a site keeps its sessions in Valkey only where the receiver can serve them.
  • On EL9 and EL10 the instances run in the SELinux domain redis_t. Tested on Debian 13, Ubuntu 22.04, AlmaLinux 10 and Rocky 9.
  • The panel's browser tab icon is the same logo as in the header.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.8

Choose a tag to compare

@github-actions github-actions released this 24 Sep 09:07

v0.8.8 — CMS без --force и без риска для чужих баз, fail2ban в «Расширениях» / CMS installs without --force and without risk to other databases, fail2ban on the Extensions page

Русский

  • --force при установке CMS больше не удаляет чужие базы. Раньше он очищал базу с именем <логин>_, даже если её сделали вручную или она принадлежала другому сайту того же аккаунта с той же CMS: WordPress с --force на втором сайте стирал базу первого. Теперь очищается только база, которую панель создала для CMS этого сайта, в остальных случаях CMS получает новую базу. Подпись галочки на вкладке CMS и справка --force говорят об этом прямо.
  • mp cms install и вкладка CMS ставят CMS на только что созданный сайт без --force: нетронутая страница-заглушка панели считается пустым docroot.
  • «Расширения» и mp stack list показывают fail2ban — версию и состояние службы. Раньше установленный fail2ban выглядел там неустановленным.
  • Команда установки стала короче: curl -fsSL https://monopanel.app/install.sh | sh. Сайт и документация — https://monopanel.app.

English

  • --force no longer drops other databases when installing a CMS. It used to empty the database named _ even when it was made by hand or belonged to another site of the same account with the same CMS: WordPress with --force on a second site wiped the first site's database. Now only the database the panel made for this site's CMS is emptied; otherwise the CMS gets a new one. The CMS tab checkbox and the --force help say so.
  • mp cms install and the CMS tab install into a freshly created site without --force: the panel's own untouched placeholder page counts as an empty docroot.
  • The Extensions page and mp stack list show fail2ban with its version and service state; an installed fail2ban used to look missing there.
  • A shorter install command: curl -fsSL https://monopanel.app/install.sh | sh. The website and documentation live at https://monopanel.app.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.7

Choose a tag to compare

@github-actions github-actions released this 24 Sep 07:03

v0.8.7 — PHP-параметры для всех сайтов / server-wide PHP settings

Русский

  • Любой PHP-параметр теперь меняется либо для одного сайта, либо для всех сразу. Значения складываются из слоёв: панель → глобально → пресет → сайт. Пресет CMS по-прежнему задаёт то, что ей нужно, значение сайта важнее всех.
  • Глобальный слой: карточка «PHP-параметры для всех сайтов» на странице PHP, команды mp php ini, mp php ini set key=value, mp php ini unset key, API GET|PUT /php/settings (только администратор). Сохранение сразу пересобирает пулы всех PHP-сайтов.
  • Вкладка PHP сайта показывает источник «глобально» и порядок слоёв.

English

  • Any PHP setting can now be changed for one site or for all of them. Values stack in layers: panel → global → preset → site. A CMS preset still sets what it needs, and a site's own value wins.
  • The global layer: a "PHP settings for all sites" card on the PHP page, mp php ini, mp php ini set key=value, mp php ini unset key, and GET|PUT /php/settings (administrators only). Saving rebuilds the pools of every PHP site right away.
  • The site's PHP tab shows the "global" source and the layer order.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.6

Choose a tag to compare

@github-actions github-actions released this 22 Sep 20:53

MonoPanel 0.8.6

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.5

Choose a tag to compare

@github-actions github-actions released this 21 Sep 16:46

v0.8.5 — закрытая документация API / API reference behind sign-in

Русский

  • Документация API (/api/v1/docs), спецификация OpenAPI и JSON-схемы отдаются только вошедшим: сессия панели или API-токен. Аноним получает 401, браузер по ссылке на документацию уходит на страницу входа, токен переезда — 403. Без входа остаются только /health и /auth/login.
  • Stoplight Elements вшит в бинарник: страница документации больше не грузит скрипты с unpkg.com и получила строгий CSP — только свой origin, без inline-скриптов и eval.
  • /health не сообщает версию панели анониму: живость видна всем, номер сборки — только вошедшему. Экран входа версию не показывает.
  • Внимание: скриптам, которые читали openapi.json без авторизации, теперь нужен заголовок Authorization: Bearer <токен>.

English

  • The API reference (/api/v1/docs), the OpenAPI specification and the JSON schemas are served to signed-in callers only: a panel session or an API token. Anonymous requests get 401, a browser following the docs link lands on the sign-in page, a migration token gets 403. Only /health and /auth/login stay open.
  • Stoplight Elements is bundled into the binary: the reference no longer loads scripts from unpkg.com and has a strict CSP — own origin only, no inline scripts, no eval.
  • /health no longer tells anonymous callers the panel version: liveness is public, the build number is for signed-in callers. The sign-in screen does not show it either.
  • Note: scripts that read openapi.json without credentials now need an Authorization: Bearer header.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.4

Choose a tag to compare

@github-actions github-actions released this 15 Sep 07:25

v0.8.4 — надёжное самообновление / reliable self-update

Русский

  • Апдейтер повторяет запросы к GitHub при обрыве соединения, таймауте и ответе 5xx: список релизов, поиск релиза без API и скачивание пакета, три попытки с паузами 5 и 20 секунд. Оборванная на середине загрузка начинается заново, недокачанный файл не остаётся. Раньше один таймаут до api.github.com срывал обновление целиком.
  • Ответ 404, отказ токена, исчерпанный лимит API и ошибки диска не повторяются.

English

  • The updater retries GitHub requests on a dropped connection, a timeout or a 5xx: the release list, the release lookup without the API and the package download, three attempts with 5 s and 20 s pauses. A download that breaks off halfway starts over and leaves no partial file. Before, a single timeout to api.github.com failed the whole update.
  • A 404, a refused token, an exhausted API quota and disk errors are not retried.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.3

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:35

v0.8.3 — повторы сетевых загрузок / retries for network fetches

Русский

  • Поиск последнего релиза на GitHub и начало загрузки дистрибутива CMS повторяются при обрыве соединения или ответе 5xx: три попытки с паузами 5 и 20 секунд. Раньше один таймаут до github.com валил установку Joomla целиком. Ответ 404 и отмена задачи не повторяются.
  • Всё из 0.8.2: статика со сжатием и кэшем (редактор 1,2 МБ вместо 4,7 МБ), предзагрузка редактора, перезагрузка вкладки после обновления панели, ожидание dpkg-lock.

English

  • The GitHub latest-release lookup and the start of a CMS download are retried on a dropped connection or a 5xx: three attempts with 5 s and 20 s pauses. Before, a single timeout to github.com failed a Joomla install outright. A 404 and a cancelled job are not retried.
  • Everything from 0.8.2: compressed and cached assets (editor 1.2 MB instead of 4.7 MB), editor preload, tab reload after a panel update, waiting for the dpkg lock.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.2

Choose a tag to compare

@github-actions github-actions released this 15 Sep 05:38

v0.8.2 — редактор открывается быстрее / faster editor

Русский

  • Статика панели отдаётся со сжатием gzip и кэшем: хешированные чанки кэшируются браузером на год, остальное перепроверяется по ETag (304). Цепочка редактора Monaco на первом заходе — 1,2 МБ вместо 4,7 МБ, на повторном — только пять коротких 304.
  • Файловый менеджер подгружает редактор заранее, пока открыт список файлов, и показывает «Редактор загружается…», пока он не готов.
  • После обновления панели открытая вкладка сама перезагружается на следующем переходе, чтобы не смешивать старую сборку с новой.
  • Пропавший файл сборки и неизвестный путь /api/… отвечают 404, а не страницей панели.
  • apt ждёт освобождения блокировки dpkg до 10 минут вместо падения, если на свежем Ubuntu работает unattended-upgrades.

English

  • Panel assets are served gzip-compressed with caching: hashed chunks are cached for a year, everything else revalidates by ETag (304). The Monaco editor chain is 1.2 MB instead of 4.7 MB on a first visit and just five small 304s on the next.
  • The file manager preloads the editor while the file list is open and shows "Loading the editor…" until it is ready.
  • After a panel update an open tab reloads itself on the next navigation, so the old build never mixes with the new one.
  • A missing build file or an unknown /api/… path now answers 404 instead of the panel page.
  • apt waits up to 10 minutes for the dpkg lock instead of failing while unattended-upgrades runs on a fresh Ubuntu.

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.

MonoPanel 0.8.1

Choose a tag to compare

@github-actions github-actions released this 14 Sep 07:05

v0.8.1 — firewall: порядок правил и защита от самоблокировки / firewall rule order and lockout guard

Русский

  • Правила firewall собираются по полкам: allow с источником → deny → всегда открытые порты и allow без источника. «deny --port 8443» вместе с «allow --port 8443 --source » теперь означает «панель только с VPN»; раньше deny шёл первым и закрывал порт для всех.
  • Защита от самоблокировки: deny без источника на SSH или порт панели принимается только при наличии allow с источником; удаление последнего такого allow, а также deny или ban, накрывающие ваш текущий адрес, отклоняются с понятной подсказкой.
  • Статус показывает закрытые порты и кому они открыты: строка в «mp firewall status», теги и подсказка о порядке на странице Firewall, объяснение в «mp firewall deny --help».

English

  • Firewall rules are assembled in tiers: allows with a source → denies → always-open ports and allows without a source. "deny --port 8443" together with "allow --port 8443 --source " now means "panel only from the VPN"; before, the deny came first and closed the port to everyone.
  • Lockout guard: a source-less deny on SSH or the panel port is accepted only once an allow with a source exists; removing the last such allow, or adding a deny or ban that covers your current address, is refused with a clear hint.
  • Status lists restricted ports and who still gets in: a line in "mp firewall status", tags and an order hint on the Firewall page, an explanation in "mp firewall deny --help".

Обновление

mp update
mp update apply

Панель скачает пакет для своей ОС, проверит подпись и перезапустится сама.