Установка SuiteCRM на CentOS 7 с Nginx, PHP-FPM и HTTPS (LEMP)
Этот пошаговый гид показывает, как установить и настроить SuiteCRM под стеком LEMP на CentOS 7: Nginx, PHP-FPM 7, MariaDB и бесплатный SSL от Let’s Encrypt. Включены команды, конфигурационные фрагменты, рекомендации по безопасности, проверкам и устранению неполадок. Подойдёт для системных администраторов и инженеров DevOps.
Важно: руководствуйтесь своим доменным именем и безопасными паролями, не используйте примеры паролей в продакшне.
SuiteCRM — свободное CRM‑приложение на PHP, форк SugarCRM. LEMP — комбинация Linux, Nginx (веб‑сервер), MariaDB (СУБД) и PHP‑FPM (обработка PHP через сокеты). Let’s Encrypt — сервис бесплатных SSL сертификатов. PHP‑FPM — демон, обрабатывающий PHP‑скрипты.
Что мы будем делать
- Установим Nginx
- Установим и настроим PHP‑FPM 7
- Установим и настроим MariaDB
- Скачиваем и готовим SuiteCRM
- Настроим виртуальный хост Nginx и SSL
- Установим SuiteCRM через веб‑инсталлятор
- Выполним финальную настройку и cron
Требования
- Сервер с CentOS 7
- Права root или sudo
- Домен, указывающий на сервер
- Открытые порты 80 и 443 или возможности проброса
Пошаговое руководство
Шаг 1 — Установка Nginx
Подключитесь по SSH как root:
ssh [email protected]Установите репозиторий EPEL и Nginx:
yum -y install epel-release
yum -y install nginxЗапустите и включите автозагрузку:
systemctl start nginx
systemctl enable nginxПроверьте, что Nginx слушает порт 80 и отвечает 200:
netstat -plntu
curl -I localhost
Шаг 2 — Установка и настройка PHP‑FPM 7
CentOS 7 по умолчанию не содержит современных PHP‑пакетов, поэтому добавляем сторонний репозиторий webtatic и устанавливаем PHP 7.1 (пример из оригинала). Если вы предпочитаете Remi или SCL, можно использовать их — в разделе «Альтернативные подходы» ниже описано подробнее.
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
sudo yum install -y php71w-fpm php71w-cli php71w-common php71w-imap php71w-gd php71w-mbstring php71w-mcrypt php71w-mysql php71w-xmlОткройте php.ini для базовых настроек (vim /etc/php.ini) и измените ключевые параметры:
upload_max_filesize = 100M
cgi.fix_pathinfo=0
session.save_path = "/var/lib/php/session"Создайте каталог сессий и назначьте владельцем nginx:
mkdir -p /var/lib/php/session
chown -R nginx:nginx /var/lib/php/sessionОтредактируйте пул www.conf (обычно /etc/php-fpm.d/www.conf) и установите пользователя/группу nginx, слушание через unix‑сокет и права на сокет:
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660Запустите и включите php-fpm:
systemctl start php-fpm
systemctl enable php-fpmПроверьте наличие сокета:
netstat -pl | grep php
Важно: если в системе включён SELinux, потребуется отдельная настройка контекстов; см. раздел «SELinux и права доступа» далее.
Шаг 3 — Установка и настройка MariaDB
Установите MariaDB и включите автозапуск:
yum install -y mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadbЗапустите скрипт начальной безопасности:
mysql_secure_installationСледуйте подсказкам: установите пароль root, удалите анонимных пользователей, запретите удалённый вход root, удалите тестовую БД и перезагрузите привилегии.
Создайте базу и пользователя для SuiteCRM (введите реальные надёжные пароли):
mysql -u root -p
CREATE DATABASE suitecrm_db;
CREATE USER 'crmadmin'@'localhost' IDENTIFIED BY 'hakase-labs123';
GRANT ALL PRIVILEGES ON suitecrm_db.* TO 'crmadmin'@'localhost';
FLUSH PRIVILEGES;
Важно: используйте сильные пароли и, по возможности, ограничьте доступ к порту СУБД по IP.
Шаг 4 — Загрузка и подготовка SuiteCRM
Установим git и клонируем репозиторий в /opt:
yum -y install git
cd /opt/
git clone https://github.com/salesagility/SuiteCRM.git suitecrmСоздайте необходимые каталоги, права и назначьте владельца nginx:
cd /opt/suitecrm
mkdir -p /opt/suitecrm/cache
chmod -R 775 cache custom modules themes data upload config_override.php
chown nginx:nginx -R /opt/suitecrm
Настройка Firewalld
Если у вас установлен firewalld, откройте HTTP/HTTPS и перезагрузите правила:
yum -y install firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --list-all
Получение SSL от Let’s Encrypt
Установите certbot и получите сертификат для своего домена (замените домен на ваш):
yum -y install certbot
certbot certonly --standalone -d suitecrm.hakase-labs.coСледуйте подсказкам по email и соглашению. Файлы сертификатов появляются в /etc/letsencrypt/live/вашдомен.


Настройка виртуального хоста Nginx для SuiteCRM
Создайте /etc/nginx/conf.d/suitecrm.conf со следующим содержимым (замените server_name и пути сертификатов на ваши):
# Server Config - hakase-labs
server {
listen 80;
server_name suitecrm.hakase-labs.co;
# Automatically redirect to HTTPS
return 301 https://$host$request_uri;
}
# Nginx SSL for SuiteCRM
server {
server_name suitecrm.hakase-labs.co;
# Enable http2
listen 443 http2 ssl;
# SSL Config
ssl_certificate /etc/letsencrypt/live/suitecrm.hakase-labs.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/suitecrm.hakase-labs.co/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
client_max_body_size 50M;
index index.php index.html index.htm;
root /opt/suitecrm;
location / {
root /opt/suitecrm;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
error_log /var/log/nginx/suitecrm.irsyadf.me.error.log;
location = /50x.html {
root /usr/share/nginx/html;
}
## Images and static content is treated different
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|xml|svg|wgoff2)$ {
access_log off;
expires max;
root /opt/suitecrm;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}Проверьте конфигурацию и перезапустите Nginx:
nginx -t
systemctl restart nginx
Замечание: обновите журнал ошибок и пути под вашу систему.
Шаг 5 — Веб‑инсталлятор SuiteCRM
Откройте в браузере https://suitecrm.hakase-labs.co/install.php. При первом запуске вы увидите экран лицензии GNU Affero — примите и продолжайте.

Проверьте системные требования — все проверки должны быть OK.

Внесите настройки базы данных (имя БД, пользователь, пароль) и административного аккаунта. На форме введите данные, которые вы создали ранее.

После установки вы попадёте на страницу входа, введите admin‑учётные данные и откройте дашборд.


Шаг 6 — Финальная настройка и cron
Создайте crontab для пользователя nginx, чтобы запустить планировщик SuiteCRM каждые 60 секунд:
sudo crontab -e -u nginxДобавьте строку:
* * * * * cd /opt/suitecrm; php -f cron.php > /dev/null 2>&1Сохраните и выйдите. Проверьте, что задачи выполняются — в логе SuiteCRM или через системный мониторинг.
Поздравляем, установка завершена.
Дополнительные темы и рекомендации
SELinux и права доступа
На CentOS 7 SELinux по умолчанию включён. Если SELinux включён и вы видите ошибки доступа, выполните:
# Для разрешения nginx обращаться к сокетам php-fpm
setsebool -P httpd_can_network_connect 1
# Для корректных меток в папках SuiteCRM
semanage fcontext -a -t httpd_sys_rw_content_t "/opt/suitecrm(/.*)?"
restorecon -Rv /opt/suitecrmЕсли semanage отсутствует, установите policycoreutils-python.
Важно: полностью отключать SELinux не рекомендуется в продакшне.
Let’s Encrypt и автоматическое обновление сертификатов
Создайте cron для автоматического обновления certbot:
0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"Проверяйте логи обновления и убедитесь, что на сервере не мешают временные веб‑серверы (standalone mode останавливает nginx при выпуске сертификата).
Безопасность Nginx и SSL
- Отключите устаревшие протоколы и алгоритмы (TLSv1 и TLSv1.1 устарели); в примере включены для совместимости — рекомендуется оставить только TLSv1.2 и TLSv1.3, если поддерживается.
- Включите HSTS: add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”;
- Настройте безопасные заголовки Content-Security-Policy и X-Frame-Options.
Пример для nginx (в секции server):
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy no-referrer-when-downgrade;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";Разрешения файлов и безопасность
SuiteCRM требует, чтобы определённые каталоги были записываемыми веб‑сервером. Примеры областей:
- cache, custom, modules, themes, data, upload, config_override.php
Используйте umask и права 775 для директорий и 664 для файлов. Не устанавливайте 777 — это риск безопасности.
Резервное копирование и восстановление
Рекомендуется:
- Регулярно бэкапить директорию /opt/suitecrm
- Дампить БД: mysqldump –single-transaction –quick –lock-tables=false suitecrm_db > suitecrm_db.sql
- Регулярно тестировать восстановление в отдельной среде
Мониторинг и производительность
- Установите мониторинг использования CPU, памяти и IO (например, Prometheus + Grafana или Zabbix).
- Для больших инсталляций настройте кэширование (APCu или Redis) и оптимизируйте настройки MariaDB (innodb_buffer_pool_size).
Обновления и миграция
- Для обновлений SuiteCRM следуйте официальному руководству и делайте бэкап до обновления.
- При миграции с SugarCRM проверьте совместимость данных и используйте инструменты миграции официальной документации.
Логи и отладка
- Nginx лог ошибок: /var/log/nginx/
- PHP‑FPM лог: /var/log/php-fpm/
- SuiteCRM лог: в папке /opt/suitecrm в логах приложения
Полезные команды для отладки:
tail -f /var/log/nginx/suitecrm.irsyadf.me.error.log
journalctl -u php-fpm -f
mysql -u crmadmin -p -e "SHOW TABLES;"Альтернативные подходы и варианты развёртывания
- Apache вместо Nginx
- Apache имеет модуль mod_php и может быть проще для тех, кто уже знаком с .htaccess и модулем rewrite. Nginx даёт лучшую производительность при статике и обратном проксировании.
- Docker-контейнеры
- Быстрая развёртка с контейнерным стеком (Nginx, PHP‑FPM, MariaDB). Подходит для изоляции и масштабирования. В разделе «Решение: Docker или нативная установка» ниже есть дерево решений.
- Разные репозитории PHP
- Remi или SCL предлагают более свежие и поддерживаемые пакеты PHP.
- Использование managed DB или RDS
- Можно вынести БД на управляемую платформу для отказоустойчивости.
Когда этот подход не подходит
- У вас ограничены привилегии root и вы не можете ставить репозитории или менять systemd‑сервисы.
- Требуется высокая доступность и кластеризация из коробки — стоит рассмотреть Docker Swarm/Kubernetes и HA‑настройки для MariaDB.
Ментальные модели и чек‑лист для принятия решения
- Простота развёртывания: нативная установка на CentOS — быстро и прозрачно.
- Масштабируемость: контейнеризация даёт гибкость.
- Безопасность: управляемые сервисы для БД и выделенный секретный менеджер предпочтительнее.
Мини‑чеклист перед запуском в продакшн:
- DNS указывает на сервер
- Порты 80/443 открыты и защищены
- SSL валиден и автоматическое обновление настроено
- Бэкапы БД и файлов настроены
- SELinux/ACL проверены
- cron запущен от пользователя nginx
Роль‑ориентированные контрольные списки
Системный администратор:
- Настроить Nginx, PHP‑FPM и MariaDB
- Настроить SSL и автоматическое обновление certbot
- Проверить SELinux и контексты
- Настроить бэкапы
Инженер безопасности:
- Настроить HSTS и secure headers
- Проверить права на файлы, закрыть 777
- Настроить мониторинг доступа и IDS
Администратор CRM:
- Пройти веб‑инсталлятор и создать админ‑аккаунт
- Настроить cron и проверить выполнение задач
- Создать FAQ для пользователей и планы восстановления
Пример дерева решений в формате Mermaid
flowchart TD
A[Начало: Нужно развернуть SuiteCRM?] --> B{Имеется root доступ?}
B -- Да --> C{Хотите контейнеры?}
B -- Нет --> D[Использовать managed host или PaaS]
C -- Да --> E[Использовать Docker или Kubernetes]
C -- Нет --> F[Нативная установка на CentOS 7 'этот гид']
E --> G[Преимущества: масштабируемость, изоляция]
F --> H[Преимущества: простота настройки, прямой контроль]Критерии приёмки
- Веб‑страница SuiteCRM доступна по HTTPS и сертификат валиден
- Вход в админскую панель успешен
- Cron‑задачи выполняются (нет накопившихся задач)
- Бэкапы БД и файлов созданы и тест восстановлен
- Логи не содержат критических ошибок при старте
Частые проблемы и способы решения
Проблема: 502 Bad Gateway при обращении к PHP
- Проверьте, что php-fpm запущен и сокет существует
- Проверьте права на сокет и владельца
Проблема: SSL не обновляется
- Убедитесь, что certbot имеет права останавливать/запускать nginx или используйте webroot метод
Проблема: Ошибки записи в SuiteCRM
- Проверьте права на каталоги, SELinux контексты и владельца nginx
Краткое резюме
SuiteCRM можно успешно развернуть на CentOS 7 с использованием Nginx, PHP‑FPM, MariaDB и Let’s Encrypt. Ключевые темы: корректные права и SELinux, автоматическое обновление сертификатов, cron для задач CRM и регулярные бэкапы.
Важно: перед развёртыванием в продакшн адаптируйте параметры PHP, настройки SSL и политику бэкапов под ваши бизнес‑требования.
Ресурсы
- Официальная инструкция по установке SuiteCRM: https://suitecrm.com/wiki/index.php/Installation
Похожие материалы
Как получить Xbox Wrapped 2022 — неофициальный обзор
Как установить расширения вне Chrome Web Store
Освоение Unity в Ubuntu: 8 ключевых приёмов
Запуск от другого пользователя в Windows 11
Копировать текст с изображения в Windows 11