Гид по технологиям

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

8 min read Инфраструктура Обновлено 28 Nov 2025
Установка SuiteCRM на Ubuntu 22.04 с Nginx и SSL
Установка SuiteCRM на Ubuntu 22.04 с Nginx и SSL

Введение

Логотип SuiteCRM на экране установки

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. Вы увидите мастер установки.

Мастер установки SuiteCRM

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

Проверка предустановок SuiteCRM

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

Страница конфигурации SuiteCRM

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

Настройки SMTP

Настройки локали

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

Окно завершения установки

Страница логина

Панель SuiteCRM

Шаг 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

Простой откат:

  1. Остановите веб-сервер: sudo systemctl stop nginx
  2. Восстановите файлы и дамп базы
  3. Проверьте права и владельцев
  4. Запустите сервисы и проверьте логи

Чек-листы по ролям

Администратор системы:

  • Проверить 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 (пример)

Мини-методология развёртывания

  1. Подготовка сервера и базовых пакетов
  2. Установка и настройка веб/БД/PHP
  3. Загрузка SuiteCRM и настройка прав
  4. Получение SSL и настройка Nginx
  5. Запуск установщика SuiteCRM
  6. Настройка cron и мониторинга
  7. Тестирование, бэкап и перевод в продакшен

Примеры команд и сниппеты (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 обеспечивает фоновые задачи. Следуйте чек-листам по безопасности и бэкапам перед переводом в продакшен.

Если остались вопросы, укажите конкретный шаг и приведите логи/ошибки — это ускорит диагностику.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как выбрать телевизор — технологии и чек‑лист
Телевизоры

Как выбрать телевизор — технологии и чек‑лист

umask в Linux: права по умолчанию
Linux

umask в Linux: права по умолчанию

Удалить геотеги с фото на iPhone
Фото iPhone

Удалить геотеги с фото на iPhone

Как выбрать док-станцию для ноутбука
Аксессуары

Как выбрать док-станцию для ноутбука

Установка Windows в VirtualBox на Linux
Виртуализация

Установка Windows в VirtualBox на Linux

Как установить или обновить RAM на ПК
Апгрейд ПК

Как установить или обновить RAM на ПК