РазделВозможности
Что умеет
Всё перечисленное проходит через один REST API и доступно в Web UI, CLI и TUI.
Под каждым заголовком — команды mp этой области.
Сайты
mp site add|set|apply|fix|suspend|rm|logs, mp site nginx|php|tls, mp selinux
- Три режима:
fpm(nginx → php-fpm),apache(nginx → Apache на loopback 8080 через mod_proxy_fcgi) иproxy(nginx → свой backend). - У каждого сайта свой пул php-fpm, ACL для группы
monopanel-web, страница-заглушка и автоматический сертификат; приостановленный сайт отдаёт страницу 503. - Сайт слушает и на IPv6-адресе сервера (
--ipv6, по умолчанию первый глобальный;none— только IPv4). Заголовки безопасности одним флагом (--security-headers: X-Content-Type-Options, X-Frame-Options, Referrer-Policy), ограничение частоты запросов с одного адреса на динамические страницы (--rate-limit 10— запросов в секунду, статика не считается, лишним — 429). - Доступ только с перечисленных адресов (
--allow), HSTS при принудительном HTTPS, свои директивы nginx вsites/<domain>.d/*.conf.mp site nginx <domain> --set файлзаписывает их с проверкойnginx -tи откатом;mp site php <domain>показывает действующие PHP-параметры и откуда каждый взялся. - Пресеты CMS
--preset wordpress|joomla|bitrix|opencart(mp site presets): свои location в nginx (ЧПУ,/apiJoomla,urlrewrite.phpБитрикса,_route_OpenCart, закрытые служебные каталоги, запрет PHP в uploads) и PHP-параметры по умолчанию. Битрикс настраивается по правилам BitrixVM: opcache на 100 000 файлов, без open_basedir.
PHP 5.6–8.5
mp php list|install|remove, mp php ext list|enable|disable, mp php ini [set|unset]
- Ветки из Sury, PPA ondrej или Remi, сколько угодно параллельно; у каждой свой php-fpm и
99-monopanel.ini. - Параметры php.ini складываются из слоёв: панель → глобально (
mp php ini set, страница PHP) → пресет → сайт (mp site set --ini). Любой параметр меняется для одного сайта или для всех сразу. - Расширения ветки включаются и выключаются (Debian/Ubuntu —
phpenmod/phpdismod, EL — правкаextension=в ini ветки Remi, затем перезапуск php-fpm). Действует на все сайты ветки: мастер php-fpm один на версию. - Расширения, которые есть в репозитории, но не установлены (memcache, redis, imagick …), показываются в том же списке; включение ставит пакет.
CMS
mp cms list|install <домен> <cms>
- Ставит WordPress, Joomla, OpenCart и 1С-Битрикс в существующий сайт: дистрибутив берётся с сайта производителя, распаковывается в docroot от имени клиента, создаётся своя база, сайт получает пресет.
- Установщик — штатный: wp-cli, CLI-установщики Joomla и OpenCart, веб-мастер Битрикса, который панель проходит сама. Для Битрикса — пробная редакция Старт, Стандарт, Малый бизнес или Бизнес, чистая установка из Маркетплейса или демо-сайт.
- Доступы администратора показываются один раз. В Web UI — вкладка «CMS» на странице сайта.
Базы данных
mp stack install percona|mysql, mp db create|list|passwd|rm, mp db config [set|unset]
- Percona Server или MySQL 8.4 LTS; root через
auth_socket(на EL панель сама переводит его с временного пароля пакета), настройки под объём памяти. - Параметры сервера меняются в панели: значение встаёт на место панельного в
zz-monopanel.cnf, перед перезапуском —mysqld --validate-config, при неудачном запуске прежние параметры возвращаются сами. - Базы называются
<login>_<name>, сгенерированные пароли проходятvalidate_password;mysql_native_passwordвключается только при PHP < 7.4.
Valkey на аккаунт
mp stack install valkey, mp valkey add|list|restart|rm cache|sessions --user <login> [--memory МБ], mp site set <домен> --sessions valkey|files
- У аккаунта два отдельных экземпляра: кеш (allkeys-lru, без записи на диск) и PHP-сессии (volatile-lru, снимок раз в минуту — сессии переживают перезапуск).
- Каждый — systemd-юнит
monopanel-valkey-<login>-<cache|sessions>от имени пользователя с лимитом памяти. Слушает только unix-сокет/run/monopanel-valkey/<login>-<cache|sessions>/valkey.sockс правами 600: ни другие аккаунты, ни веб-сервер к нему не подключатся, TCP-порта нет вовсе. На EL экземпляры работают в домене SELinuxredis_t. - Valkey берётся из дистрибутива (где его нет — Ubuntu 22.04, Debian 12 без backports — Redis с тем же протоколом); общий экземпляр из пакета выключается.
- Сессии сайта переводятся в Valkey одной настройкой (нужно расширение redis у ветки PHP сайта); пока сайт держит там сессии, ни экземпляр, ни расширение не удалить. Сессии блокируются phpredis (
redis.session.locking_enabled, как у файлов), ключиredis.session.*настраиваются в PHP-параметрах. - В Web UI — кнопка valkey на странице «Пользователи» и поле «PHP-сессии» в настройках сайта.
TLS
mp ssl issue|list|renew|rm, mp site tls <домен>, mp ssl panel issue|import|self-signed, mp dns-provider add
- lego: HTTP-01 через webroot nginx, DNS-01 (Cloudflare, Hetzner, DigitalOcean, Gandi, deSEC, Namecheap, RFC2136) для wildcard, автопродление за 30 дней.
- Сертификат самой панели и сертификаты сайтов ведутся раздельно: панель заказывает только для своего имени и подхватывает его на лету, сайт заказывает для домена с алиасами и сам переключается на HTTPS. Занятый сертификат не удалить.
- Готовые сертификаты (купленные, корпоративные, выпущенные в другом месте) —
mp ssl import --cert --keyили кнопка «импорт» у сайта на странице SSL. Сайты, чьи имена сертификат покрывает, переходят на него; сертификат Let's Encrypt панель дальше продлевает сама, любой другой — нет.
Почта
mp mail install|status|settings|domain|box|alias|webmail
- postfix + dovecot + opendkim: домены, ящики (пароли и квоты в панели, Maildir у
vmail), алиасы и catch-all, IMAP/POP3/submission с сертификатом панели, подпись DKIM, sieve-фильтры. - Домен «только отправка»: почту домена принимает провайдер, здесь — подпись DKIM и отправка писем сайтов. Домен-приёмник (
--lenient) примет письма и от криво настроенных отправителей. mp mail domain dnsпоказывает нужные MX, SPF, DKIM, DMARC и PTR и проверяет их по публичным резолверам.- Вебпочта Roundcube ставится отдельным сайтом или на порту почтового хоста (
--port 2096— без своей записи в DNS и своего сертификата). - Подробнее — docs/06-mail.md.
Бэкапы
mp backup target add|run|list|snapshots|restore
- restic в local, SFTP, S3, B2 или REST: файлы, дампы MySQL и копия panel.db.
- Хранение по дням, неделям и месяцам, ежедневное расписание; восстановление в
<data>/restore/<snapshot>или на место.
Файлы
mp files ls|put|get|mkdir|rm|mv|chmod|extract|size
- Файловые операции выполняет
monopanel fsopчерез helper с необратимым сбросом привилегий; пути — относительно домашнего каталога. - В Web UI — файловый менеджер с редактором: обзор каталога, загрузка перетаскиванием, права, распаковка архивов. Файлы правятся в редакторе VS Code (Monaco): подсветка php, html, css, js, sql, yaml и ini, поиск и замена, мультикурсор, свёртка, палитра команд по F1.
- Вкладка «Файлы» в карточке сайта открывается сразу в его docroot.
Пользователи, SFTP и SSH
mp user add|set|list|show|totp-reset|rm, флаги --shell|--sftp-only --password
- Аккаунт панели — это unix-пользователь. SFTP-only — chroot в
/var/www/<login>черезsshd_config.d/monopanel.conf; пароль общий для панели и SFTP; shell выдаётся флагом и вместе с ним — доступ кmpчерез локальный сокет (группаmonopanel-cli); запросы к сокету из процессов php-fpm, Apache и nginx отклоняются. mp user rm <login> [--purge]удаляет аккаунт вместе с сайтами, базами, cron, app-сервисами и сертификатами.- Общая папка (
mp user share add <гость> --site <домен> --path <папка> [--no-php]): каталог сайта одного аккаунта монтируется (bind, юнит systemd) в дом другого — гость видит его после входа по SFTP и ничего больше, файлы читают и пишут оба аккаунта и веб-сервер (ACL),--no-phpзапрещает сайту выполнять PHP из этой папки,--entry(илиmp user share entry) делает папку точкой входа — сессия SFTP начинается сразу в ней. Дом гостя не меняется: chroot остаётся root-овым, изоляция аккаунтов — прежней. Файл, загруженный по SFTP с правами 0644, другая сторона читает и удаляет, но не переписывает на месте — так работает маска ACL;mp site fixснимает это ограничение с уже лежащих файлов.
Cron
mp cron add|list|set|enable|disable|rm
- Crontab пользователя целиком собирается из базы панели; в PATH есть
~/data/binс php нужной версии.
App-сервисы
mp app add|set|start|stop|restart|logs|rm
- systemd-юнит
monopanel-app-<login>-<name>от имени пользователя для gunicorn, node, ботов: команда, рабочий каталог и env-file внутри домашнего каталога, автозапуск, журнал через journalctl.
Apache и расширения
mp stack install apache, mp stack install|remove memcached|jpegoptim|git|composer|sphinx, mp stack memcached --memory-mb --max-conn
- Apache 2.4 на Debian/Ubuntu: mpm_event + proxy_fcgi,
conf-available/monopanel.conf. - Страница «Расширения» в Web UI: memcached (только 127.0.0.1, память и число соединений настраиваются, перезапуск при смене), jpegoptim, git, composer (с getcomposer.org с проверкой контрольной суммы, работает на новейшей ветке PHP панели, повторная установка обновляет).
- Sphinx для 1С-Битрикс: Sphinx 2.2 из дистрибутива на Debian/Ubuntu, сборка Sphinx 3 с sphinxsearch.com на EL; индекс
bitrixпо эталону из настроек Битрикса, устаревший индекс на диске пересоздаётся, SphinxQL на 127.0.0.1:9306.
Firewall и Real IP
mp firewall enable|allow|deny|ban|unban|trust|untrust, mp stack install fail2ban, mp stack real-ip --cloudflare [--from CIDR]
- nftables
inet monopanelс policy drop; SSH, 80, 443 и порт панели открыты всегда; юнитmonopanel-firewall. - Allow с источником проверяются раньше deny:
deny --port 8443+allow --port 8443 --source <VPN>ограничивает панель адресами VPN. Deny, который запер бы вас самих (SSH или панель без allow с источником, ваш текущий адрес), панель отклоняет. - fail2ban с jail'ами sshd, nginx и панели. Jail'ы nginx читают логи каждого сайта (список обновляется вместе с сайтами), а не только общий лог. Доверенные адреса (
mp firewall trust <ip|сеть>) попадают вignoreip. Свои настройки — в/etc/fail2ban/jail.d/zz-local.local, панель этот файл не трогает. - Доверенные прокси для nginx
real_ip(сети Cloudflare встроены): allow-list и логи видят адрес клиента, а не прокси.
Метрики, логи и диагностика
mp metrics, mp site logs, mp logs <unit>, mp doctor
- Сэмплер раз в 10 с, точки по минутам за 30 дней; хвост логов сайтов и journald через агент.
- Логи сайтов ротируются раз в неделю или по 100 МБ от имени их аккаунта: восемь копий, сжатие со второй.
mp doctorпроверяет сервисы, конфиги, диск, сертификаты, DNS, задачи и дрейф сгенерированных файлов.- Журнал действий — кто и откуда входил, кто выпускал токены, кто что менял:
mp audit, страница «Журнал»,GET /system/audit; та же лента в/var/log/monopanel/audit.logстроками JSON с ротацией, входы и отказы — ещё и в journald.
Консоль в Web UI
POST /system/console
- Страница «Консоль»: команды
mpот имени вошедшего администратора с потоковым выводом, одноразовый токен на команду. - На дашборде у находок doctor есть кнопки «починить сайт» и «вернуть enforcing».
Перенос между панелями
mp migrate grant|plan|run
- Аккаунт целиком переезжает на другой сервер с MonoPanel. Источник выдаёт токен с областью на один аккаунт и только читает; приёмник разбирает конфликты (
planничего не меняет) и забирает аккаунт. - Файлы и дамп идут потоком насквозь; пароли панели, SFTP, MySQL и почты переезжают хешами, поэтому пользователи смены сервера не замечают.
- Подробнее — docs/07-migration.md.
Переезд с BitrixVM и FASTPANEL
mp migrate plan|run --from bitrixvm|fastpanel
- Тот же разбор и перенос, но с чужого сервера по ssh (пароль или ключ); источник только читается.
- BitrixVM: сайты из
/etc/nginx/bx, реквизиты базы из.settings.php; симлинки link-сайтов и пути вdbconn.phpи cron переписываются под новый дом. - FASTPANEL: аккаунт, сайты, бэкенды PHP, базы с хешами паролей, allow-списки, сертификаты и cron из её базы и файлов.
- Пресет CMS определяется по файлам сайта.
Обновления
mp update, mp update apply
- Панель находит новую версию в релизах этого репозитория, скачивает пакет для своей ОС, проверяет подпись ed25519 и ставит его отдельным systemd-юнитом. Если новая версия не отвечает, возвращается прежний бинарник.
Токены, 2FA и webhooks
mp token create|list|revoke, mp user totp-reset, mp webhook add
- Токен принадлежит аккаунту; администратор выпускает его и для другого аккаунта (
--user), root по локальному сокету — для единственного администратора без флагов. - TOTP 2FA с QR-кодом в Web UI, Bearer-токены, webhooks с подписью HMAC-SHA256 на события задач.
Языки
- Web UI на русском и английском: язык берётся из браузера (языки стран СНГ → русский, остальные → английский), переключается в «Настройках» и на экране входа, выбор запоминается в браузере.
- CLI и TUI говорят на языке локали терминала по тому же правилу;
MP_LANG=ru|enзадаёт его явно. Сообщения API, задач и диагностики — на английском. - Заглушка нового сайта и страница приостановленного показываются на языке браузера посетителя.
Чего пока нет
Собственные сборки PHP (используются Sury/Remi), проверенный Apache на EL, phpMyAdmin, дисковые квоты, cgroup-лимиты на сайт, DNS-сервер, WAF, несколько серверов из одной панели, apt/yum-репозиторий (пакеты выкладываются релизами, панель ставит их сама). Почта работает на всех одиннадцати ОС (dovecot 2.3 и 2.4, на EL — с SELinux в enforcing); контент-фильтра (rspamd) нет. Переезд — между двумя MonoPanel и с BitrixVM и FASTPANEL, без досинхронизации перед переключением DNS; другие панели и серверы без панели — в планах (docs/07-migration.md).