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

Установка SuiteCRM на Rocky Linux 9 с Nginx и Let's Encrypt

7 min read CRM Обновлено 19 Nov 2025
SuiteCRM на Rocky Linux 9 — Nginx и Let's Encrypt
SuiteCRM на Rocky Linux 9 — Nginx и Let's Encrypt

Логотип и архитектурная схема SuiteCRM

SuiteCRM — открытое CRM‑решение на PHP. В этой инструкции показано пошагово, как развернуть SuiteCRM 8.x на Rocky Linux 9 с Nginx, PHP‑FPM, MySQL и сертификатом Let’s Encrypt. Приведены команды, права SELinux, настройка cron и советы по безопасности и отладке.

Короткое содержание

  • Подготовка сервера и пакетов
  • Установка Nginx, PHP 8.1 и MySQL
  • Получение SSL‑сертификата через Certbot
  • Развёртывание SuiteCRM и настройка SELinux
  • Права, cron, советы по безопасности, альтернативы и чек‑листы для ролей

Требования

  • Сервер с Rocky Linux 9.
  • Пользователь с sudo‑привилегиями (не root).
  • Полное доменное имя (FQDN), например suitecrm.example.com.
  • Система обновлена:
$ sudo dnf update
  • Установите набор утилит:
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y

Некоторые пакеты могут уже быть установлены.

Введение: что делает каждая часть стека

  • Nginx — обратный прокси и статический веб‑сервер.
  • PHP‑FPM — обработчик PHP‑скриптов; используем PHP 8.1.
  • MySQL — база данных для SuiteCRM.
  • Certbot/Let’s Encrypt — TLS для шифрования трафика.
  • SELinux — обеспечивает безопасность доступа файлов и сетевых подключений; важно правильно настроить контексты.

Important: инструкция рассчитана на SuiteCRM 8.x; у 7.x путь к публичной директории был другим.

Шаг 1 — Настройка брандмауэра

Rocky Linux использует firewalld. Проверьте состояние:

$ sudo firewall-cmd --state
running

Посмотрите активные сервисы в зонах (по умолчанию — public):

$ sudo firewall-cmd --permanent --list-services

Откройте HTTP и HTTPS:

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Примените изменения и проверьте ещё раз:

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --permanent --list-services

Ожидаемый результат включает http и https.

Шаг 2 — Установка Nginx

По умолчанию в Rocky Linux может быть старая версия Nginx. Подключите официальный репозиторий Nginx:

$ sudo nano /etc/yum.repos.d/nginx.repo

Вставьте:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Сохраните (Ctrl+X, Y).

Установите Nginx:

$ sudo dnf install -y nginx

Проверьте версию:

$ nginx -v
nginx version: nginx/1.24.0

Включите и запустите сервис:

$ sudo systemctl enable nginx --now

Проверьте статус:

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/nginx.service.d
             ??php-fpm.conf
     Active: active (running) since Thu 2023-05-18 22:32:50 UTC; 4s ago
       Docs: http://nginx.org/en/docs/
    Process: 3955 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 3957 (nginx)
      Tasks: 2 (limit: 5922)
     Memory: 2.1M
        CPU: 6ms
     CGroup: /system.slice/nginx.service
             ??3957 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??3958 "nginx: worker process"

Шаг 3 — Установка PHP и расширений

SuiteCRM 8 требует PHP 8.1. Добавьте EPEL и репозиторий Remi:

$ sudo dnf install epel-release -y
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Посмотрите доступные потоки PHP (streams):

$ dnf module list php -y

Сбросьте модуль и включите PHP 8.1 из Remi:

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.1

Установите PHP и нужные расширения для SuiteCRM:

$ sudo dnf install -y php-fpm php-mysql php-bcmath php-xml php-zip php-curl php-mbstring php-gd php-tidy php-intl php-cli php-opcache php-soap php-imap php-ldap

Проверьте версию PHP:

$ php --version
PHP 8.1.19 (cli) (built: May 10 2023 13:43:03) (NTS gcc x86_64)

Включите и запустите php-fpm:

$ sudo systemctl enable php-fpm --now

Шаг 4 — Установка MySQL

Установите MySQL:

$ sudo dnf install mysql-server

Проверьте версию:

$ mysql --version
mysql  Ver 8.0.32 for Linux on x86_64 (Source distribution)

Включите и запустите MySQL:

$ sudo systemctl enable mysqld --now

Запустите скрипт безопасной настройки:

$ sudo mysql_secure_installation

При появлении запроса про Validate Password Component — рекомендую ответить “Y” и выбрать уровень 2 (STRONG). Далее установите пароль root и удалите анонимных пользователей, тестовую базу и отключите удалённый вход root.

Шаг 5 — Настройка базы данных для SuiteCRM

Войдите в MySQL и создайте базу и пользователя:

$ sudo mysql -u root -p

Внутри MySQL:

mysql> CREATE DATABASE suitecrm;
mysql> CREATE USER 'suiteuser'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> GRANT ALL PRIVILEGES ON suitecrm.* TO 'suiteuser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

Замените ‘Your_password2’ на надёжный пароль, соответствующий политике.

Шаг 6 — Установка SSL (Certbot через snap)

Установим snapd и Certbot. EPEL уже был установлен ранее.

$ sudo dnf install -y snapd
$ sudo systemctl enable snapd --now
$ sudo snap install core && sudo snap refresh core
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Проверьте версию:

$ certbot --version
certbot 2.6.0

Запросите сертификат для вашего домена (замените email и домен):

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d suitecrm.example.com

Сертификат появится в /etc/letsencrypt/live/suitecrm.example.com.

Создайте Diffie‑Hellman группу:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проверьте автоматическое обновление:

$ sudo systemctl list-timers
$ sudo certbot renew --dry-run

Important: убедитесь, что ваш домен указывает на сервер и порты 80/443 открыты.

Шаг 7 — Загрузка SuiteCRM

Создайте веб‑корень и скачайте архив SuiteCRM 8.x (ссылка с сайта SuiteCRM):

$ sudo mkdir /var/www/html/suitecrm -p
$ cd /var/www/html/suitecrm
$ sudo wget https://suitecrm.com/download/140/suite83/562304/suitecrm-8-3-0.zip
$ sudo unzip -q suitecrm*.*
$ sudo rm suitecrm-8-3-0.zip

Установите права и владельца (пользователь Nginx):

$ sudo find . -type d -not -perm 2755 -exec chmod 2755 {} \;
$ sudo find . -type f -not -perm 0644 -exec chmod 0644 {} \;
$ sudo find . ! -user nginx -exec chown nginx:nginx {} \;
$ sudo chmod +x bin/console

Примечание: команда chown проходит по всем файлам и назначает владельца nginx; проверьте, что это соответствует вашей политике безопасности.

Шаг 8 — Настройка SELinux

Пропишите корректный контекст для файлов SuiteCRM:

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/suitecrm(/.*)?"
$ sudo restorecon -Rv /var/www/html/suitecrm/

Разрешите Nginx подключаться к базе данных и внешним сервисам (например, SMTP):

$ sudo setsebool -P httpd_can_network_connect_db 1
$ sudo setsebool -P httpd_can_network_connect 1

Note: semanage входит в пакет policycoreutils-python-utils; если его нет — установите.

Шаг 9 — Настройка Nginx и PHP

Настройка PHP‑FPM

Откройте /etc/php-fpm.d/www.conf и установите пользователя и группу для процессов PHP в nginx:

$ sudo nano /etc/php-fpm.d/www.conf

Найти и изменить на:

user = nginx
group = nginx

Затем раскомментируйте и укажите владельца сокета:

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Закомментируйте listen.acl_users, если это необходимо:

;listen.acl_users = apache,nginx

Увеличьте max_execution_time и memory_limit, а также пределы загрузок файлов:

$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 60/' /etc/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 25M/g' /etc/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 25M/g' /etc/php.ini

Перезапустите php-fpm и измените группу каталога сессий:

$ sudo systemctl restart php-fpm
$ sudo chgrp -R nginx /var/lib/php/session

Настройка Nginx для SuiteCRM

Создайте конфигурацию сайта:

$ sudo nano /etc/nginx/conf.d/suitecrm.conf

Вставьте (замените suitecrm.example.com на ваш домен):

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name suitecrm.example.com;

    root /var/www/html/suitecrm/public;
    error_log /var/log/nginx/suitecrm.error.log;
    access_log /var/log/nginx/suitecrm.access.log;
    client_max_body_size 25M;

    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_files $uri /index.php;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        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;
    }

    # Deny all attempts to access hidden files/folders such as .htaccess, .htpasswd, .DS_Store (Mac), etc...
    location ~ /\. {
        deny all;
    }

    # 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)$ {
        expires           360d;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  suitecrm.example.com;
    return 301   https://$host$request_uri;
}

Обратите внимание: корневой каталог для SuiteCRM 8.x — /var/www/html/suitecrm/public.

Добавьте хэш для server_names перед включением conf.d, если нужно:

$ sudo nano /etc/nginx/nginx.conf

Добавьте строку перед include /etc/nginx/conf.d/*.conf;:

server_names_hash_bucket_size  64;

Проверьте конфигурацию и перезапустите Nginx:

$ sudo nginx -t
$ sudo systemctl restart nginx

Шаг 10 — Установка и вход в SuiteCRM

Есть два способа установки: через веб‑мастер или через консоль.

Вариант 1 — Веб‑мастер

Откройте https://suitecrm.example.com в браузере — должен появиться мастер установки.

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

Заполните URL, данные БД и администратора. Для хоста БД укажите localhost, порт 3306.

Страница входа SuiteCRM

После установки войдите в панель администратора и настройте Email и другие интеграции через Admin → Email Settings.

Панель администратора SuiteCRM

Если у вас есть интеграции (Amazon SES, SMTP, Gmail, Exchange), настройте их в разделе Email Settings.

Настройки Email SuiteCRM

Для проверки отправки можно воспользоваться кнопкой Send Test Email.

Окно тестового письма SuiteCRM

Тестовое письмо SuiteCRM

Вариант 2 — Установка через консоль SuiteCRM

Перейдите в каталог SuiteCRM и выполните установку через bin/console:

$ cd /var/www/html/suitecrm
$ sudo ./bin/console suitecrm:app:install -u "admin_username" -p "admin_password" -U "db_user" -P "db_password" -H "localhost" -N "dbname" -S "https://suitecrm.example.com" -d "yes" -Z "3306"

Параметр -d "yes" добавляет демонстрационные данные; его можно опустить для чистой установки.

Также можно запустить установщик без параметров — он будет интерактивным:

$ sudo ./bin/console suitecrm:app:install

После успешной установки откройте https://suitecrm.example.com и войдите.

Шаг 11 — Настройка cron

SuiteCRM требует запуска cron каждую минуту. Отредактируйте crontab для пользователя nginx:

$ sudo EDITOR=nano crontab -e -u nginx

Добавьте строку:

*    *    *    *    *     cd /var/www/html/suitecrm/public/legacy; php -f cron.php > /dev/null 2>&1

Сохраните. Проверьте логи cron, если задачи не выполняются.

Критерии приёмки

  • Доступ к https://suitecrm.example.com открывается без ошибок TLS.
  • Веб‑мастер SuiteCRM успешно прошёл все шаги и вы видите страницу логина.
  • Cron‑задача выполняется каждую минуту (проверьте логи или обновления в интерфейсе).
  • Email‑уведомления проходят (проверьте тестовое письмо).
  • SELinux не блокирует записи в директории и сетевые подключения (проверка audit.log при проблемах).

Отладка: распространённые проблемы и решения

  • Сертификат не выписывается: проверьте DNS и доступность порта 80.
  • 502 Bad Gateway от Nginx: проверьте, запущен ли php‑fpm и совпадает ли сокет в конфигурации (обычно /run/php-fpm/www.sock).
  • Проблемы с правами файлов: убедитесь, что nginx владеет файлами и что контекст SELinux выставлен httpd_sys_rw_content_t.
  • Ошибка подключения к БД: проверьте правильность хоста, пользователя и пароля в мастере установки или в конфигурационных файлах.

Альтернативные подходы

  • Apache вместо Nginx: если вы привыкли к Apache, можно использовать его с модулем php‑fpm. В этом случае меняются настройки виртуального хоста и SELinux контексты.
  • Контейнеризация: запуск SuiteCRM в Docker/Kubernetes упрощает переносимость и изоляцию зависимостей.
  • Панели управления (cPanel/ISPmanager): подходят для хостинга, где управление серверами выполняется через GUI.

Когда это может не подойти

  • Если вы используете управляемый хостинг без доступа к root/sudo — этот метод неприменим.
  • Маленькие инсталляции с низкими требованиями: возможно, проще использовать готовый SaaS‑CRM.

Руководство для ролей (чек‑лист)

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

  • Подготовить сервер с Rocky Linux 9.
  • Настроить firewall и DNS для домена.
  • Установить Nginx, PHP‑FPM, MySQL, snapd/Certbot.
  • Настроить SELinux контексты и специальные boolean‑флаги.

DevOps инженер:

  • Настроить systemd таймеры для резервного копирования и мониторинга.
  • Обеспечить CI/CD для деплоймента (если нужно).
  • Контролировать автоматическое обновление certbot.

Разработчик/администратор SuiteCRM:

  • Запустить веб‑мастер или консольную установку.
  • Настроить Email, интеграции и права пользователей.
  • Настроить cron и проверить фоновые задачи.

Саппорт/операторы:

  • Проверять логи Nginx, PHP‑FPM и MySQL.
  • Проверять выполнение cron и очереди на отправку почты.

Безопасность и рекомендации

  • Регулярно обновляйте систему и компоненты (DNF, PHP, Nginx, MySQL, SuiteCRM).
  • Используйте сильные пароли и ограничения доступа к базе данных.
  • Ограничьте SSH доступ по ключам и по IP, отключите вход по паролю.
  • Делайте регулярные бэкапы базы и файлов, проверяйте процедуру восстановления.
  • Включите автоматическое обновление certbot и тестируйте продление.

Короткий словарь

  • FQDN — полное доменное имя (fully qualified domain name).
  • PHP‑FPM — обработчик PHP‑скриптов, запускающийся как отдельный процесс.
  • SELinux — подсистема безопасности, управляющая контекстами доступа.
  • Certbot — клиент для автоматической генерации сертификатов Let’s Encrypt.

Мини‑плейбук: быстрое восстановление при ошибке 502

  1. Проверить статус php-fpm: sudo systemctl status php-fpm.
  2. Проверить сокет/порт в /etc/php-fpm.d/www.conf и в конфиге Nginx.
  3. Просмотреть логи Nginx (/var/log/nginx/suitecrm.error.log) и PHP (/var/log/php-fpm/www-error.log если есть).
  4. Перезапустить службы: sudo systemctl restart php-fpm && sudo systemctl restart nginx.
  5. Если SELinux блокирует — посмотреть sudo ausearch -m avc -ts recent и применить restorecon/semodule правила.

Решение: использовать веб‑мастер или консоль?

flowchart TD
  A[У вас GUI‑доступ к серверу?] -->|Да| B[Веб‑мастер: откройте https://<домен>]
  A -->|Нет| C[Используйте консольный установщик: bin/console]
  B --> D[Следуйте шагам мастера]
  C --> D
  D --> E[Проверка: логин и cron]

Тесты и критерии приёмки

  • TLS: https://suitecrm.example.com открывается без предупреждений.
  • Логин: можно выполнить вход под админом.
  • Cron: в течение 5 минут появляются записи об успешном выполнении фоновых задач.
  • Email: тестовое письмо приходит на указанный адрес.

Совместимость и миграция

  • SuiteCRM 8.x использует публичную папку public — при миграции с 7.x обновите корневой путь в конфигурации Nginx.
  • При переносе данных между версиями следуйте официальной документации по экспорту/импорту модулей и данных.

Заключение

Следуя шагам этой инструкции, вы получите работоспособный экземпляр SuiteCRM 8.x на Rocky Linux 9 с Nginx, PHP‑FPM, MySQL и TLS через Let’s Encrypt. Проверьте работу cron и отправку писем, настройте резервное копирование и мониторинг. При возникновении проблем используйте чек‑листы и плейбуки из этой статьи.

Если у вас остались вопросы — опишите точную ошибку, логи и вывод сервисов, и вы получите более точную помощь.

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

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

Понимание типографии — руководство для дизайнеров
Дизайн

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

Как вставить PDF в Microsoft Word
Microsoft Word

Как вставить PDF в Microsoft Word

Сброс Windows 10/11 без потери файлов — как и когда
Windows

Сброс Windows 10/11 без потери файлов — как и когда

Беспроводная печать в Windows — советы и альтернативы
Технологии

Беспроводная печать в Windows — советы и альтернативы

Отслеживание использования sudo в Linux
Linux

Отслеживание использования sudo в Linux

Запускать Microsoft Edge в InPrivate на Windows 10
Windows 10

Запускать Microsoft Edge в InPrivate на Windows 10