Radicale или Baïkal: что выгоднее и когда
Оба решают одну и ту же задачу — синхронизировать календари и контакты между телефоном, ноутом и почтовым клиентом по CalDAV/CardDAV, без Google и iCloud между вами и вашими данными. Оба легко ставятся на слабый VPS и работают годами без вмешательства. Но это два разных инженерных решения одной проблемы: один — файлы на диске и Python-процесс без интерфейса, другой — PHP-приложение с базой и веб-панелью администратора. Разница ощущается не в бенчмарках, а в том, кто и как будет с сервером работать после установки.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Короткий ответ: где проходит граница
И Radicale, и Baïkal — открытый код, оба бесплатны при любом числе пользователей. Разница не в лицензии, а в том, что вы получаете взамен на PHP, СУБД и веб-интерфейс.
Берите Radicale, если вы один администрируете сервер и не боитесь текстового конфига; если пользователей 1–5 и заводить их можно вручную командой htpasswd; если важно, чтобы весь стейт сервиса — это одна папка, которую бэкапит tar без базы данных вообще.
Берите Baïkal, если заводить пользователей и календари должен кто-то без доступа к консоли — например, вы администрируете сервер, а коллеги сами создают себе календари через браузер; если хочется видеть список пользователей и их коллекции глазами, а не через ls; если позже может понадобиться MySQL и более предсказуемая консистентность при параллельной записи.
Не берите ни то, ни другое, если нужны ещё файлы, заметки и совместное редактирование документов — оба сервиса намеренно ничего этого не делают, и в эту сторону разумнее сразу смотреть на Nextcloud, там CalDAV/CardDAV тоже есть, но ценой заметно большего стека.
Архитектура: файлы и процесс против PHP и базы
Radicale хранит данные как файлы. Каждый календарь и адресная книга — папка, каждое событие или контакт — отдельный файл .ics/.vcf в /var/lib/radicale/collections/collection-root/<пользователь>/. Сам Radicale — один Python-процесс без демонов, очередей и фонового кеша: он либо встроенный сервер (python3 -m radicale), либо WSGI-приложение под uWSGI/Gunicorn, если нужна параллельная обработка запросов.
Baïkal хранит данные в СУБД. Это PHP-приложение поверх библиотеки sabre/dav: события и контакты лежат в таблицах SQLite-файла или MySQL/MariaDB, а сам PHP-процесс просыпается на каждый HTTP-запрос через PHP-FPM и снова засыпает — постоянно висящего демона нет, но есть весь стек PHP-FPM + веб-сервер + (опционально) mysqld.
Из этого следует практическая разница, а не абстрактная:
- Что смотреть при отладке. У Radicale можно открыть текстовый файл события и увидеть ровно то, что видит клиент — без прослойки СУБД. У Baïkal состояние календаря смотрят либо через веб-панель, либо запросом к SQLite/MySQL.
- Перенос на другой сервер. У Radicale —
rsyncкаталогаcollections/и всё. У Baïkal при SQLite — копия файла плюсSpecific/иconfig/; при MySQL добавляетсяmysqldump. - Параллельная запись. SQLite сериализует блокировки на уровне файла — при редких коротких CalDAV-запросах это почти никогда не проблема, но на десятках клиентов с агрессивным push-sync MySQL/MariaDB у Baïkal ведёт себя предсказуемее.
- Единица отказа. У Radicale поломка одного файла — это поломка одного события, остальное живо. У Baïkal при повреждённой SQLite-базе рискует быть недоступна вся связка пользователя сразу.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверАдминистрирование: консоль против веб-панели
Здесь пролегает главная разница в опыте эксплуатации, и она важнее архитектуры файлов для большинства решений «что поставить».
У Radicale администрирование — это текстовые файлы. Новый пользователь — команда htpasswd -B /etc/radicale/users alice, права доступа — правки в [rights] секции конфига или отдельном файле с масками путей. Никакого веб-интерфейса для управления пользователями нет вообще — это осознанный выбор проекта в пользу минимализма, а не недоделка. Первый календарь и адресная книга обычно создаются автоматически клиентом при первом подключении; если клиент этого не делает, коллекцию можно создать вручную — пустой директорией с нужными правами.
У Baïkal есть веб-панель /admin/. После установки в браузере проходит мастер: часовой пояс, пароль администратора, выбор хранилища. Дальше в разделе Users and resources заводятся пользователи, а для каждого — календари и адресные книги мышкой, без консоли. Это именно та возможность, ради которой чаще всего выбирают Baïkal вместо Radicale: не потому что он «лучше» технически, а потому что не всем удобным пользователям сервера можно доверить SSH.
Практический пример разницы: нужно завести десятому сотруднику доступ к общему командному календарю. У Radicale это правка htpasswd плюс строка с маской пути в [rights] type = from_file. У Baïkal — то же действие в браузере: /admin/ → Users and resources → Add user → расшарить существующий календарь через права в панели. Оба варианта занимают пару минут, но разница в том, кто может это сделать: Radicale требует доступа к серверу, Baïkal — только браузера и логина администратора панели.
Ресурсы: сколько реально нужно RAM и CPU
Оба сервиса легковесны по меркам self-hosted софта, но не одинаково. Radicale — один Python-процесс без СУБД, Baïkal — PHP-FPM плюс опционально mysqld.
| Сценарий | Radicale | Baïkal |
|---|---|---|
| Личное использование, 1–3 устройства | 25–64 МБ (встроенный сервер) | 512 МБ VPS целиком (SQLite, ОС + nginx + PHP-FPM) |
| Малая команда, 5–15 клиентов | 64–256 МБ (uWSGI, 1–2 воркера) | 1 ГБ VPS (SQLite, пул PHP-FPM 2–3 воркера) |
| Команда 15–50 человек | 256–512 МБ (uWSGI, 2–4 воркера) | 2 ГБ VPS (MySQL/MariaDB, mysqld держит 150–300 МБ постоянно) |
Цифры Radicale — добавка сверх ОС и nginx перед ним, цифры Baïkal — весь сервер целиком, потому что PHP-FPM и веб-сервер там неотделимая часть стека. Это не значит, что Baïkal «тяжелее» в разы — просто у него больше движущихся частей: nginx, PHP-FPM с набором модулей (pdo_sqlite/pdo_mysql, xml, mbstring, curl), и опционально mysqld. Ключевой перелом — переход с SQLite на MySQL: он добавляет 150–300 МБ постоянного расхода независимо от нагрузки, тогда как у Radicale аналогичного скачка нет вообще, потому что СУБД там не предусмотрена в принципе.
Оба ориентира — не жёсткий потолок, а отправная точка: точные числа зависят от версии рантайма, набора модулей и профиля синхронизации клиентов. Подробный разбор с методикой замера под Radicale — в статье сколько RAM нужно для Radicale.
Установка, обновления и бэкап
Установка. Radicale ставится через pip в виртуальное окружение — три команды и systemd-юнит, зависимостей вне Python нет вообще, только nginx перед ним как TLS-терминатор. Baïkal требует полноценного веб-стека: nginx, PHP-FPM с шестью-семью модулями, опционально MariaDB, и веб-мастер после первого запуска. Оба варианта укладываются в 10–20 минут на пустой Ubuntu 24.04, но у Baïkal больше строк в команде apt install и больше точек, где можно ошибиться с версией PHP-сокета в конфиге nginx.
# Radicale — минимум зависимостей
apt install -y python3-venv python3-pip nginx
sudo -u radicale python3 -m venv /var/lib/radicale/venv
sudo -u radicale /var/lib/radicale/venv/bin/pip install radicale
# Baïkal — полноценный веб-стек
apt install -y nginx php-fpm php-cli php-curl php-dom php-mbstring \
php-xml php-sqlite3 unzip curl
Обновления. У Radicale — pip install --upgrade radicale и рестарт сервиса, формат файлового хранилища на диске стабилен годами. У Baïkal — скачать новый релиз с GitHub, накатить поверх старого каталога с сохранением Specific/ и config/, при переходе между мажорными версиями сверяться с changelog на предмет миграций схемы БД.
Бэкап. У Radicale — один tar каталога коллекций, и это весь стейт сервиса без исключений. У Baïkal с SQLite — тоже почти тривиально: файл db.sqlite плюс Specific/ и config/. У Baïkal с MySQL порядок важен, как у любой связки приложение-плюс-БД:
# Radicale
tar -czf radicale-backup-$(date +%F).tar.gz -C /var/lib/radicale collections
# Baïkal + MySQL
mysqldump -u baikal -p baikal > /root/backups/baikal-$(date +%F).sql
tar -czf baikal-files-$(date +%F).tar.gz -C /var/www/baikal Specific config
Оба сервиса можно поднять в Docker вместо systemd — готовые compose-файлы с разбором переменных окружения есть отдельно для каждого проекта.
Функции и ограничения: где кончается «просто календарь»
| Возможность | Radicale | Baïkal |
|---|---|---|
| Веб-панель администратора | нет | есть, /admin/ |
| Хранилище данных | файлы на диске | SQLite или MySQL/MariaDB |
| Импорт .ics из другого календаря | вручную копированием файла или через клиент | через панель, раздел Import |
| Тонкие права на общий календарь | файл масок [rights], гибко, но текстом | через панель, но модель прав проще |
| Внешняя авторизация (LDAP и т.п.) | плагином auth | не входит «из коробки» |
| Требования к железу | 1 vCPU, 512 МБ–1 ГБ с запасом | 1 vCPU, 1 ГБ с запасом (SQLite) |
Оба намеренно ничего не делают сверх CalDAV/CardDAV: нет файлового хранилища, нет заметок, нет канбана, нет шаринга приглашений по email так, как это делает Google Calendar. Radicale честно называет себя сервером протокола без интерфейса; Baïkal даёт интерфейс, но только для администрирования пользователей и коллекций — расписание в браузере вы всё равно смотрите через сторонний клиент вроде Thunderbird, а не в самой панели.
Отдельный нюанс, который решает выбор чаще, чем кажется: у Radicale модель прав [rights] мощнее, чем у Baïkal, потому что это произвольные маски путей с regex-подобным синтаксисом — можно описать сколь угодно тонкий сценарий («этот пользователь читает чужой календарь, но не пишет»). У Baïkal права настраиваются через панель более прямолинейно, зато без консоли.
Что заказать в MAATRIX под Radicale или Baïkal
Оба сервиса устанавливаются вручную на чистую Ubuntu 24.04 — готовых автоустановок из каталога приложений под них нет, но процесс короткий и разобран пошагово: установка Radicale на VPS и установка Baïkal на VPS.
| Сценарий | CPU | RAM | Диск |
|---|---|---|---|
| Radicale, 1–5 человек | 1 vCPU | 512 МБ – 1 ГБ | 20 ГБ |
| Baïkal, SQLite, 1–15 человек | 1 vCPU | 1 ГБ | 20 ГБ |
| Baïkal, MySQL, 15–50 человек | 2 vCPU | 2 ГБ | 30 ГБ |
Для домена под CalDAV/CardDAV подойдёт любая локация — задержка на синхронизации календарей не так критична, как для файлового веб-DAV с тысячами мелких обращений: событие и контакт передаются штучно, а не пачками. Лондон — разумный вариант по умолчанию: 45–60 мс из Москвы, европейский периметр хранения. Россия нужна, если данные обязаны лежать в РФ по 152-ФЗ и клиенты подключаются в основном из страны — тогда локальная задержка в единицы миллисекунд не даст даже теоретического повода для рассинхрона.
Оплата — картами российских банков, по СБП, криптовалютой или токеном MAAT, иностранная карта не требуется ни для одной локации.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Radicale или Baïkal для одного человека и трёх устройств?
Radicale — меньше зависимостей, меньше что может сломаться, и вы всё равно единственный, кто заводит себе устройства. Веб-панель тут не даёт преимущества, если пользователь один.
Нужна ли веб-панель, если пользователь тоже я?
Обычно нет — если вы сами и администратор, и единственный пользователь, htpasswd быстрее, чем открывать браузер и проходить формы. Панель Baïkal окупается, когда пользователей несколько и заводить их должны не вы.
Можно ли перенести данные между Radicale и Baïkal?
Прямого импорта между форматами хранения нет, но оба понимают стандартный .ics/.vcf: экспортируйте календарь клиентом (Thunderbird, DAVx5) в файл и импортируйте на новом сервере — либо через панель Baïkal, либо копированием файла в коллекцию Radicale.
Что проще обслуживать в долгосрочной перспективе?
Radicale — меньше поверхность для обновлений: один Python-пакет, без БД и веб-сервера в стеке приложения. Baïkal требует следить за версией PHP и, если выбран MySQL, за самой СУБД — на практике это не создаёт частых проблем, но точек внимания больше.
А если нагрузка вырастет — оба одинаково масштабируются?
Нет. У Radicale рост клиентов ограничивается числом воркеров WSGI и, в конце концов, тем, что это не рассчитанный на тысячи пользователей инструмент. У Baïkal с MySQL параллельная запись предсказуемее на десятках активных клиентов — если ожидается рост команды, это довод в его пользу с самого начала.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →