Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить Mautic на сервер и запустить первую кампанию

Пошаговая инструкция для самостоятельной установки. Развернём Mautic с веб-интерфейсом, расписанием кампаний и отдельным обработчиком почтовой очереди. Проверим путь от тестового контакта до письма, сохраним базу и файлы для восстановления.

Первый тестовый маркетинговый сценарий: письмо проходит по дорожке от контакта к согласованному действию

Что подготовить и как читать инструкцию #

Mautic обслуживает формы, контакты и кампании; письма отправляет ваш SMTP-сервис. Подготовьте проверенный домен отправителя, почтовые реквизиты и допустимую скорость отправки. Начните с одного контролируемого адреса: импорт рабочей базы и массовая отправка не нужны для проверки установки.

Хост — Ubuntu 26.04 LTS с Docker Engine, Compose v2 и Nginx из общей инструкции. PHP и Apache поставляются внутри официального образа Mautic, поэтому не устанавливаем случайную версию PHP из Ubuntu. Для первой небольшой установки выбирайте 4 vCPU, 8 ГБ памяти и SSD с запасом для базы, медиа и копий; реальный объём зависит от контактов и событий кампаний.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.

Шаг 1. Создайте каталоги Mautic #

Конфигурация, журналы и загруженные материалы будут храниться отдельно от контейнеров в ~/apps/mautic. Перейдите в каталог установки.

Создайте каталоги Mautic
mkdir -p ~/apps/mautic/mautic/{config,logs,media/files,media/images}
cd ~/apps/mautic

Текущий каталог — ~/apps/mautic.

Шаг 2. Создайте пароль базы #

Создадим закрытый .env. Случайные пароли предназначены базе, а не будущему администратору Mautic. Повторный запуск генератора поверх рабочей базы изменит реквизиты только в файле, поэтому не повторяйте его.

Создайте пароль базы
umask 077
cat > .env <<EOF
MYSQL_PASSWORD=$(openssl rand -hex 32)
MYSQL_ROOT_PASSWORD=$(openssl rand -hex 32)
EOF
chmod 600 .env

Пароли заполнены, права .env — 600.

Шаг 3. Сохраните описание сервисов #

Откройте nano compose.yaml и вставьте YAML ниже. web показывает интерфейс, cron обновляет сегменты и кампании, worker выполняет задания из очереди. Они используют общую конфигурацию и выбранный образ 7.2.1.

Сохраните описание сервисов
x-mautic: &mautic
  image: mautic/mautic:7.2.1-apache
  restart: unless-stopped
  environment: &mautic-env
    MAUTIC_DB_HOST: db
    MAUTIC_DB_PORT: 3306
    MAUTIC_DB_DATABASE: mautic
    MAUTIC_DB_USER: mautic
    MAUTIC_DB_PASSWORD: ${MYSQL_PASSWORD:?set password}
    MAUTIC_MESSENGER_DSN_EMAIL: doctrine://default
    MAUTIC_MESSENGER_DSN_HIT: doctrine://default
    DOCKER_MAUTIC_LOAD_TEST_DATA: "false"
    PHP_INI_VALUE_MEMORY_LIMIT: 512M
  volumes:
    - ./mautic/config:/var/www/html/config
    - ./mautic/logs:/var/www/html/var/logs
    - ./mautic/media/files:/var/www/html/docroot/media/files
    - ./mautic/media/images:/var/www/html/docroot/media/images
  depends_on:
    db:
      condition: service_healthy
services:
  db:
    image: mysql:8.4
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: mautic
      MYSQL_USER: mautic
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:?set password}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?set root password}
    volumes:
      - mysql-data:/var/lib/mysql
    healthcheck:
      test: [CMD-SHELL, 'mysqladmin -u"$$MYSQL_USER" -p"$$MYSQL_PASSWORD" ping --silent']
      interval: 10s
      timeout: 5s
      retries: 20
      start_period: 30s
  web:
    <<: *mautic
    ports:
      - "127.0.0.1:8089:80"
    environment:
      <<: *mautic-env
      DOCKER_MAUTIC_ROLE: mautic_web
  cron:
    <<: *mautic
    environment:
      <<: *mautic-env
      DOCKER_MAUTIC_ROLE: mautic_cron
  worker:
    <<: *mautic
    environment:
      <<: *mautic-env
      DOCKER_MAUTIC_ROLE: mautic_worker
      DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL: 1
      DOCKER_MAUTIC_WORKERS_CONSUME_HIT: 1
      DOCKER_MAUTIC_WORKERS_CONSUME_FAILED: 1
volumes:
  mysql-data:

YAML сохранён; HTTP web доступен только на локальном 8089.

Шаг 4. Проверьте конфигурацию #

Проверим YAML и наличие паролей до скачивания и запуска.

Проверьте конфигурацию
docker compose config --quiet

config --quiet завершился без ошибок.

Шаг 5. Скачайте образы #

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

Скачайте образы
docker compose pull

pull завершился успешно.

Шаг 6. Запустите базу и веб-интерфейс #

Сначала нужны только db и web. В браузере завершим установку, и лишь затем включим фоновые процессы.

Запустите базу и веб-интерфейс
docker compose up -d db web

База и web созданы; cron/worker пока не запущены.

Шаг 7. Проверьте локальный сайт #

ps покажет состояние, curl — ответ HTTP на самом сервере. При ошибке сначала исправьте запуск приложения, затем HTTPS.

Проверьте локальный сайт
docker compose ps
curl -I http://127.0.0.1:8089

Web отвечает, db не находится в цикле перезапусков.

Шаг 8. Сохраните сайт Nginx #

Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/mautic и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.

Файл /etc/nginx/sites-available/mautic
map $http_upgrade $mautic_connection_upgrade {
    default upgrade;
    "" close;
}

server {
    listen 80;
    server_name marketing.example.com;
    client_max_body_size 100m;
    location / {
        if ($scheme = http) { return 403; }
        proxy_pass http://127.0.0.1:8089;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $mautic_connection_upgrade;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_buffering off;
    }
}

Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.

Шаг 9. Подключите сайт и проверьте HTTP #

Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.

Подключите сайт и проверьте HTTP
sudo ln -sfn /etc/nginx/sites-available/mautic /etc/nginx/sites-enabled/mautic
sudo nginx -t && sudo systemctl reload nginx
curl -I http://marketing.example.com/

Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.

Шаг 10. Получите сертификат и включите HTTPS #

Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.

Получите сертификат и включите HTTPS
sudo /snap/bin/certbot --nginx -d marketing.example.com --redirect

Certbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.

Шаг 11. Проверьте продление сертификата #

Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.

Проверьте продление сертификата
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'

Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.

Шаг 12. Завершите установку в браузере #

Откройте свой HTTPS-домен. В мастере используйте имя сервиса db как адрес базы и реквизиты из .env/Compose. Создайте администратора с новым паролем. Не используйте пароль базы как пароль администратора.

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

Шаг 13. Настройте отправку писем #

В конфигурации Mautic заполните SMTP или поддерживаемый транспорт по данным своего почтового сервиса. Укажите реальный адрес отправителя с подтверждённым доменом. Отправьте тестовое письмо на свой ящик.

Письмо получено, адрес отправителя верный; до этого массовые кампании не запускайте.

Шаг 14. Запустите фоновые процессы #

Cron обновляет условия сегментов и кампаний по расписанию, worker исполняет очередь. Веб-интерфейс сам по себе эту работу не заменяет.

Запустите фоновые процессы
docker compose up -d cron worker

Сервисы cron и worker запущены.

Шаг 15. Обновите сегменты #

Сегмент — список контактов по условиям. Команда обновления выполняется от www-data, владельца приложения внутри контейнера.

Обновите сегменты
docker compose exec --user www-data --workdir /var/www/html web php bin/console mautic:segments:update --no-interaction

Команда завершилась без ошибки конфигурации и базы.

Шаг 16. Обновите и проверьте обработку кампании #

Первая команда подготавливает кампании, вторая исполняет подходящие события. Используйте только тестовую кампанию с собственным адресом, затем посмотрите журнал процессов.

Обновите и проверьте обработку кампании
docker compose exec --user www-data --workdir /var/www/html web php bin/console mautic:campaigns:update --no-interaction
docker compose exec --user www-data --workdir /var/www/html web php bin/console mautic:campaigns:trigger --no-interaction
docker compose logs --tail=80 cron worker

Нет ошибок cron/worker; событие тестовой кампании обработано.

Шаг 17. Проверьте полный путь тестового письма #

Создайте один тестовый контакт с вашим email, добавьте его в тестовый сегмент и кампанию с одним письмом. Опубликуйте только этот тест. Откройте журнал контакта и письмо в почтовом клиенте.

Есть событие отправки и фактическое письмо; отписка прекращает дальнейшие отправки этому контакту.

Шаг 18. Подготовьте согласованную копию #

Создадим закрытый каталог с временем копии и остановим web/cron/worker. Пользователи и задания временно не меняют данные; база остаётся работать.

Подготовьте согласованную копию
umask 077
backup_dir="$HOME/backups/mautic/$(date -u +%Y%m%dT%H%M%SZ)"
mkdir -p "$backup_dir"
docker compose stop web cron worker

Приложение остановлено, каталог backup_dir создан. Эти команды и следующие выполняйте в одном SSH-сеансе.

Шаг 19. Скопируйте базу #

Выгрузка использует пароль внутри контейнера. В базе хранятся контакты, кампании и события.

Скопируйте базу
docker compose exec -T db sh -c 'exec mysqldump --single-transaction -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > "$backup_dir/database.sql"

database.sql создан без ошибок и не пуст.

Шаг 20. Скопируйте настройки и материалы #

Архив включает постоянные каталоги и файлы установки. Он содержит секреты; перенесите обе части копии в закрытое хранилище на другой машине.

Скопируйте настройки и материалы
sudo tar -czf "$backup_dir/files.tar.gz" mautic .env compose.yaml

files.tar.gz создан; копия базы и файлов хранится вместе.

Шаг 21. Запустите сервисы и проверьте восстановление #

Верните web/cron/worker. Восстановление проверяйте на отдельном сервере с отключённой реальной отправкой: тест не должен запустить письма рабочим контактам.

Запустите сервисы и проверьте восстановление
docker compose start web cron worker

Приложение доступно; восстановленная копия показывает тестовый контакт и кампанию.

Если результат шага отличается #

Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.

Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.

Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/mautic и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.

Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаMautic

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.