Maran

Панель хостинга с открытым исходным кодом

Панель управления хостингом, которая держит root при себе

Сайты, версии PHP, SSL, базы данных, передача файлов, резервные копии и брандмауэр — из браузера, с отдельным кабинетом для каждого клиента и API, которым управляет ваша биллинговая система.

curl -sSL https://get.maran.innovayse.com | bash

Одна команда на чистом сервере. Все проверки проходят до того, как что-то изменится.

Панель — рисунок, а не скриншот: аккаунты, сайты и журнал аудита на одном сервере.

Один процесс с root

Панель работает без привилегий. Root держит небольшой демон на Rust, и в его контракте нет операции, запускающей переданную ей программу.

Никаких shell-строк

Домен проверяется как домен, а не экранируется в командную строку. В нём неоткуда взяться переводу строки, который завершит одну директиву и начнёт другую.

Настоящие пользователи Linux

Каждый аккаунт — системный пользователь со своим домашним каталогом, своим пулом php-fpm под своим uid и своей квотой.

Готов к биллингу

API провижининга создаёт, приостанавливает и удаляет аккаунты, так что биллинг ведёт хостинг без участия человека.

Чем он управляет

Сайты и PHP

Статические, PHP и реверс-прокси сайты с алиасами. Агент проверяет каждый отрендеренный vhost силами самого веб-сервера и откатывает его, если перезагрузка отказала.

SSL, который продлевается сам

ACME с проверкой HTTP-01, загрузка собственных сертификатов, продление за тридцать дней до истечения и ключи в root-хранилище вне домашних каталогов.

Базы данных и передача файлов

База и ограниченный пользователь на аккаунт, SFTP в chroot с настоящим uid аккаунта, лимиты по тарифу на то и другое.

Копии и брандмауэр

Резервные копии файлов и баз с восстановлением по одной, управляемый брандмауэр и мониторинг состояния сервера.

Журнал аудита

Только на дозапись, с каждым входом и каждым изменением, и экран, который открывается только администраторам.

Подписанные обратимые обновления

Обновления подписаны, делают дамп базы до того, как что-то заменить, и откатываются одной командой.

От пустого сервера до аккаунта хостинга

  1. Установить

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

  2. Открыть одноразовую ссылку

    Установщик печатает ссылку, которая создаёт первого администратора. Больше её не создать ничем, и она сгорает при использовании.

  3. Создать аккаунт

    Аккаунт разворачивается на хосте как настоящий пользователь Linux со своим домом, пулом и квотой — и его кабинет передаётся клиенту.

Три процесса, и root принадлежит одному из них

Это разделение — главное проектное решение продукта. Всё остальное на этой странице следует из него.

  1. maran-api

    Сама панель

    Работает от
    непривилегированного системного пользователя
    Держит
    всю бизнес-логику и единственное подключение к базе
    далее
  2. maran-agent

    Единственный процесс с root

    Работает от
    root
    Держит
    ничего — без состояния, без базы, без собственной конфигурации

    с root

    далее
  3. PostgreSQL

    Данные панели

    Работает от
    собственного пользователя
    Держит
    аккаунты, сайты, журнал аудита — на unix-сокете, без TCP-порта вовсе

Панель просит у агента именованные операции с типизированными и проверенными аргументами. Нет операции, которая запускает переданную программу, и нигде между ними нет shell-строки — поэтому множество того, что можно заставить сделать корневой процесс, конечно, записано и поддаётся ревью.

Работает там, где уже работают ваши серверы

Одна команда на чистом сервере с любой из этих систем, на x86_64 или aarch64.

Посмотреть требования
  • Ubuntu

    22.04 · 24.04 LTS

  • Debian

    12 · 13

  • AlmaLinux

    9 · 10

  • Rocky Linux

    9 · 10

Систему вне этого списка установщик отвергает, а не угадывает: он знает раскладку пакетов и имена служб каждого поддерживаемого семейства. В продакшене установка нативная, Docker используется только в разработке.

Где он сегодня

В активной разработке к первому функциональному релизу. Ниже — что есть, и чего нет.

Собрано и работает

  • Аккаунты как настоящие пользователи Linux, с квотами, приостановкой и удалением, доходящими до хоста
  • Сайты — статические, PHP и реверс-прокси — с проверкой конфигурации и откатом при отказе
  • Несколько версий PHP одновременно, отдельный пул на аккаунт и версию
  • SSL по ACME с продлением за тридцать дней, ключи вне домашних каталогов
  • Базы данных и SFTP-логины с лимитами по тарифу и одноразовыми паролями
  • Резервные копии, управляемый брандмауэр, мониторинг и журнал аудита только на дозапись

Пока нет

  • Пока нет веб-менеджера баз данных и файлового менеджера в браузере
  • Сертификаты только по HTTP-01 — wildcard появятся вместе с управлением DNS
  • Почта, DNS, реселлерские аккаунты и управление несколькими серверами — после первого релиза

Открытый код, который остаётся вашим

Maran публикуется под Business Source License 1.1 компанией Innovayse LLC и переходит в Apache 2.0 29 августа 2030 года. Дата записана в самой лицензии, а не обещана.

  • Ставьте и размещайте на нём собственных клиентов, в продакшене, бесплатно
  • Читайте, меняйте и участвуйте — исходный код открыт, авторское право остаётся за автором вклада
  • Нельзя предлагать сам Maran третьим лицам как управляемый сервис панели
  • Нельзя перепродавать или релицензировать его как собственный коммерческий продукт

Безопасен по устройству, а не по обещанию

Четыре свойства кода — каждое либо верно, либо нет, и каждое проверяется чтением.

  • Никаких shell-строк

    Домен проверяется как домен — буквы, цифры, дефисы, точки, — а не экранируется в командную строку. В нём неоткуда взяться переводу строки, который завершит одну директиву и начнёт другую.

  • Конфигурацию проверяет сам сервер

    Каждая запись рендерится, атомарно переименовывается на место и проверяется самой службой. Если проверка или перезагрузка отказали, файл откатывается.

  • Агент проверяет, кто спрашивает

    Учётные данные пира читаются из сокета до рассмотрения операции, поэтому демон знает, какой процесс на другом конце, а не верит тому, что ему сказали.

  • Чужая строка отвечает 404

    Запрос чужого ресурса получает «не найдено», а не «запрещено», — ошибка никогда не подтверждает, что строка существует.

Для кого он сделан

Мультиарендность заложена с первого релиза, а не добавлена позже, — и это видно по тому, кому он подходит.

  • Хостинг-компаниям

    Кабинет на каждого клиента, тарифы, ограничивающие аккаунт, и API провижининга, которым биллинг создаёт аккаунты без участия человека.

  • Агентствам и студиям

    Сайты клиентов на одном сервере, каждый — свой пользователь Linux со своей квотой и версией PHP, плюс журнал аудита, который отвечает, кто что менял.

  • Одному серверу, одному владельцу

    Всё, что нужно одной машине: установка одной командой, обновления подписанными артефактами и откат ещё одной командой.

Что нового

Свежий релиз и последнее написанное о том, как всё это устроено.

О чём спрашивают первым делом

Короткие ответы. Остальные — на странице вопросов.

Что такое Maran?
Панель управления веб-хостингом для серверов Linux. Вы ставите её на сервер и управляете сайтами, версиями PHP, SSL-сертификатами, базами данных, файлами, резервными копиями и брандмауэром из браузера, с отдельным кабинетом для каждого клиента и API, которым управляет биллинговая система.
Это бесплатно?
Панель открыта по Business Source License 1.1 и бесплатна для самостоятельного хостинга, включая размещение собственных платящих клиентов. Лицензия запрещает другое — предлагать сам Maran как управляемый сервис панели или перепродавать его как свой продукт. Коммерческие модули распространяются отдельно и требуют ключа; цены пока не опубликованы.
Можно ли использовать его в своём хостинговом бизнесе?
Да. Размещение собственных клиентов прямо разрешено лицензией, а мультиарендность заложена в продукт с первого релиза, а не добавлена позже.
Какие дистрибутивы поддерживаются?
Ubuntu 22.04 и 24.04 LTS, Debian 12 и 13, AlmaLinux 9 и 10, Rocky Linux 9 и 10, на x86_64 и aarch64. Систему вне этого списка установщик отвергает, а не пытается угадать её раскладку пакетов.

Прочитайте, как это устроено, прежде чем доверить этому root

Архитектура, контракт между панелью и агентом и то, что установщик делает с сервером — записано, а не пересказано.

Открыть документацию