Установка Neos CMS на Rocky Linux 8 — пошаговое руководство

Neos — свободная система управления контентом (CMS) с визуальным редактированием. Она подходит для блогов, корпоративных сайтов, портфолио и новостных порталов. В Neos есть встроенные инструменты SEO, человекочитаемые URL, управление плагинами, предпросмотр для устройств и поддержка множества шаблонов. Также система совместима с современными интерфейсами: REST API, JSON, GraphQL и oEmbed.
В этом пошаговом руководстве вы установите Neos на сервер с Rocky Linux 8. Я подробно опишу подготовку сервера, установку компонентов LEMP-стека, настройку SELinux и SSL, а также финальную настройку Neos.
Кому это руководство подходит
- Системным администраторам и девопс-инженерам
- Разработчикам, которые хотят развернуть Neos для клиента
- Тем, кто настраивает сайт на собственном VPS
Краткое определение: Neos — PHP-база с зависимостями через Composer и файловой структурой в /var/www/neos.
Требования и предпосылки
- Сервер с Rocky Linux 8 (root доступ или не-root sudo пользователь).
- Наличие не-root sudo-пользователя.
- Доменное имя, указывающее на сервер (например neos.example.com).
- Время на выполнение: от 30 минут до 2 часов, в зависимости от скорости сервера и интернета.
Проверьте и обновите систему:
$ sudo dnf updateУстановите базовые утилиты (некоторые могут быть уже установлены):
$ sudo dnf install wget curl nano unzip yum-utils -yПлан работ (коротко)
- Конфигурация брандмауэра (firewalld)
- Установка Nginx (официальный репозиторий)
- Установка PHP 8.0 и расширений (Remi)
- Установка MySQL, создание базы и пользователя
- Установка Composer
- Установка Neos через Composer
- Настройка SELinux
- Настройка и получение SSL с помощью Certbot
- Конфигурация Nginx и PHP-FPM для Neos
- Финальная настройка через веб-интерфейс Neos
Шаг 1 — Настройка брандмауэра (firewalld)
Проверьте статус 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Проверьте, что в выводе присутствуют http и https.
Важное: если вы используете нестандартные порты (например альтернативный порт SSH или админ-порт), разрешите их явно.
Шаг 2 — Установка Nginx
Rocky Linux обычно поставляется с более старой версией Nginx. Для актуальной версии используйте официальный репозиторий Nginx.
Создайте файл /etc/yum.repos.d/nginx.repo:
$ 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 nginx
$ nginx -v
$ sudo systemctl enable nginx --nowЕсли Nginx не запускается, проверьте журналы: sudo journalctl -u nginx —no-pager.
Шаг 3 — Установка PHP и расширений
Neos требует современной версии PHP. В этом руководстве мы используем репозиторий Remi и PHP 8.0.
Установите EPEL и Remi:
$ sudo dnf install epel-release
$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpmПросмотрите доступные потоки PHP:
$ dnf module list php -yСбросьте модуль и включите remi-8.0:
$ sudo dnf module reset php
$ sudo dnf module enable php:remi-8.0Установите PHP-FPM и необходимые расширения для Neos:
$ sudo dnf install php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-cli php-imagick ImageMagick php-intlПроверьте версию PHP:
$ php --versionЗапустите php-fpm:
$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpmСовет: если вы планируете использовать OPcache, установите и настройте его в php.ini для повышения производительности.
Шаг 4 — Установка и настройка MySQL
Установите MySQL Server из стандартного репозитория:
$ sudo dnf install mysql-server
$ sudo systemctl enable mysqld --nowЗапустите скрипт безопасной настройки:
$ sudo mysql_secure_installationВыберите включение Validate Password Plugin (Y) и уровень STRONG (2), если хотите более строгую политику паролей.
Создайте пользователя и базу для Neos:
$ mysql -u root -p
mysql> CREATE USER 'neos'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> CREATE DATABASE neosdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> GRANT ALL PRIVILEGES ON neosdb.* TO 'neos'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exitПримечание: используйте надёжный пароль, соответствующий политике Validate Password.
Шаг 5 — Установка Composer
Composer — менеджер зависимостей для PHP. Он нужен для установки Neos.
Скачайте установщик и проверьте его сигнатуру:
$ curl -sS https://getcomposer.org/installer -o composer-setup.php
$ HASH=`curl -sS https://composer.github.io/installer.sig`
$ echo $HASH
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"Установите Composer глобально:
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
$ composer --versionЕсли вы используете старую версию Composer, обновите: composer self-update –2
Шаг 6 — Установка Neos CMS
Создайте корневой каталог и установите Neos через Composer:
$ sudo mkdir -p /var/www/neos
$ sudo chown -R $USER:$USER /var/www/neos
$ cd /var/www/neos
$ composer create-project --no-dev neos/neos-base-distribution .Во время установки Composer может запросить подтверждение для плагинов — отвечайте “y”, чтобы разрешить установку.
Установите права и добавьте пользователя в группу nginx:
$ sudo ./flow core:setfilepermissions $USER nginx nginx
$ sudo usermod -a -G nginx $USERВажно: точный набор прав зависит от вашей политики безопасности; в продакшене минимизируйте права записи.
Шаг 7 — Настройка SELinux
Если SELinux активен, задайте правильные контексты файлов и разрешите подключение к сети для httpd-процессов:
$ sudo chcon -t httpd_sys_content_t /var/www/neos -R
$ sudo chcon -t httpd_sys_rw_content_t /var/www/neos -R
$ sudo setsebool -P httpd_can_network_connect onОтладка SELinux: если что-то не работает, смотрите /var/log/audit/audit.log и используйте команду audit2why/audit2allow для анализа.
Совет: для постоянного восстановления контекстов используйте restorecon -R /var/www/neos.
Шаг 8 — Установка и настройка SSL (Let’s Encrypt)
Установите certbot (EPEL уже установлен ранее):
$ sudo dnf install certbotОстановите Nginx, чтобы Certbot мог занять порт 80 (если вы используете standalone режим):
$ sudo systemctl stop nginxЗапрос сертификата (замените email и домен):
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m your-email@example.com -d neos.example.comСертификат появится в /etc/letsencrypt/live/neos.example.com.
Создайте Diffie-Hellman параметры для дополнительной криптографической стойкости:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Подготовьте веб-корень для автообновления и cron-скрипт для продления сертификата:
$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renewВставьте:
#!/bin/sh
certbot renew --cert-name neos.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"Сделайте исполняемым:
$ sudo chmod +x /etc/cron.daily/certbot-renewСовет: для автоматического продления можно также настроить systemd таймер или отказаться от остановки Nginx, использовав –nginx плагин certbot.
Шаг 9 — Настройка PHP-FPM и Nginx для Neos
Настройка PHP-FPM
Откройте /etc/php-fpm.d/www.conf и установите пользователя/группу nginx:
$ sudo nano /etc/php-fpm.d/www.confИзмените значения (пример):
user = nginx
group = nginxЗапустите/перезапустите php-fpm:
$ sudo systemctl restart php-fpmКонфигурация Nginx для Neos
Создайте файл /etc/nginx/conf.d/neos.conf:
$ sudo nano /etc/nginx/conf.d/neos.confВставьте (замените server_name на ваш домен):
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name neos.example.com;
access_log /var/log/nginx/neos.access.log;
error_log /var/log/nginx/neos.error.log;
# SSL
ssl_certificate /etc/letsencrypt/live/neos.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/neos.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/neos.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;
resolver 8.8.8.8;
root /var/www/neos/Web/;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Pass PHP Scripts To FastCGI Server
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/run/php-fpm/www.sock; # Depends On The PHP Version
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param FLOW_REWRITEURLS 1;
fastcgi_param FLOW_CONTEXT Production;
fastcgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
fastcgi_param X-Forwarded-Port $proxy_port;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_NAME $http_host;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
include fastcgi_params;
try_files $uri =404;
}
location ~ /_Resources/ {
access_log off;
log_not_found off;
expires max;
if (!-f $request_filename) {
rewrite "/_Resources/Persistent/([a-z0-9]{40})/.+\.(.+)" /_Resources/Persistent/$1.$2 break;
rewrite "/_Resources/Persistent(?>/[a-z0-9]{5}){8}/([a-f0-9]{40})/.+\.(.+)" /_Resources/Persistent/$1.$2 break;
}
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name neos.example.com;
return 301 https://$host$request_uri;
}Обратите внимание: root директива указывает на /var/www/neos/Web/.
Добавьте в /etc/nginx/nginx.conf строку server_names_hash_bucket_size 64; перед include /etc/nginx/conf.d/*.conf;
Проверьте конфигурацию и перезапустите Nginx:
$ sudo nginx -t
$ sudo systemctl restart nginxЕсли при перезапуске возникнут ошибки, проверьте /var/log/nginx/neos.error.log и системный журнал.
Шаг 10 — Завершение установки Neos через веб-интерфейс
Откройте в браузере https://neos.example.com (замените домен). Вы увидите экран настройки.

Нажмите “Go to setup” и войдите, используя временный пароль, который хранится в файле /var/www/neos/Data/SetupPassword.txt.

Посмотреть пароль можно так:
$ cat /var/www/neos/Data/SetupPassword.txt
The setup password is:
SCPUYmmQ
After you successfully logged in, this file is automatically deleted for security reasons.
Make sure to save the setup password for later use.Neos проверит наличие необходимых PHP-расширений и затем попросит данные базы (используйте neos / neosdb / Your_password2).

При успешном подключении вы увидите сообщение “Connection established” и далее сможете создать администратора.

Выберите импорт демо-сайта или создание с нуля. При создании с нуля на странице не будет CSS — это нормальное поведение.

После завершения установки откройте бэкенд и удалите тестовые страницы (например “Try me”), чтобы не оставлять публичного доступа к настройкам.



Поздравляем — установка завершена.
Рекомендации по безопасности и эксплуатации
- Удалите или ограничьте доступ к SetupPassword.txt сразу после использования.
- Примените строгие права на каталоги: файлы — 644, каталоги — 755, файлы с открытой записью только для владельца/группы nginx.
- Отключите ненужные публичные страницы и демо-контент.
- Настройте бэкап базы MySQL и каталога /var/www/neos/Data и /var/www/neos/Sites.
- Настройте мониторинг доступности (uptime checks) и логирование (файлы Nginx, системный journal).
Полезные сценарии обслуживания (SOP, кратко)
- Резервное копирование (ежедневно):
- База: mysqldump –single-transaction neosdb > neosdb-$(date +%F).sql
- Файлы: tar -czf neos-www-$(date +%F).tar.gz /var/www/neos
- Обновление зависимостей проекта:
- Перейдите в /var/www/neos, выполните composer update (только после тестирования в staging).
- Роллбек (быстрый):
- Разверните последнюю рабочую резервную копию базы и файлов.
Отладка — часто встречающиеся проблемы и решения
- Nginx 502 Bad Gateway: проверьте, что php-fpm запущен и сокет совпадает с fastcgi_pass; проверьте права на сокет (/run/php-fpm/www.sock).
- Ошибки прав доступа: убедитесь, что nginx имеет доступ на чтение к /var/www/neos и права записи там, где нужно (Data, Packages, Configuration в зависимости от настроек).
- SELinux блокирует операции: проверьте /var/log/audit/audit.log и используйте audit2allow, или временно переключитесь в permissive для диагностики.
- Certbot не может получить порт 80: убедитесь, что Nginx остановлен или используйте –nginx плагин.
Тесты и критерии приёмки
Минимальные тесты перед вводом в эксплуатацию:
- Доступ к https://neos.example.com (валидный сертификат).
- Успешная авторизация в бэкенде и создание страниц.
- Публикация контента доступна на фронтенде.
- Бэкап базы и файлов выполняется успешно.
Примеры acceptance-steps:
- Проверка HTTPS: curl -I https://neos.example.com — код 200 и заголовок Strict-Transport-Security.
- Проверка PHP: php -m | grep -E “(curl|mbstring|gd|imagick|intl)”.
- Проверка прав: ls -la /var/www/neos и отсутствие права записи для «other».
Резервные решения и альтернативы
- Веб-сервер: Apache (mod_php или php-fpm) вместо Nginx.
- База данных: MariaDB совместима с MySQL и часто используется как замена.
- SSL: коммерческие SSL-сертификаты вместо Let’s Encrypt, если нужна расширенная поддержка.
- Хостинг: использование PaaS/managed-хостинга для снижения операционной нагрузки.
Советы по производительности
- Включите OPcache и настройте memory_consumption, max_accelerated_files.
- Настройте gzip/HTTP/2 в Nginx.
- Настройте кэширование статики с длительным expires и CDN.
- Следите за размерами логов и ротацией (logrotate).
Контроль совместимости и миграция
- Версии PHP: Neos требует современный PHP; проверяйте требования в документации Neos для конкретной версии.
- При миграции с другой CMS экспортируйте контент через CSV/JSON или API, затем импортируйте в Neos.
- Тестируйте обновления сначала в тестовой среде.
Краткий глоссарий (1 строка на термин)
- LEMP: Nginx + MySQL + PHP-FPM.
- PHP-FPM: FastCGI-процесс менеджер для PHP.
- Composer: менеджер зависимостей PHP.
- Certbot: клиент Let’s Encrypt для получения SSL.
Контрольный чек-лист перед запуском (роль: оператор)
- Сертификат установлен и действует.
- База данных создана и доступна.
- PHP и расширения установлены.
- SELinux и firewall настроены.
- Права файлов установлены корректно.
- Резервное копирование настроено.
Короткое объявление (100–200 слов)
Neos CMS успешно установлен на сервере Rocky Linux 8 по инструкции LEMP. Руководство включает пошаговую установку Nginx, PHP 8.0 через Remi, MySQL, Composer и Certbot для HTTPS. Представлены советы по SELinux, настройке прав, автоматическому продлению SSL и бэкапам. После выполнения всех шагов вы получите работоспособный сайт с визуальным редактором и административной панелью Neos. Рекомендую протестировать все этапы в staging-среде перед переносом в продакшен.
Краткое резюме
Neos установлен и настроен. Проверьте доступность сайта по HTTPS, убедитесь в корректности прав и настройте резервное копирование. Для дальнейшего улучшения — настройте OPcache, CDN и мониторинг.
Вопросы? Оставьте комментарий или опишите проблему — помогу с диагностикой.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone