EasyAppointments на Ubuntu 24.04: пошаговая установка
Когда клиенты записываются на услуги через звонки и переписки в мессенджерах, часть заявок теряется, а администратор тратит время на ручное согласование слотов. EasyAppointments — open-source система онлайн-записи, которая закрывает эту задачу: клиент сам выбирает специалиста, услугу и время на публичной странице, а вы получаете календарь без двойных бронирований. Ниже — рабочая установка на чистом Ubuntu 24.04 от системных пакетов до готового к работе сайта с SSL.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое EasyAppointments и кому подходит
EasyAppointments — PHP-приложение на связке CodeIgniter, которое решает одну конкретную задачу: онлайн-бронирование времени у специалистов. Внутри — календарь с рабочими часами и перерывами, карточки услуг и сотрудников, email-уведомления клиенту и исполнителю, встраиваемый виджет для сайта (iframe или прямая ссылка), базовый Google Calendar sync.
Система подходит салонам красоты, стоматологиям и медицинским кабинетам, репетиторам и консультантам, автосервисам, юристам — везде, где есть привязка "специалист + услуга + временной слот". Это не полноценная CRM: нет сложной аналитики, платежей "из коробки" и многоуровневых прав, зато порог входа минимальный, а ресурсов система требует немного — хватит бюджетного VPS.
Технически это классический LEMP-проект: PHP 8.x, MySQL/MariaDB, веб-сервер (мы возьмём Nginx), Composer для зависимостей. Все шаги ниже проверены на свежем Ubuntu 24.04 LTS.
Подготовка сервера
Начинаем с обновления системы и установки базовых утилит. Подключаемся по SSH под пользователем с правами sudo (не под root напрямую — это тоже вопрос безопасности на будущее).
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl unzip git software-properties-common
Если сервер только что арендован, дополнительно проверьте часовой пояс и hostname — EasyAppointments использует системное время сервера для расписания:
sudo timedatectl set-timezone Europe/Moscow
hostnamectl set-hostname easyappointments
Замените таймзону на актуальную для вашего часового пояса — если специалисты и клиенты в другом регионе, важно выставить именно их время, иначе слоты будут "плавать".
Откройте порты в файрволе, если UFW ещё не настроен — это отдельная тема, разобранная в статье про настройку UFW на Ubuntu 24.04:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка PHP 8.3 и нужных расширений
Ubuntu 24.04 идёт с PHP 8.3 в стандартных репозиториях — отдельный PPA не нужен. EasyAppointments требует набор расширений для работы с БД, датами, картинками и почтой.
sudo apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-curl php8.3-gd php8.3-zip php8.3-intl php8.3-bcmath
Проверьте версию и активные модули:
php -v
php -m | grep -E 'mbstring|mysqli|gd|curl'
Отредактируйте php.ini для php-fpm — увеличьте лимиты, чтобы избежать проблем с загрузкой аватаров и большими формами:
sudo nano /etc/php/8.3/fpm/php.ini
Найдите и измените:
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 256M
max_execution_time = 60
date.timezone = Europe/Moscow
Перезапустите php-fpm после правок:
sudo systemctl restart php8.3-fpm
MariaDB: база данных
MariaDB — рекомендуемый выбор для EasyAppointments, полностью совместим с MySQL-драйвером приложения. Если сомневаетесь между СУБД, разница разобрана в статье MariaDB или MySQL: что выбрать для сервера; мы ставим MariaDB.
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation
На вопросы mysql_secure_installation отвечайте: установить пароль root — да, удалить анонимных пользователей — да, запретить удалённый вход root — да, удалить тестовую базу — да, перечитать привилегии — да.
Создаём базу и пользователя под приложение:
sudo mysql -u root -p
CREATE DATABASE easyappointments CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ea_user'@'localhost' IDENTIFIED BY 'СложныйПароль_замените!';
GRANT ALL PRIVILEGES ON easyappointments.* TO 'ea_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Обязательно замените пароль на собственный — не оставляйте плейсхолдер из примера. Подробный разбор типовых проблем MariaDB (права, кодировки, доступ) есть в статье MariaDB на сервере: частые ошибки и решения.
Установка EasyAppointments
Скачиваем актуальный релиз с официального репозитория проекта на GitHub. Проверьте на странице релизов, что берёте последнюю стабильную версию — на момент написания это ветка 1.5.x.
cd /var/www
sudo git clone https://github.com/alextselegidis/easyappointments.git ea
sudo chown -R www-data:www-data /var/www/ea
Если предпочитаете скачать конкретный релиз архивом вместо git-клона:
cd /var/www
sudo curl -L -o ea.zip https://github.com/alextselegidis/easyappointments/archive/refs/tags/v1.5.1.zip
sudo unzip ea.zip && sudo mv easyappointments-1.5.1 ea && sudo rm ea.zip
sudo chown -R www-data:www-data /var/www/ea
Копируем и настраиваем конфигурационный файл приложения:
cd /var/www/ea
sudo cp .env-example .env
sudo nano .env
Ключевые параметры .env:
BASE_URL=https://booking.yourdomain.com
DEBUG_MODE=false
DB_HOST=localhost
DB_NAME=easyappointments
DB_USERNAME=ea_user
DB_PASSWORD=СложныйПароль_замените!
LANGUAGE=ru
DATE_FORMAT=DD-MM-YYYY
TIME_FORMAT=army
BASE_URL укажите с будущим доменом — его вы привяжете на следующем шаге. Если домена пока нет и тестируете по IP, впишите http://ВАШ_IP временно и поменяете позже.
Выставляем права на директории, куда приложение пишет кэш и логи:
sudo chmod -R 755 /var/www/ea
sudo chown -R www-data:www-data /var/www/ea/storage
Настройка Nginx и запуск установщика
Создаём конфиг виртуального хоста для EasyAppointments — базовые принципы прокси-конфигурации Nginx под PHP-приложение такие же, как в статье Nginx как reverse proxy на Ubuntu 24.04, но здесь нужен именно классический PHP-FPM блок, а не проксирование на другой порт.
sudo nano /etc/nginx/sites-available/easyappointments
server {
listen 80;
server_name booking.yourdomain.com;
root /var/www/ea;
index index.php;
client_max_body_size 20M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
access_log off;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Активируем сайт и проверяем синтаксис:
sudo ln -s /etc/nginx/sites-available/easyappointments /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Убедитесь, что DNS-запись домена booking.yourdomain.com указывает на IP сервера — если домен новый, порядок настройки описан в статье Ubuntu 24.04: настройка домена и DNS с нуля.
Откройте домен в браузере — должен запуститься пошаговый веб-установщик EasyAppointments. Он проверит расширения PHP, попросит данные подключения к БД (те же, что в .env) и создаст таблицы автоматически. На последнем шаге установщик предложит создать администратора — задайте надёжный пароль сразу, менять его после первого входа не забудьте в любом случае.
SSL-сертификат и финальная защита
Без HTTPS браузеры будут предупреждать клиентов о небезопасном сайте, а форма записи с личными данными (имя, телефон, email) обязана идти по шифрованному каналу. Ставим Let's Encrypt через Certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d booking.yourdomain.com
Certbot сам пропишет редирект с 80 на 443 и настроит автопродление. Проверить, что таймер обновления активен:
sudo systemctl status certbot.timer
После получения сертификата вернитесь в .env и убедитесь, что BASE_URL теперь указывает на https:// — иначе ссылки в email-уведомлениях будут вести на нешифрованную версию.
Дополнительно закройте прямой доступ к служебным файлам приложения — конфиг .env, .git, storage не должны отдаваться веб-сервером наружу (блок location ~ /\. в конфиге выше уже это перекрывает для скрытых файлов, а storage/ дополнительно стоит явно закрыть):
location ~ ^/(storage|vendor)/ {
deny all;
}
Не забудьте sudo systemctl reload nginx после правки.
Настройка почты для уведомлений
EasyAppointments отправляет клиентам и специалистам письма о новой записи, отмене и напоминания. Без рабочей почты эта функция бесполезна — письма либо не уйдут, либо упадут в спам. В админ-панели (Settings → General) укажите SMTP-реквизиты вашего почтового сервиса:
SMTP Host: smtp.yourmailprovider.com
SMTP Port: 587
SMTP Username: notifications@yourdomain.com
SMTP Password: (пароль приложения, не обычный)
SMTP Security: tls
Если используете собственный почтовый сервер на этом же VPS или другом, для стабильной доставки важна корректная PTR-запись и SPF/DKIM — без них письма от нового IP массово улетают в спам у Gmail и Mail.ru. Это отдельная и не быстрая настройка; для старта проще подключить внешний SMTP-сервис с уже прогретой репутацией отправителя.
Проверьте отправку тестовой записью сразу после настройки — не откладывайте до реального клиента.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли встроить форму записи в существующий сайт?
Да, EasyAppointments даёт готовый embed-код (iframe) в разделе Settings → General, который вставляется на любую страницу вашего сайта на любом движке.
Поддерживается ли синхронизация с Google Calendar?
Да, на уровне каждого специалиста в его профиле можно подключить Google-аккаунт через OAuth — записи будут дублироваться в личный календарь сотрудника.
Сколько оперативной памяти нужно для EasyAppointments?
Приложение легковесное: для малого и среднего бизнеса (до нескольких десятков записей в день) достаточно 1-2 ГБ RAM и 1 vCPU; для крупной сети филиалов с большой нагрузкой на API стоит закладывать больше — точные цифры зависят от числа одновременных пользователей и лучше проверить на своей нагрузке.
Как обновить EasyAppointments до новой версии?
Сделайте бэкап базы данных и папки /var/www/ea, затем скачайте новый релиз, замените файлы (кроме .env и storage/) и запустите миграции через веб-установщик — он сам определит, что версия БД устарела.
Приложение работает без домена, только по IP?
Технически да, но SSL-сертификат от Let's Encrypt требует домен — без HTTPS часть браузерных функций (например, геолокация в форме) может не работать, а форма с персональными данными без шифрования — плохая практика.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →