Установка SuiteCRM на Ubuntu 22.04 с Nginx и Let's Encrypt
Введение

SuiteCRM — открытое решение для управления взаимоотношениями с клиентами (CRM) на PHP. Это форк SugarCRM после прекращения выпуска community-редакции. SuiteCRM хранит данные о клиентах в одном центре и даёт инструменты для автоматизации продаж, маркетинга и поддержки.
Коротко о возможностях: хранение документов, почтовые рассылки, календарь, интеграция с социальными сетями, управление территориями, сегментация, маркетинговая автоматизация, квалификация лидов, внутренняя переписка, поддержка клиентов, мобильный интерфейс и отчёты. Поддерживается интеграция с SMTP-реле (Mandrill, SendGrid, Amazon SES и др.) и внешними приложениями (Mautic, MailChimp, Zoom, QuickBooks, DocuSign и т.д.).
Важно: в этом руководстве показана установка стабильной ветки SuiteCRM 7.x и конфигурация под Ubuntu 22.04 и Nginx. Для других версий Ubuntu (например, 20.04) команды и пакеты могут отличаться.
На кого рассчитан этот материал
- Системные администраторы и DevOps-инженеры, которые разворачивают CRM на Linux-серверах.
- Разработчики, которые настраивают окружение для тестов и продакшена.
- Инженеры поддержки, которым нужно знать процедуру бэкапа, отката и cron.
Краткое определение: FQDN — полное доменное имя сервера, например suitecrm.example.com.
Предварительные требования
- Сервер с Ubuntu 22.04 (если у вас 20.04 — учтите различия в пакетах и путях).
- Непривилегированный пользователь с sudo.
- Полное доменное имя (FQDN), указывающее на сервер: suitecrm.example.com.
- Обновлённая система:
$ sudo apt update
$ sudo apt upgrade- Установите базовый набор пакетов:
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -yНекоторые пакеты могут уже быть установлены.
Важное замечание
Если вы планируете использовать другой пользователя веб-сервера (например, www-data) вместо nginx, корректируйте все команды chown/chmod и конфигурации PHP-FPM/Nginx соответственно.
Шаг 1 — Настройка брандмауэра (ufw)
Ubuntu поставляется с ufw (Uncomplicated Firewall). Проверьте статус:
$ sudo ufw statusЕсли статус “inactive”, откройте SSH, HTTP и HTTPS:
$ sudo ufw allow OpenSSH
$ sudo ufw allow http
$ sudo ufw allow httpsВключите ufw:
$ sudo ufw enableПроверьте статус ещё раз:
$ sudo ufw statusОжидаемый вывод содержит правила для OpenSSH, 80/tcp и 443.
Совет: если вы администрируете сервер удалённо, не закрывайте порты до проверки правил — можно потерять доступ.
Шаг 2 — Установка Nginx
Ubuntu может содержать устаревший nginx. Чтобы получить актуальную стабильную версию, добавим официальный репозиторий nginx.
Импорт ключа подписи:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/nullДобавьте репозиторий стабильной ветки (используется кодовое имя дистрибутива):
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.listОбновите индексы и установите nginx:
$ sudo apt update
$ sudo apt install nginxПроверьте версию:
$ nginx -vВключите сервис nginx при старте:
$ sudo systemctl enable nginxШаг 3 — Установка и настройка MariaDB
Установите сервер баз данных MariaDB:
$ sudo apt install mariadb-serverЗапустите утилиту безопасности:
$ sudo mysql_secure_installationРекомендуемые ответы (для локальной установки):
- Текущий пароль root: Enter
- Переключиться на unix_socket аутентификацию: Y
- Изменить пароль root: n (если переключились на unix_socket)
- Удалить анонимных пользователей: y
- Запретить удалённый вход root: y
- Удалить тестовую БД: y
- Перезагрузить таблицы привилегий: y
Подключитесь к MariaDB и создайте базу и пользователя:
$ sudo mysql
MariaDB [(none)]> CREATE DATABASE suitecrm;
MariaDB [(none)]> CREATE USER 'suitecrmuser'@'localhost' identified by 'yourpassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON suitecrm.* TO 'suitecrmuser'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exitЗамените ‘yourpassword’ на сильный пароль и сохраните его в менеджере паролей.
Шаг 4 — Установка PHP 8.0 и расширений
Ubuntu 22.04 содержит PHP 8.1 по умолчанию, а SuiteCRM в данной инструкции рассчитан на PHP 8.0. Добавим репозиторий Ondřej Surý и установим PHP 8.0:
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
$ sudo apt install php-imagick php8.0-fpm php8.0-mysql php8.0-common php8.0-gd php8.0-imap php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-bz2 php8.0-intl php8.0-gmp -yПроверьте версию:
$ php --versionПримечание: если в вашей инфраструктуре поддерживается PHP 8.1 и SuiteCRM обновлён для 8.1, можно использовать соответствующие пакеты, но это выходит за рамки данного руководства.
Шаг 5 — Загрузка SuiteCRM
Скачайте актуальную стабильную версию SuiteCRM с официального сайта. В этом примере используется SuiteCRM 7.12.5:
$ wget -O suitecrm.zip https://suitecrm.com/files/147/SuiteCRM-7.12/614/SuiteCRM-7.12.5.zipСоздайте директорию для веб-контента и распакуйте архив:
$ sudo mkdir -p /var/www/
$ sudo unzip suitecrm.zip -d /var/www/Переименуйте папку для удобства:
$ sudo mv /var/www/SuiteCRM-7.12.5/ /var/www/suitecrm
$ cd /var/www/suitecrmУстановите владельца/группу и права. В примере использован пользователь nginx — настройте под ваш веб-пользователь при необходимости:
$ sudo chown -R nginx:nginx .
$ sudo chmod -R 755 .
$ sudo chmod -R 775 cache custom modules themes data upload
$ sudo chmod 775 config_override.php 2>/dev/nullСовет: в продакшене рассмотрите более строгую схему прав с минимально необходимыми правами на запись.
Шаг 6 — Установка SSL от Let’s Encrypt (Certbot)
Установим snapd и certbot через snap, затем получим сертификат.
$ sudo apt install snapd
$ sudo snap install core
$ sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbotОстановите nginx, чтобы certbot мог слушать 80-й порт в standalone-режиме:
$ sudo systemctl stop nginxПолучите сертификат для вашего домена:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m admin@example.com -d suitecrm.example.comСертификаты будут в /etc/letsencrypt/live/suitecrm.example.com.
Создайте параметр Диффи-Хеллмана:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096Создайте веб-корень для challenge-файлов и автоматическое обновление сертификата через ежедневный cron:
$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renewВставьте:
#!/bin/sh
certbot renew --cert-name suitecrm.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"Сделайте скрипт исполняемым:
$ sudo chmod +x /etc/cron.daily/certbot-renewЗапустите nginx обратно:
$ sudo systemctl start nginxВажно: используйте корректный e-mail и следите за продлением сертификатов.
Шаг 7 — Конфигурация PHP-FPM и Nginx
Настройка PHP-FPM
Откройте пул PHP-FPM для редактирования:
$ sudo nano /etc/php/8.0/fpm/pool.d/www.confУстановите Unix-пользователя и группу, под которыми будет работать PHP (в примере nginx):
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginxУвеличьте лимиты загрузки файлов в /etc/php/8.0/fpm/php.ini:
$ sudo nano /etc/php/8.0/fpm/php.iniИзмените:
upload_max_filesize = 20M
post_max_size = 20M
cgi.fix_pathinfo=0Перезапустите PHP-FPM:
$ sudo systemctl restart php8.0-fpmКонфигурация Nginx
Создайте конфигурационный файл для SuiteCRM:
$ sudo nano /etc/nginx/conf.d/suitecrm.confВставьте следующую конфигурацию (проверьте, что server_name и пути к сертификатам верны):
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name suitecrm.example.com;
root /var/www/suitecrm;
error_log /var/log/nginx/suitecrm.error.log;
access_log /var/log/nginx/suitecrm.access.log;
client_max_body_size 20M;
index index.php index.html index.htm;
ssl_certificate /etc/letsencrypt/live/suitecrm.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/suitecrm.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/suitecrm.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
# try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
#Note: If you install SuiteCRM on iRedMail server, you should use the TCP socket instead.
#fastcgi_pass 127.0.0.1:9999
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# Don't log favicon
location = /favicon.ico {
log_not_found off;
access_log off;
}
# Don't log robots
location = /robots.txt {
access_log off;
log_not_found off;
}
# Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc...
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# A long browser cache lifetime can speed up repeat visits to your page
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name suitecrm.example.com;
return 301 https://$host$request_uri;
}Добавьте строку server_names_hash_bucket_size в основной nginx.conf перед include:
$ sudo nano /etc/nginx/nginx.confДобавьте:
server_names_hash_bucket_size 64;Проверьте синтаксис конфигурации и перезапустите nginx:
$ sudo nginx -t
$ sudo systemctl restart nginxШаг 8 — Запуск установочного мастера SuiteCRM
Откройте в браузере https://suitecrm.example.com. Вы увидите мастер установки.

Примите лицензию, нажмите Next и проверьте предустановленные требования.

Если все хорошо — продолжите. На странице конфигурации введите данные базы, hostname как localhost и данные администратора. В поле Instance URL укажите https://suitecrm.example.com.

При желании добавьте демо-данные, настройте SMTP (в примере используется Amazon SES) и локаль системы.


После завершения конфигурации войдите в систему.



Шаг 9 — Настройка cron задач
SuiteCRM требует регулярного запуска cron-скриптов. Добавьте задачу в cron пользователя, под которым работает веб-сервер (в примере nginx):
$ sudo crontab -e -u nginxДобавьте:
* * * * * cd /var/www/suitecrm; php -f cron.php > /dev/null 2>&1Это правило запускает cron.php каждую минуту (рекомендуется для нормальной работы очередей и планировщика).
Критерии приёмки
- Сайт https://suitecrm.example.com открыт и отображает страницу логина.
- Удачная авторизация под администратором.
- Cron выполняется — проверяется по timestamp в логах SuiteCRM или по задачам очереди.
- SSL сертификат действителен и цепочка сертификатов корректна (проверка в браузере).
- PHP-FPM работает под указанным пользователем и имеет доступ к директориям записи.
Рекомендации по безопасности
- Отключите прямые права на запись для файловых ресурсов, когда это возможно.
- Имеет смысл настроить Fail2Ban для защиты SSH и панелей администратора.
- Регулярно применяйте обновления безопасности для Ubuntu, PHP, nginx и SuiteCRM.
- Ограничьте доступ по IP к административной панели, если это возможно.
- Настройте резервное копирование БД и файлов (см. SOP ниже).
Резервное копирование и откат
Минимальная периодическая стратегия бэкапа:
- База данных: дамп mysqldump с ежедневным хранением 7–30 дней.
- Файлы: /var/www/suitecrm + конфигурации nginx и php — архивировать ежечасно/ежедневно в зависимости от нагрузки.
- Сертификаты: /etc/letsencrypt — копировать после обновления.
Пример команды бэкапа БД:
$ sudo mysqldump -u root -p suitecrm > /var/backups/suitecrm-$(date +%F).sqlПростой откат:
- Остановите веб-сервер: sudo systemctl stop nginx
- Восстановите файлы и дамп базы
- Проверьте права и владельцев
- Запустите сервисы и проверьте логи
Чек-листы по ролям
Администратор системы:
- Проверить DNS и SSL
- Настроить ufw и Fail2Ban
- Настроить автоматические обновления безопасности
DevOps:
- Настроить мониторинг (CPU, RAM, диск, доступность nginx)
- Проверить cron и очереди
- Настроить CI/CD для шаблонов конфигураций
Администратор SuiteCRM:
- Создать пользователей и роли
- Настроить SMTP и тестовые письма
- Проверить рабочие процессы (Workflows)
Тесты и критерии приёмки
- Тест логина: успешный вход за 3 секунды.
- Тест отправки почты: SMTP отправляет тестовое письмо.
- Тест cron: cron.php выполняет задачи планировщика.
- Тест резервного копирования: восстановление дампа в тестовом окружении.
Альтернативные подходы
- Apache вместо Nginx: если вы предпочитаете .htaccess и модульную архитектуру Apache.
- Docker/Kubernetes: контейнеризация упрощает переносимость и масштабирование.
- Пакетные установки/Ansible: автоматизация конфигурации для нескольких серверов.
Краткий совет: для многосерверной архитектуры используйте отдельный сервер базы данных и общий файловый шар (NFS или объектное хранилище) для upload/attachments.
Когда этот подход не годится
- Если вам нужна высокая доступность с нулевыми простоями — одностандартный VPS с одной БД и одним веб-сервером не подойдёт. Нужна кластеризация.
- Если вы вынуждены использовать PHP 8.2+ и SuiteCRM ещё не совместим — придётся ждать официальной поддержки или патчить.
Совместимость и миграция
- SuiteCRM 7.x официально поддерживает PHP 7.4 и 8.0 в зависимости от выпуска. Проверяйте release notes перед обновлением.
- При переходе с Apache на Nginx — мигрируйте правила перезаписи и убедитесь, что friendly URLs работают.
Безопасность данных и соответствие (GDPR)
- Храните персональные данные зашифрованными при передаче (TLS) и по возможности шифруйте резервные копии.
- Ограничьте доступ к данным по ролям и логируйте операции администраторов.
- Документируйте процесс удаления данных по запросу пользователя.
Быстрый чек-лист перед переносом в продакшен
- SSL и цепочка сертификатов проверены
- Резервное копирование настроено и протестировано
- Мониторинг настроен (логи, метрики)
- План восстановления и контакты — задокументированы
- Политика обновлений и тестовый стенд есть
Факто-бокс
- Операционная система: Ubuntu 22.04 LTS
- Веб-сервер: Nginx (стабильный репозиторий)
- База: MariaDB 10.x
- PHP: 8.0 (FPM)
- SuiteCRM: 7.12.x (пример)
Мини-методология развёртывания
- Подготовка сервера и базовых пакетов
- Установка и настройка веб/БД/PHP
- Загрузка SuiteCRM и настройка прав
- Получение SSL и настройка Nginx
- Запуск установщика SuiteCRM
- Настройка cron и мониторинга
- Тестирование, бэкап и перевод в продакшен
Примеры команд и сниппеты (cheat sheet)
Проверить работу PHP-FPM сокета:
$ sudo ss -lptn | grep phpПроверить логи nginx в реальном времени:
$ sudo tail -f /var/log/nginx/suitecrm.error.log /var/log/nginx/suitecrm.access.logПроверка статуса cron задачи:
$ sudo crontab -u nginx -lРиски и смягчение
- Риск: неправильные права на файлы → Смягчение: ограничить права, применять принцип наименьших привилегий.
- Риск: утечка паролей → Смягчение: использовать менеджер паролей и rotatory credentials.
- Риск: простой из-за просроченного SSL → Смягчение: автоматизировать продление и уведомления.
Короткая инструкция для уведомления команды (announce)
Установлен SuiteCRM 7.x на Ubuntu 22.04 с Nginx и Let’s Encrypt. Адрес: https://suitecrm.example.com. Cron и резервное копирование настроены. Если нужны доступы — обратитесь к администратору.
Краткое резюме
SuiteCRM установлено и настроено: Nginx обслуживает PHP-FPM, MariaDB хранит данные, SSL защищает трафик, cron обеспечивает фоновые задачи. Следуйте чек-листам по безопасности и бэкапам перед переводом в продакшен.
Если остались вопросы, укажите конкретный шаг и приведите логи/ошибки — это ускорит диагностику.