Начинать нужно с подготовки окружения. Выбирать Ubuntu LTS или Debian – логично. CentOS – избыточен, Alpine – хрупок. На примере Ubuntu 22.04: минимум 2 ГБ RAM, PHP не ниже 8.1, база данных – MariaDB или MySQL, web-сервер – Apache или Nginx. Больше – лучше, но не всегда стабильнее.
Ставим зависимости. Без них ни один скрипт не сдвинется с места. Выполняем:
apt update && apt install php php-cli php-mysql php-curl php-xml php-mbstring unzip curl git mariadb-server apache2 -y
На этом этапе часто замирают. Почему? Несовместимость расширений, разнобой в версиях, конфликты модулей. Проверяйте всё командой:
php -m | grep -E 'curl|mbstring|xml|mysql'
Если что-то не отображается – допиливайте вручную. Без этого конфиг сломается на первом запуске. PHP должен быть от одного источника, не миксуйте с PPA и snap. Это ловушка.
Важно: не используйте PHP-FPM с Apache без чёткого понимания, как работает mod_event. Могут отвалиться сокеты и начнётся пляска с правами и таймаутами.
Дальше – база. Не доверяйте autoinstall. Делайте руками:
mysql -u root -p
CREATE DATABASE mautic_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mautic_user'@'localhost' IDENTIFIED BY 'сильный_пароль';
GRANT ALL PRIVILEGES ON mautic_db.* TO 'mautic_user'@'localhost';
FLUSH PRIVILEGES;
Файлы проекта лучше тянуть напрямую из GitHub, а не полагаться на дистрибутивные пакеты. Они устаревшие.
cd /var/www
git clone https://github.com/mautic/mautic.git
cd mautic
composer install --no-dev --optimize-autoloader
Если composer вываливается с ошибками – проверяйте memory_limit и версию Composer. Она должна быть не ниже 2. Хостинг с этим часто косячит.
Настройка Apache: стандартная виртуалка не подойдёт. Меняйте DocumentRoot на /var/www/mautic/public. Добавьте права:
chown -R www-data:www-data /var/www/mautic
chmod -R 755 /var/www/mautic
Помните: web-сервер не должен иметь права на запись в корень проекта. Только в var, cache, logs.
И наконец – cron. Без него всё бессмысленно. Вот пример базового набора:
* * * * * www-data php /var/www/mautic/bin/console mautic:segments:update
*/5 * * * * www-data php /var/www/mautic/bin/console mautic:campaigns:trigger
0 * * * * www-data php /var/www/mautic/bin/console mautic:emails:send
Смело проверяйте логи. Без них вы не поймёте, что происходит. tail -f /var/log/apache2/error.log – ваш новый друг.
Вот и всё. Просто? Нет. Рабоче? Да. Только так и можно добиться предсказуемости и контроля.
Содержание статьи
Подготовка серверного окружения для установки Mautic
Сразу к делу: минимальная конфигурация – 2 CPU, 4 GB RAM, SSD, Debian 11 или Ubuntu 22.04 LTS. Хостинг? Только с root-доступом. Shared-хостинг? Забыть.
Обновить пакеты. Без актуального окружения ловить нечего:
apt update && apt upgrade -y
Понадобится веб-сервер. Apache или Nginx. Вариант на CentOS? Тогда nginx + php-fpm. Пример установки на Debian:
apt install nginx php-fpm php-cli php-curl php-mysql php-xml php-mbstring php-zip php-intl php-imap unzip curl -y
PHP – только >=8.1. Всё, что ниже, роняет совместимость. Проверка версии:
php -v
Расширения. Без php-xml и php-curl работать не будет. Имейте это в виду. И php-imap тоже – иначе нет email parsing.
MySQL или MariaDB? Поддержка одинаковая, но на Ubuntu быстрее раскатывается MariaDB:
apt install mariadb-server -y
Создание базы данных – без GUI, только CLI:
mysql -u root -p
CREATE DATABASE mautic_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mautic_user'@'localhost' IDENTIFIED BY 'сильный_пароль';
GRANT ALL PRIVILEGES ON mautic_db.* TO 'mautic_user'@'localhost';
FLUSH PRIVILEGES;
Важно настроить PHP правильно. max_execution_time минимум 300. memory_limit не менее 512M. upload_max_filesize – 50M и выше. Где это всё?
nano /etc/php/8.1/fpm/php.ini
Важно! Пропустить настройку php.ini – значит получить белый экран вместо интерфейса. Без логов. Без ошибок. Только боль.
Права на директории. Никогда – повторяю, никогда – не запускайте веб-сервер от root. Только www-data. Пример:
chown -R www-data:www-data /var/www/html
Ограничения на уровне сервера. UFW, firewalld или iptables – не имеет значения, но порт 80 и 443 должен быть открыт:
ufw allow 'Nginx Full'
Проверка nginx:
systemctl restart nginx && systemctl status nginx
Внимание! Прежде чем продолжать, проверьте, доступен ли сервер по IP или домену. Без этого дальнейшие шаги – впустую.
SSL? Только через Let’s Encrypt. Без HTTPS вебхуки не работают. Certbot ставится так:
apt install certbot python3-certbot-nginx -y
И сразу выпуск сертификата:
certbot --nginx -d example.com -d www.example.com
Проверка всего окружения перед переходом к следующему этапу. Ошибки на этом этапе – это потом бессонные ночи и редактирование конфигов вручную.
Развертывание Mautic с использованием Composer и настройка базы данных
Сразу: без Composer даже не пытайтесь. Официальный способ клонирования репозитория с GitHub – мина замедленного действия. Composer – единственно вменяемый способ получить стабильную сборку.
Убедитесь, что установлены PHP 8.1+, Composer, MySQL/MariaDB, а также необходимые расширения: pdo_mysql, mbstring, openssl, zip, intl, xml, curl, gd.
Важно: проверяйте совместимость PHP и зависимостей заранее. Несовпадение версий – гарантия того, что установка встанет колом.
Создайте директорию:
mkdir -p /var/www/mautic && cd /var/www/mautic
Выполните загрузку через Composer:
composer create-project mautic/recommended-project:5.x .
Точка в конце – критична. Без неё установка окажется в поддиректории. Результат: поломанный автолоад и мучения при настройке виртуального хоста.
Далее права:
chown -R www-data:www-data /var/www/mautic
find var -type d -exec chmod 755 {} \;
find var -type f -exec chmod 644 {} \;
Теперь база. Создайте отдельную БД и пользователя с ограниченными правами:
mysql -u root -p
CREATE DATABASE mautic_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mautic_user'@'localhost' IDENTIFIED BY 'сильный_пароль';
GRANT ALL PRIVILEGES ON mautic_db.* TO 'mautic_user'@'localhost';
FLUSH PRIVILEGES;
Внимание! Никогда не используйте root-пользователя БД в проде. Это дыра шириной с автобус.
Перейдите по адресу в браузере. Убедитесь, что веб-сервер корректно отрабатывает index.php. Если видите белый экран – смотрите error_log, чаще всего причина в правках .env.local или отсутствующем PHP-расширении.
Настройка .env.local пример:
APP_ENV=prod
APP_DEBUG=0
DATABASE_URL="mysql://mautic_user:сильный_пароль@127.0.0.1:3306/mautic_db"
После ввода данных и завершения мастера установки – сразу создайте бэкап. Один сбой миграции – и вы вытираете таблицы руками.
Развернули? Отлично. Теперь настройка CRON-задач, без них всё встанет. Но это уже другая история.
Конфигурация cron-задач для корректной работы автоматизации
Запуск планировщика по расписанию – не опция, а требование. Без него обработка кампаний, отправка писем и обновление сегментов встанут колом. Не запускается cron – считай, ничего не работает. Абсолютно.
Минимальный набор задач в crontab для пользователя веб-сервера (обычно www-data или apache):
*/5 * * * * php /var/www/html/path/to/bin/console mautic:segments:update
*/10 * * * * php /var/www/html/path/to/bin/console mautic:campaigns:update
*/15 * * * * php /var/www/html/path/to/bin/console mautic:campaigns:trigger
0 * * * * php /var/www/html/path/to/bin/console mautic:emails:send
Команды segments:update и campaigns:update – это мозг. Без них не пересчитываются условия, не активируются события. Каждые 5-10 минут – не меньше. Хотите живую систему – делайте часто.
Внимание! Не используйте root для запуска cron. Только пользователь веб-сервера. Нарушите права – получите кучу ошибок на выходе.
Если используете systemd-таймеры – хорошо, только убедитесь, что окружение содержит все переменные. PATH, HOME и PHP_BINARY – критичны. Без них скрипты падают в тишину.
Отправка писем раз в час? Нонсенс. Делайте чаще. Раз в 5 минут. Или вручную накапливайте очередь и рассылайте командой:
php /var/www/html/path/to/bin/console mautic:email:process
Логи cron пишите в файл. Сразу. Иначе искать причину будете в темноте.
*/5 * * * * php /var/www/html/path/to/bin/console mautic:segments:update >> /var/log/mautic/cron.log 2>&1
CentOS? Используйте /etc/cron.d. Debian и Ubuntu – crontab -e. Arch Linux? Пакет cronie и проверка запуска systemctl status cronie.
Важно помнить: каждый планировщик должен завершаться без ошибок. exit 0 в конце не обязателен, но пустой stderr обязателен. Следите.
Тестируйте руками. Не доверяйте системе. Запустите каждую команду из cron вручную. Ошибка в пути? PHP не там? Права не те? Выявите сразу. Не на проде.
Важно! Задержка выполнения кампании почти всегда вызвана неправильно настроенным расписанием cron или конфликтами прав доступа.
Никаких GUI-интерфейсов для cron. Только консоль. Только контроль. Любая визуализация – медленная смерть администрированию.

