Установка ExpressionEngine на CentOS 8 с PHP, MariaDB и Nginx

Введение
ExpressionEngine — зрелая, гибкая и безопасная система управления контентом с открытым исходным кодом, написанная на PHP. С её помощью можно создать полноценный сайт, веб-приложение или API для мобильных приложений без глубоких знаний программирования. Этот пошаговый гид проведёт через установку на CentOS 8 с использованием PHP-FPM, MariaDB и Nginx.
Ключевые понятия:
- PHP-FPM: FastCGI Process Manager для запуска PHP-приложений.
- MariaDB: форк MySQL, реляционная СУБД.
- Nginx: лёгкий и быстрый HTTP-сервер и обратный прокси.
Требования
Необходим минимальный стек:
- PHP 7.0+ с PHP-FPM и расширениями: gd, fileinfo, intl, mbstring, mysql / pdo_mysql.
- MariaDB или MySQL 5.6+ (в примерах используется MariaDB).
- Веб-сервер Nginx или Apache (в этом руководстве — Nginx).
Совет: используйте отдельную тестовую VM или контейнер для первой установки.
Быстрый план действий
- Обновить систему и установить утилиты.
- Установить PHP и расширения.
- Установить MariaDB и выполнить базовую защиту.
- Опционально — получить SSL-сертификат с помощью acme.sh.
- Установить и настроить Nginx.
- Расположить файлы ExpressionEngine и пройти мастер установки.
Начальные действия
Проверка версии CentOS:
cat /etc/centos-release
# Пример вывода: CentOS Linux release 8.0.1905 (Core)Установите часовой пояс (пример):
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'Обновите систему:
sudo yum update -yУстановите базовые утилиты:
sudo yum install -y curl wget vim git unzip socat bash-completion epel-releaseВажно: обновления содержат исправления безопасности. Выполняйте их перед установкой ПО.
Шаг 1 — Установка PHP и расширений
Установка PHP и рекомендуемых расширений:
sudo yum install -y php-cli php-fpm php-common php-mbstring php-gd php-intl php-mysqlnd php-json php-zipПроверка версии PHP:
php --version
# Пример: PHP 7.2.19 (cli)Просмотр установленных модулей:
php -mЗапустите и включите сервис PHP-FPM:
sudo systemctl start php-fpm.service
sudo systemctl enable php-fpm.serviceСовет: проверьте, под каким пользователем работает php-fpm (файл /etc/php-fpm.d/www.conf). Мы настроим его на nginx позже.
Шаг 2 — Установка MariaDB
Установка MariaDB:
sudo yum install -y mariadb-serverПроверка версии MariaDB:
mysql --version
# Пример: mysql Ver 15.1 Distrib 10.3.x-MariaDBЗапустите и включите MariaDB:
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.serviceЗапустите скрипт безопасности:
sudo mysql_secure_installationВойдите как root и создайте базу и пользователя:
sudo mysql -u root -p
# Введите пароль root MariaDB
CREATE DATABASE dbname;
GRANT ALL ON dbname.* TO 'username' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
quitВажно: замените dbname, username и password на реальные значения. Используйте сильный пароль.
Совет по безопасности: ограничьте доступ к аккаунту MariaDB из внешних сетей, если не требуется.
Шаг 3 — Получение SSL с помощью acme.sh (опционально)
HTTPS — рекомендация, но не строго обязательна. Для автоматизации выдачи сертификатов от Let’s Encrypt используем acme.sh — лёгкий шелл-клиент.
Установка acme.sh:
sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail 'you@example.com'
source ~/.bashrc
cd ~Проверка версии:
acme.sh --versionПолучение сертификатов (пример для домена example.com):
# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256Для тестирования добавьте флаг –staging.
Установка сертификатов в каталог /etc/letsencrypt:
mkdir -p /etc/letsencrypt/example.com
mkdir -p /etc/letsencrypt/example.com_ecc
# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd 'sudo systemctl reload nginx.service'
# ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd 'sudo systemctl reload nginx.service'Выданные сертификаты по умолчанию автоматом продлеваются клиентом acme.sh.
Выход из root:
exitПримечание: в некоторых окружениях порт 80/443 может быть занят. На время получения сертификата standalone режим поднимает временный веб-сервер.
Шаг 4 — Установка и настройка Nginx
Установите Nginx:
sudo yum install -y nginxПроверьте версию:
nginx -vЗапустите и включите сервис:
sudo systemctl start nginx.service
sudo systemctl enable nginx.serviceСоздайте конфигурацию для ExpressionEngine:
Откройте файл /etc/nginx/conf.d/expressionengine.conf и вставьте (пример):
server {
listen 443 ssl;
listen 80;
server_name example.com;
root /var/www/expressionengine;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;
index index.php;
location / {
index index.php;
try_files $uri $uri/ @ee;
}
location @ee {
rewrite ^(.*) /index.php?$1 last;
}
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}Проверьте синтаксис:
sudo nginx -tПерезагрузите Nginx:
sudo systemctl reload nginx.serviceВажно: в конфигурации пути к сертификатам и ключам должны быть корректны. Если вы используете только RSA или только ECDSA, удалите или закомментируйте лишние директивы.
Шаг 5 — Установка ExpressionEngine
Создайте корневую папку сайта и загрузите релиз:
sudo mkdir -p /var/www/expressionengine
cd /var/www/expressionengine
sudo wget -O ee.zip --referer https://expressionengine.com/ 'https://expressionengine.com/?ACT=243'
sudo unzip ee.zip
sudo rm ee.zipПоменяйте владельца на nginx:
sudo chown -R nginx:nginx /var/www/expressionengineОтредактируйте /etc/php-fpm.d/www.conf и установите user и group в nginx:
# user = nginx
# group = nginxПерезапустите PHP-FPM:
sudo systemctl restart php-fpm.serviceОткройте в браузере адрес установки, например:
Следуйте мастеру установки. После успешной установки удалите или переименуйте каталог установщика system/ee/installer/.
Шаг 6 — Завершение настройки ExpressionEngine
При установке введите реквизиты базы и учётную запись администратора.

После установки вы увидите страницу входа в админку:

Панель администратора выглядит так:

Фронтенд по умолчанию после установки:

Поздравляем — базовая установка завершена.
Безопасность и рекомендации по жёсткому укреплению
- Настройте firewall (firewalld или iptables) и разрешите только нужные порты (80, 443, SSH по необходимости).
- Запретите вход в MariaDB с удалённых адресов, если не требуется.
- Регулярно обновляйте пакеты и применяйте патчи.
- Перенесите конфигурационные файлы и ключи в защищённые каталоги с правами 640/600.
- Ограничьте права файлов приложения, избегайте chmod 777.
Тонкие настройки и отладка
- Проверьте логи: /var/log/nginx/error.log и /var/log/php-fpm/www-error.log (пути могут отличаться).
- Ошибка 502 Bad Gateway чаще всего указывает на то, что PHP-FPM не запущен или слушает другой сокет/порт.
- Убедитесь, что fastcgi_pass в конфигурации Nginx совпадает с настройкой PHP-FPM.
Альтернативные подходы
- Вместо Nginx можно использовать Apache с модулем mod_php или php-fpm. Apache проще в конфигурации для .htaccess, но Nginx даёт лучшую производительность под высокой нагрузкой.
- Для развёртывания в контейнерах используйте Docker-контейнеры: php-fpm, nginx, mariadb. Это упрощает переносимость и изоляцию окружений.
Сравнение: Nginx vs Apache (кратко)
- Производительность: Nginx быстрее при статике и большом числе соединений.
- Гибкость: Apache проще для legacy-приложений с .htaccess.
- Ресурсоёмкость: Nginx экономичнее по памяти.
Частые ошибки и способы исправления
- 502 Bad Gateway
- Решение: проверьте, запущен ли php-fpm, совпадает ли порт/сокет в fastcgi_pass.
- 403 Forbidden
- Решение: проверьте права файлов и владельца директорий; убедитесь, что index.php доступен.
- Ошибки подключения к БД
- Решение: проверьте конфигурацию базы, правильность учётных данных и доступ хоста.
Роль — чек-листы
Системный администратор:
- Установил и настроил PHP-FPM.
- Настроил и защитил MariaDB.
- Настроил Nginx и SSL.
- Настроил бэкапы.
Разработчик:
- Проверил рабочий индекс и маршрутизацию.
- Проверил права на запись для необходимых каталогов (cache, uploads).
- Протестировал базовые шаблоны.
Специалист по безопасности:
- Проверил обновления и CVE.
- Настроил firewall и fail2ban.
- Проверил права доступа к ключам и конфигам.
Критерии приёмки
- Страница установки admin.php доступна и проходит все шаги мастера.
- Вход в панель администратора возможен под созданной учётной записью.
- Главная страница сайта отображается без ошибок PHP/Nginx.
- HTTPS корректно настроен (если применимо) и сертификат валиден.
Мини-методология быстрой установки (cheat sheet)
- Обновить систему: sudo yum update -y
- Установить PHP и php-fpm
- Установить MariaDB, выполнить mysql_secure_installation
- Установить Nginx
- Настроить виртуальный хост, распаковать ExpressionEngine
- Настроить права, перезапустить сервисы
Пример дерева принятия решения (Mermaid)
flowchart TD
A[Нужен HTTPS?] -->|Да| B[Использовать acme.sh]
A -->|Нет| C[Оставить HTTP]
B --> D[Получить сертификат]
D --> E[Установить в /etc/letsencrypt]
C --> F[Пропустить шаг с certs]Проверочные тесты и приёмка
- Откройте http://example.com/admin.php и пройдите установщик.
- Войдите в админку и создайте запись в канал; убедитесь, что запись отображается на фронтенде.
- Проверьте логи на предмет ошибок в течение 24 часов после запуска.
Полезные ссылки
Итог
Установка ExpressionEngine на CentOS 8 несложна при соблюдении базовых шагов: подготовка окружения, установка PHP-FPM и MariaDB, настройка Nginx и (при желании) получение SSL. Держите систему обновлённой, ограничьте права доступа и тестируйте установку на тестовом окружении перед продакшеном.
Важно: регулярно делайте резервные копии базы и файлов сайта.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента