Установка Baikal на Debian 11 с Nginx и HTTPS
Baikal — лёгкий сервер CalDAV/CardDAV для синхронизации календарей и адресных книг между устройствами. В этой статье пошагово показано требуемое ПО, настройка пользователя, Nginx, SSL с certbot, первоначальная конфигурация через веб и подключение клиента Thunderbird. В конце есть чеклисты, сценарии отката, рекомендации по безопасности и резервному копированию.
О чём этот материал
- Полная последовательность установки Baikal на Debian 11 VPS с Nginx и Certbot
- Исправленные команды и практические пояснения
- Рекомендации по безопасности, резервному копированию и восстановлению
- Инструкции по подключению клиента Thunderbird и основные сценарии устранения неполадок
Основные варианты запросов, на которые отвечает статья
- установка Baikal
- Baikal CalDAV CardDAV сервер Debian 11
- настроить Baikal на VPS с Nginx
- Let’s Encrypt для Baikal
Содержание
- Требования
- Установка зависимостей
- Настройка брандмауэра
- Конфигурация Nginx
- Загрузка и распаковка Baikal
- Включение сайта, перезапуск Nginx, установка SSL
- Завершение настройки через веб
- Добавление первого пользователя
- Подключение Thunderbird
- Резервное копирование и восстановление
- Безопасность и жёсткая конфигурация
- Чеклисты, рунибук и критерии приёмки
- Часто задаваемые вопросы
Требования
Перед началом подготовьте следующее:
- Машина, доступная из интернета: домашний сервер с проброшенными портами или VPS
- Домен, который указывает на эту машину: в примерах используется yetanotherbaikalserver.xyz
- Права root или sudo для установки пакетов и изменения конфигурации
Эта инструкция ориентирована на Debian 11, но общая логика применима к другим дистрибутивам с небольшими изменениями.

Установка зависимостей
Создайте отдельного пользователя для деплоя приложения. Это уменьшит риск случайных изменений системных файлов:
sudo useradd -m -s /bin/bash -G sudo baikal
sudo passwd baikalПереключитесь на нового пользователя, если планируете выполнять действия от его имени:
su - baikalУстановите необходимые пакеты. Команда ниже включает PHP 7.4, FPM, SQLite, Nginx, certbot и базовые утилиты:
sudo apt update && sudo apt install -y php php7.4-fpm php7.4-xml php-sqlite3 sqlite3 nginx certbot python3-certbot-nginx ufw net-tools unzip wgetПояснения к пакетам:
- php7.4-fpm — запуск PHP через FPM для Nginx
- php7.4-xml — модуль XML, необходимый Baikal
- sqlite3 — используется по умолчанию как лёгкая база данных
- certbot python3-certbot-nginx — автоматическая установка TLS через Let’s Encrypt

Настройка брандмауэра
Откройте только нужные порты и разрешите HTTPS и HTTP. Используем ufw для простоты:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableПроверьте статус:
sudo ufw status verboseВажно: если у вас уже есть правила iptables или другой firewall manager, согласуйте правила, чтобы не закрыть доступ к SSH.

Конфигурация Nginx для Baikal
Baikal хорошо работает за Nginx. Создайте файл конфигурации сайта:
sudo nano /etc/nginx/sites-available/baikalПример простого server блока, который можно применять как стартовую конфигурацию. Обратите внимание на путь сокета PHP FPM, он может быть php7.4-fpm.sock:
server {
listen 80;
server_name yetanotherbaikalserver.xyz;
root /var/www/baikal/html;
index index.php;
rewrite ^/.well-known/caldav /dav.php redirect;
rewrite ^/.well-known/carddav /dav.php redirect;
charset utf-8;
location ~ /(\.ht|Core|Specific|config) {
deny all;
return 404;
}
location ~ ^(.+\.php)(.*)$ {
try_files $fastcgi_script_name =404;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}После создания конфига включите сайт и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/baikal /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxЕсли Nginx выдаёт ошибку “failed to bind”, значит порт 80 или 443 уже занят. Выполните команду:
sudo netstat -tulpn | grep -E ":80|:443"и отключите конфликтующий сервис, например Apache:
sudo systemctl disable --now apache2
Загрузка и распаковка Baikal
Создайте веб-корень и перейдите в него:
sudo mkdir -p /var/www/ && cd /var/www/Скачайте актуальную версию Baikal. В примере используется релиз 0.9.2:
sudo wget https://github.com/sabre-io/Baikal/releases/download/0.9.2/baikal-0.9.2.zipРаспакуйте архив и установите права доступа:
sudo unzip ./baikal-0.9.2.zip
sudo mv baikal baikal
sudo chown -R www-data:www-data ./baikalЕсли вы планируете редактировать файлы от пользователя baikal, скорректируйте владельца и права в соответствии с рабочим сценарием.


Установка и настройка SSL с Let’s Encrypt
Запустите certbot для автоматической генерации сертификата и обновления конфигурации Nginx:
sudo certbot --nginx -d yetanotherbaikalserver.xyzCertbot предложит перейти на HTTPS и настроит редиректы. Проверьте автоматическое обновление сертификатов:
sudo systemctl status certbot.timer
sudo certbot renew --dry-runЕсли вы используете ручной сертификат, добавьте конфигурацию для путей к файлам cert и key и настройте автоматическое обновление.

Завершение настройки через веб-интерфейс
Откройте браузер и перейдите по адресу вашего домена. Baikal автоматически направит вас на страницу настройки администратора.
Необходимо задать следующие параметры:
- Часовой пояс сервера
- Включить CalDAV и CardDAV по необходимости
- Адрес электронной почты для уведомлений (опционально, требует настроенного SMTP)
- Метод аутентификации, например Digest
- Пароль для администратора
- Параметры базы данных (по умолчанию SQLite)
Рекомендуется сначала оставить параметры базы данных по умолчанию и протестировать работу. Если нужна производительность и масштабирование, можно рассмотреть внешнюю базу данных и другие настройки.



Добавление первого пользователя
В панели администратора выберите Users and resources и нажмите Add user. Укажите уникальное имя пользователя и пароль.
После создания пользователя у вас появятся ресурсы календаря и адресной книги, которые можно назначать и делить с другими пользователями.


Подключение Thunderbird к Baikal
- В Thunderbird выберите Calendar на главной странице клиента.

- Выберите On the Network и нажмите Next.

- Введите URL вашего сервера с путём /dav.php, например https://yetanotherbaikalserver.xyz/dav.php, и имя пользователя. Нажмите Find Calendars.

- Выберите тип Calendar Type = CalDAV и нажмите Subscribe.

После этого ваш календарь начнёт синхронизироваться с Baikal.
Резервное копирование и восстановление
Baikal по умолчанию использует SQLite, что упрощает резервирование. Основные шаги:
- Файлы приложения и конфигурация: /var/www/baikal
- База данных SQLite: обычно в каталоге baikal Specific или db
Пример простого бэкап скрипта:
#!/bin/bash
BACKUP_DIR=/var/backups/baikal
mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date -u +"%Y%m%dT%H%M%SZ")
cp -a /var/www/baikal "$BACKUP_DIR/baikal_files_$TIMESTAMP"
# если используется sqlite
cp /var/www/baikal Specific/db.sqlite "$BACKUP_DIR/db_$TIMESTAMP.sqlite"
find "$BACKUP_DIR" -type f -mtime +30 -deleteКритерии успешного восстановления:
- Восстановленный сайт отвечает по HTTPS
- Восстановленные учётные записи и события доступны и синхронизируются с клиентами
Для миграции на другую машину перенесите папку приложения и sqlite-файлы, скорректируйте права и конфигурацию Nginx и перезапустите сервисы.
Жёсткая настройка безопасности
Рекомендации для повышенной защиты сервера Baikal:
- Ограничьте доступ по IP к панели администратора, если возможно
- Включите HSTS и минимизируйте набор разрешённых шифров TLS
- Установите fail2ban для защиты от грубой силы в HTTP auth
- Регулярно обновляйте систему и пакеты
- Запустите Baikal за reverse proxy с rate limiting, если нужно
- Сделайте права файлов более строгими: исполняемые файлы доступны для чтения nginx, права записи только для обслуживающей службы
Пример минимальных заголовков безопасности для Nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header Referrer-Policy no-referrer-when-downgrade;
add_header X-XSS-Protection "1; mode=block";Важно: проверьте совместимость с клиентами при жёстких TLS настройках.
Чеклист перед вводом в эксплуатацию
- Домен указывает на сервер
- Nginx слушает 80 и 443
- Сертификат TLS установлен и валиден
- PHP FPM запущен и доступен через unix сокет
- Baikal установлена и доступна через /dav.php
- Создан минимум один администратор и один пользователь
- Настроено резервное копирование файлов и базы
- Настроен мониторинг и оповещения на уровне сервера
Ролевой чеклист
Администратор сервера:
- Проверить бэкапы раз в неделю
- Обновлять систему и пакеты по расписанию
Администратор Baikal:
- Управлять пользователями и ресурсами
- Обеспечивать разграничение доступа и учётные политики
Пользователь:
- Настроить клиентские устройства на CalDAV и CardDAV
- Сообщать об ошибках синхронизации
Руководство по инцидентам и откату
Если сайт недоступен после изменений конфигурации Nginx:
- Проверить конфигурацию: sudo nginx -t
- Откатить симлинк в sites-enabled к предыдущему состоянию или восстановить из бэкапа конфигурации
- Перезапустить Nginx: sudo systemctl restart nginx
- Если проблема в PHP, перезапустить PHP-FPM: sudo systemctl restart php7.4-fpm
Если синхронизация клиентов перестала работать после обновления Baikal:
- Откатить файлы приложения из резервной копии
- Проверить логи Nginx и PHP на ошибки
- Если используется sqlite, проверить целостность файла базы
Критерии приёмки
- Сервер отвечает по HTTPS без ошибок сертификата
- Веб-интерфейс Baikal доступен и позволяет создать пользователя
- Клиент Thunderbird успешно находит и подписывает календарь по CalDAV
- Резервное копирование успешно сохраняет файлы и бд
- Регулярные проверки certbot проходят успешно
Когда эта инструкция не подойдёт
- Если требуется высоконагруженная система с сотнями пользователей и высокой доступностью. Baikal рассчитан на относительно лёгкие случаи. Для больших нагрузок рассмотрите полноценную CalDAV/CardDAV реализацию на основе SabreDAV, Radicale или готовые облачные решения.
Короткая методология развёртывания
- Подготовить ОС и домен
- Установить зависимости и создать пользователя
- Настроить Nginx и PHP-FPM
- Распаковать Baikal и выставить права
- Подключить TLS и проверить доступность
- Настроить резервное копирование и безопасность
- Подключить клиентов и проверить синхронизацию
Глоссарий в одну строку
- CalDAV — протокол синхронизации календарей
- CardDAV — протокол синхронизации адресных книг
- FPM — FastCGI Process Manager для PHP
Часто задаваемые вопросы
Почему systemctl показывает, что Nginx failed to bind
Ошибка означает, что порт 80 или 443 уже занят другим процессом. Найдите процесс: sudo netstat -tulpn | grep -e :80 -e :443 и отключите конфликтующий сервис, например Apache.
Почему после установки Baikal по адресу сайта отображается страница Debian Welcome
Скорее всего, включён default конфиг Nginx. Удалите или отключите его: sudo rm /etc/nginx/sites-enabled/default и перезапустите Nginx.
Выдаёт DOM Error при синхронизации
DOM Error обычно указывает на отсутствие XML модуля в PHP. Установите php7.4-xml: sudo apt install php7.4-xml, затем перезапустите php-fpm.
Image credit: Unsplash and Sabre All alterations and screenshots by Ramces Red
Important
- Перед изменением конфигурации системы сделайте полную резервную копию
- Проверяйте команды и пути сокета PHP-FPM под вашу установку
Notes
- Для крупной инсталляции рассмотрите использование реляционной СУБД и балансировщика нагрузки
Сводка
Baikal предоставляет простой и независимый способ синхронизации календарей и адресных книг. Правильная конфигурация Nginx, PHP-FPM и TLS вместе с регулярными бэкапами и базовыми мерами безопасности обеспечит стабильную работу сервера для личного или небольшого командного использования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента