Сначала выберите свой вариант
Обычный хостинг
Подходит, если у вас есть панель Beget, Timeweb, REG.RU, cPanel, ISPmanager или похожая. Командная строка не нужна.
- Один установочный PHP-файл
- Файловый менеджер в панели
- Обычно 10–20 минут
VPS или выделенный сервер
Подходит системному администратору с SSH-доступом и правами на настройку Nginx или Apache, PHP-FPM, cron и TLS.
- Готовые конфигурации
- Проверка прав и закрытых каталогов
- Команды диагностики и возврата
Путь A. Установка для обычного пользователя
Этот раздел написан для человека, который раньше не устанавливал CMS. Выполняйте пункты по порядку и не пропускайте проверки.
Небольшой словарь
Адрес сайта, например example.ru.
Место, где хранятся файлы сайта.
Папка, содержимое которой открывается по вашему домену. Часто называется public_html, www или httpdocs.
Программа на сервере, которая запускает Nova CMS. Нужна версия 8.2 или новее.
Защищённое соединение. В адресной строке должен быть замок и адрес должен начинаться с https://.
Копия сайта, из которой можно восстановиться после ошибки.
1. Что подготовить заранее
- Зарегистрированный домен.
- Тариф хостинга с PHP 8.2 или 8.3.
- Доступ в панель управления хостингом.
- Работающий email, на который придёт персональная ссылка.
- Пустая корневая папка домена.
- Включённый бесплатный SSL-сертификат.
test.example.ru.Как проверить PHP и HTTPS
- Откройте в панели хостинга раздел «Сайты», «Домены» или «PHP».
- Выберите для домена PHP 8.2 или PHP 8.3.
- Включите SSL-сертификат Let's Encrypt.
- Откройте домен через
https://. Предупреждения о небезопасном соединении быть не должно. - Если нужной версии PHP или SSL нет, напишите в поддержку хостинга: «Нужны PHP 8.2+, Sodium, mbstring, DOM/XML, ZIP, cURL и HTTPS».
2. Подайте заявку и получите письмо
- Откройте форму заявки на лицензию.
- Укажите имя, рабочий email и основной домен без
https://. - Если нужен поддомен, добавьте его в заявку отдельно.
- Подтвердите email по ссылке из первого письма.
- После одобрения дождитесь письма с темой «Ваша Nova CMS готова — установка одним файлом».
- Откройте персональную ссылку и скачайте файл вида
nova-installer-abc123.php.
Также будут указаны разрешённые домены, срок действия ссылки, адрес входа в админку и ссылка на эту инструкцию.
Если письмо не пришло в течение 5–10 минут, проверьте папки «Спам», «Рассылки» и «Промоакции». Затем напишите на license@nova-cms.ru и укажите только домен и email заявки.
3. Загрузите один файл через панель хостинга
- Войдите в панель хостинга.
- Откройте список сайтов и нажмите на нужный домен.
- Найдите строку «Корневая папка», «Document root» или «Папка сайта» и запомните путь.
- Откройте файловый менеджер и перейдите именно в эту папку.
- Если внутри лежит стандартный файл
index.htmlот хостинга, убедитесь, что это не нужный сайт, и удалите только этот демонстрационный файл. - Нажмите «Загрузить» и выберите скачанный
nova-installer-….php. - Дождитесь полной загрузки. Размер файла не должен быть равен нулю.
- Нажмите на имя файла и скопируйте его точное название.
example.ru, а файл называется nova-installer-x7k2.php, откройте в браузере https://example.ru/nova-installer-x7k2.php.4. Проверьте экран установки
Установщик покажет список условий. Зелёная галочка означает «всё готово». Красный крест означает, что сначала нужно исправить настройку.
| Проверка | Что означает | Что делать, если красная |
|---|---|---|
| PHP 8.2 или новее | На сервере выбрана подходящая версия PHP. | Смените версию PHP для домена в панели. |
| HTTPS включён | Сайт открывается через защищённое соединение. | Включите бесплатный SSL и подождите 5–30 минут. |
| JSON, Mbstring, DOM/XML, ZIP | Нужные модули PHP доступны. | Включите расширения в панели или обратитесь в поддержку хостинга. |
| Sodium | Сервер может проверить цифровую подпись сборки. | Попросите хостинг включить расширение Sodium для PHP. |
| Загрузка по HTTPS | Сервер может получить персональную сборку. | Попросите разрешить исходящие HTTPS-запросы и cURL. |
| Домен входит в лицензию | Текущий адрес совпадает с заявкой. | Откройте установщик на правильном домене. Для www и без www оба адреса должны быть в лицензии. |
| Корень доступен для записи | PHP может распаковать файлы CMS. | Попросите поддержку хостинга выдать PHP право записи в корневую папку. |
| Корень сайта свободен | Установщик не перезапишет другой сайт. | Очистите только демонстрационные файлы или выберите пустой поддомен. |
5. Если установка не начинается
«Домен не входит в лицензию»
Проверьте адрес в строке браузера. Если лицензия выпущена для example.ru, а установщик открыт на другом поддомене, он не запустится. Напишите в поддержку и попросите добавить нужный адрес.
«Расширение Sodium недоступно»
Это не ошибка CMS. На сервере выключен модуль проверки подписи. Передайте поддержке хостинга точную фразу: «Включите PHP Sodium для моего домена на PHP 8.2/8.3».
Белая страница или ошибка 500
Откройте журнал ошибок PHP в панели хостинга и сохраните последние строки. Проверьте версию PHP и права на запись. На форум отправляйте только текст ошибки без паролей, ключей и данных клиентов.
Ошибка 403
Убедитесь, что файл лежит в корневой папке домена. Ошибка 403 у адресов /data/, /backups/ и /lib/ после установки является правильной защитой.
6. Нажмите «Установить Nova CMS»
- Убедитесь, что все обязательные проверки зелёные.
- Проверьте домен над кнопкой.
- Поставьте галочку подтверждения установки в корневую папку.
- Нажмите «Установить Nova CMS» один раз и не закрывайте вкладку.
- Дождитесь сообщения об успешной распаковке.
- Прочитайте лицензионное соглашение и подтвердите согласие.
- Создайте отдельный пароль администратора длиной не менее 12 символов.
- Сохраните пароль в менеджере паролей. Не используйте пароль от хостинга.
https://ваш-домен.ru/admin. Логин первого администратора: admin.7. Что заполнить перед открытием магазина
- Настройки: название, логотип, телефон, email, город и режим работы.
- Правовые тексты: реквизиты, политика конфиденциальности, cookie, оферта, оплата и возврат.
- Доставка: самовывоз, курьер и транспортные компании.
- Оплата: сначала тестовый режим, затем настоящие данные.
- Каталог: категории, хотя бы один тестовый товар, фотографии, остаток и цена.
- Резервные копии: создайте ручную копию и скачайте её.
- Проверка: оформите заказ с телефона и компьютера, убедитесь, что заказ появился в админке.
- Главная, каталог, товар, корзина и оформление заказа открываются.
- Письма приходят на настоящий email.
- На сайте нет демонстрационных телефонов и реквизитов.
- Адреса работают без
.php. - Карта сайта доступна по
/sitemap.xml. - Папки
/data/и/backups/не открываются посетителю.
Путь B. Установка на VPS для системного администратора
Ниже приведён рабочий контрольный список для Debian/Ubuntu и типовой конфигурации PHP-FPM. Имена пользователя, домена, пути и сокета PHP замените на свои.
1. Требования и архитектура
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| PHP | 8.2 | 8.3 FPM, production |
| Обязательные расширения | json, mbstring, sodium, openssl, curl, fileinfo, zip | Дополнительно gd для WebP и intl для IDN |
| memory_limit | 128M | 256M или больше для Excel и backup |
| upload_max_filesize | 12M | 32M или по размеру каталога |
| Веб-сервер | Apache 2.4 или Nginx | Nginx + PHP-FPM, TLS 1.2/1.3 |
| Диск | 300 МБ | От 2 ГБ с учётом фото и семи копий |
| База данных | Не требуется | JSON хранится в закрытом каталоге data |
apt update
apt install -y nginx php8.3-fpm php8.3-cli php8.3-mbstring php8.3-curl \
php8.3-zip php8.3-gd php8.3-intl unzip certbot python3-certbot-nginx
php -r 'foreach (["json","mbstring","sodium","openssl","curl","fileinfo","zip"] as $e) echo $e,": ",extension_loaded($e)?"OK":"MISSING",PHP_EOL;'Размещение
Пример далее использует домен shop.example.ru, корень /var/www/shop.example.ru, группу веб-сервера www-data и сокет /run/php/php8.3-fpm.sock. CMS должна находиться непосредственно в document root, а не в публичной подпапке другой системы.
2. Подготовка домена и каталога
install -d -o deploy -g www-data -m 0750 /var/www/shop.example.ru
# Загрузите персональный nova-installer-....php в этот каталог.
ls -la /var/www/shop.example.ru
php -v
php -m | grep -Ei 'mbstring|sodium|curl|fileinfo|zip'DNS A/AAAA должен указывать на сервер до выпуска сертификата. Убедитесь, что порт 80 доступен для ACME-проверки, а 443 — для посетителей.
3A. Конфигурация Nginx
Эта схема не исполняет произвольные PHP-файлы по URL. Все динамические запросы передаются в router.php, а служебные каталоги и типы файлов закрыты.
nginx -t завершится ошибкой.server {
listen 80;
server_name shop.example.ru www.shop.example.ru;
root /var/www/shop.example.ru;
location /.well-known/acme-challenge/ { try_files $uri =404; }
location / { return 200 "TLS preparation\n"; }
}
nginx -t && systemctl reload nginx
certbot certonly --webroot -w /var/www/shop.example.ru \
-d shop.example.ru -d www.shop.example.ruПосле появления файлов в /etc/letsencrypt/live/shop.example.ru/ замените временный блок полной конфигурацией ниже, снова выполните nginx -t и перезагрузите Nginx.
server {
listen 80;
server_name shop.example.ru www.shop.example.ru;
root /var/www/shop.example.ru;
location /.well-known/acme-challenge/ { try_files $uri =404; }
location / { return 301 https://shop.example.ru$request_uri; }
}
server {
listen 443 ssl http2;
server_name shop.example.ru www.shop.example.ru;
root /var/www/shop.example.ru;
index disabled;
server_tokens off;
client_max_body_size 32m;
ssl_certificate /etc/letsencrypt/live/shop.example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/shop.example.ru/privkey.pem;
location ~ ^/(?:data|lib|templates|cache|backups|scripts|exports|deploy|dist)(?:/|$) { return 404; }
location ~ /\.(?!well-known/) { return 404; }
location ~* ^/(?:README|LICENSE|SECURITY)(?:\.[^/]+)?$ { return 404; }
location ~* \.(?:php|phtml|phar|inc|json|ndjson|log|lock|ini|env|bak|backup|old|orig|save|swp|sql|sqlite|db|yml|yaml|toml|dist|map|sh)$ { return 404; }
location /assets/ {
try_files $uri =404;
add_header X-Content-Type-Options nosniff always;
expires 7d;
}
location = /sitemap.xml { try_files $uri =404; }
location = / { try_files /__nova_front_controller__ @novacms; }
location / { try_files $uri @novacms; }
location @novacms {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/router.php;
fastcgi_param SCRIPT_NAME /router.php;
fastcgi_param HTTP_PROXY "";
}
}nginx -t
systemctl reload nginx
systemctl status php8.3-fpm --no-pager3B. Конфигурация Apache
Предпочтительный вариант — правила в VirtualHost и AllowOverride None. На обычном shared-хостинге допускается штатный .htaccess при включённых mod_rewrite и AllowOverride All.
<VirtualHost *:443>
ServerName shop.example.ru
ServerAlias www.shop.example.ru
DocumentRoot "/var/www/shop.example.ru"
ServerSignature Off
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/shop.example.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/shop.example.ru/privkey.pem
<Directory "/var/www/shop.example.ru">
AllowOverride None
Options -Indexes -MultiViews
DirectoryIndex disabled
Require all granted
RewriteEngine On
RewriteRule (^|/)\. - [F,END,NC]
RewriteRule ^(?:data|lib|templates|cache|backups|scripts|exports|deploy|dist)(?:/|$) - [F,END,NC]
RewriteRule ^$ router.php [QSA,END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ router.php [QSA,END]
</Directory>
<DirectoryMatch "^/var/www/shop.example.ru/(?:data|lib|templates|cache|backups|scripts|exports|deploy|dist)(?:/|$)">
Require all denied
</DirectoryMatch>
</VirtualHost>Полные примеры поставляются в deploy/nginx-novamarket.conf.example и deploy/apache-vhost.conf.example. Перед применением сравните их с конфигурацией текущей версии.
4. Владельцы, права и закрытые данные
Программный код не должен быть доступен для записи веб-процессу. На время однофайловой установки document root должен быть записываемым PHP; после установки ужесточите права и оставьте запись только для рабочих каталогов.
chown -R deploy:www-data /var/www/shop.example.ru
find /var/www/shop.example.ru -type d -exec chmod 0750 {} \;
find /var/www/shop.example.ru -type f -exec chmod 0640 {} \;
# Только рабочие каталоги доступны группе PHP для записи:
for dir in data cache backups assets/uploads; do
chown -R deploy:www-data "/var/www/shop.example.ru/$dir"
chmod -R g+rwX "/var/www/shop.example.ru/$dir"
done
# Конфигурация и секреты — максимально строго:
chmod 0640 /var/www/shop.example.ru/config.php 2>/dev/null || true
chmod 0640 /var/www/shop.example.ru/data/.app_secret 2>/dev/null || truechmod 777 скрывает причину и ослабляет сервер.PHP-FPM
В pool-конфигурации используйте отдельного системного пользователя сайта при размещении нескольких клиентов на одном VPS. Ограничьте open_basedir только после полного теста импорта, backup и обновлений. В production установите display_errors=Off, log_errors=On, корректный date.timezone и лимиты загрузки.
5. TLS и первый запуск
certbot certificates
certbot renew --dry-run
curl -I https://shop.example.ru/- Откройте персональный установщик по HTTPS.
- Проверьте Sodium, ZIP, исходящий HTTPS, домен и write-access.
- Установите CMS и создайте пароль администратора.
- Удалите оставшиеся временные установочные файлы, если они не удалились автоматически.
- Ужесточите права согласно предыдущему разделу.
- Проверьте, что прямой запрос к произвольному
.phpне исполняется.
6. Cron, backup, поиск и worker обновлений
Используйте PHP CLI той же основной версии и абсолютные пути. Пользователь cron должен иметь только необходимые права. Worker обновлений на защищённой VPS-схеме запускается от root, если программный код принадлежит root и недоступен PHP для записи.
0 23 * * * /usr/bin/php /var/www/shop.example.ru/scripts/backup-cron.php >> /var/log/nova-backup.log 2>&1
*/20 * * * * /usr/bin/php /var/www/shop.example.ru/scripts/rebuild-search-index.php >> /var/log/nova-search.log 2>&1
* * * * * /usr/bin/flock -n /run/nova-update.lock /usr/bin/php /var/www/shop.example.ru/scripts/cms-update-worker.php >> /var/log/nova-update.log 2>&1
* * * * * /usr/bin/flock -n /run/nova-shop-mail.lock /usr/bin/php /var/www/shop.example.ru/scripts/shop-mail-worker.php >> /var/log/nova-shop-mail.log 2>&1Проверьте часовой пояс сервера командой timedatectl. После создания задания запустите каждый скрипт вручную один раз и проверьте код возврата и журнал.
7. Диагностика после установки
php -l /var/www/shop.example.ru/router.php
nginx -t
systemctl is-active nginx php8.3-fpm
curl -sSIk https://shop.example.ru/
curl -sSIk https://shop.example.ru/catalog
curl -sSIk https://shop.example.ru/data/products.json
curl -sSIk https://shop.example.ru/backups/
curl -sSIk https://shop.example.ru/router.php
curl -sS https://shop.example.ru/sitemap.xml | head| Симптом | Вероятная причина | Проверка |
|---|---|---|
| 403 на всём сайте | Неверный document root или права traversal. | Проверьте namei -l /var/www/shop.example.ru и error log. |
| 404 на ЧПУ | Запрос не попадает в router.php. | Проверьте try_files, mod_rewrite и отключённый MultiViews. |
| 500 | PHP exception, расширение или права записи. | Смотрите журнал PHP-FPM и Nginx/Apache, затем php -m. |
| 502 | PHP-FPM не запущен или указан другой сокет. | systemctl status php8.3-fpm и ls -l /run/php/. |
| Установщик не скачивает сборку | Нет cURL/DNS/исходящего 443 или неверное время. | curl -Iv https://nova-cms.ru/, timedatectl. |
| Красный домен | Host не включён в лицензию или запрос проходит через неверный proxy. | Проверьте Host, canonical redirect и список доменов заявки. |
Обязательные HTTP-проверки
- Главная и ЧПУ отвечают 200.
- HTTP перенаправляется на HTTPS постоянным редиректом.
/data/,/backups/,/lib/,/scripts/и прямой/router.phpне раскрываются.- Админка не кэшируется общим proxy/CDN.
- Cookie имеют Secure, HttpOnly и подходящий SameSite.
- Загрузка изображений, импорт Excel и создание backup проходят без ошибок.
- Тестовый заказ появляется в админке, а тестовая оплата корректно сообщает статус.
8. Контроль перед публикацией
- SSH по ключам; вход root по паролю отключён после настройки.
- Установлены обновления °C и включено автоматическое получение security-updates.
- Firewall открывает только необходимые порты.
- Секреты и лицензия не находятся в Git и публичных backup.
- Резервная копия хранится не только на том же сервере.
- Настроены ротация журналов и контроль свободного места.
- Реальные платёжные ключи вводятся только в админке по HTTPS.
- Правовые тексты и реквизиты заменены данными владельца сайта.
9. Безопасное обновление
- Скачайте внешнюю резервную копию или snapshot VPS.
- В админке откройте «Обновления CMS» и нажмите «Проверить обновления».
- Прочитайте версию, изменения и результат проверки подписи.
- Запустите установку вручную. Автоматически без подтверждения она не начинается.
- CMS создаст полную резервную копию и отдельную точку возврата программных файлов.
- Пакет не имеет права заменять
data,assets/uploads,backups,config.phpи лицензию. - После обновления проверьте PHP-логи, главную, админку, каталог, заказ, оплату, cron и sitemap.
10. Возврат предыдущей версии
- Если админка открывается, выберите последнюю точку возврата в разделе обновлений.
- Если админка недоступна, переведите сайт в maintenance mode средствами веб-сервера.
- Восстановите программные файлы из точки возврата или предрелизного архива.
- Не заменяйте свежий каталог
dataстарой копией без отдельного решения: в нём находятся новые заказы. - Проверьте владельца, права и конфигурацию PHP-FPM.
- Запустите диагностику из предыдущего раздела и только затем снимайте maintenance mode.