Документация

Требования к серверу

Какой нужен PHP, база данных, расширения и права на файлы. И что бывает, когда хостинг закрывает лишнее.

На этой странице

Магазин работает на обычном хостинге с PHP и MySQL — отдельный сервер и права администратора нужны не всегда. Ниже перечислено то, что магазин проверяет сам при установке, поэтому список можно не сверять вручную: установщик покажет галочки напротив каждого пункта.

PHP

Нужна версия 8.3 или новее. На 8.4 магазин тоже работает — это рекомендуемая версия, если хостинг её предлагает.

Расширения PHP, без которых магазин не запускается:

Расширение Зачем
pdo, pdo_mysql связь с базой данных
mbstring тексты на русском и украинском
openssl защищённые соединения, пароли, платёжные шлюзы
tokenizer, ctype, json работа самого приложения
fileinfo загрузка файлов и картинок
gd размеры фотографий товаров
curl связь со службами доставки, платёжными системами и нашим сайтом
dom, xml выгрузки, прайс-листы, обмен с маркетплейсами
zip установка дополнений и резервные копии
intl цены, даты и числа в привычном для страны виде
bcmath точный подсчёт денег
sodium проверка подписи обновлений

Жёстких требований к настройкам PHP магазин не предъявляет — за расходом памяти он следит сам и не берёт следующую задачу, когда она на исходе. Но на тесном хостинге работа заметно комфортнее, если поднять три значения: memory_limit до 256 МБ, max_execution_time до 60 секунд, а upload_max_filesize и post_max_size — до размера самой большой фотографии, которую вы собираетесь загружать. Текущие значения видно в панели управления: «Системный» → «Информация о системе».

База данных

MySQL 8.0 или MariaDB 10.6 и новее. Кодировка — utf8mb4.

База должна быть создана заранее и быть пустой: установщик ставится только в пустую базу, иначе чужие таблицы столкнутся с таблицами магазина. Если в базе что-то есть, установщик покажет число таблиц и предложит очистить её — но только после вашего подтверждения.

В имени базы данных не должно быть точек. Точка в имени ломает запросы, и магазин перестанет открываться сразу после установки.

Веб-сервер

Nginx или Apache. Корнем сайта должна быть папка public, а не корень магазина: так посетитель не может обратиться к файлам настроек напрямую.

Главное правило для nginx — то же, что у любого приложения на Laravel:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Оно почти всегда стоит по умолчанию. Без него магазин не сможет дорисовывать недостающие размеры фотографий: файл на диске есть, а запрос до магазина не доходит.

Для Apache ничего настраивать не нужно — правила уже лежат в файле .htaccess внутри папки public.

Пример настройки сайта в nginx

Так настроен наш демонстрационный магазин. Пути и адрес замените на свои, остальное можно брать как есть.

server {
    listen 80;
    listen 443 ssl;
    http2 on;
    server_name shop.example.com;

    # Корень сайта — папка public внутри магазина, а не сам магазин
    root /www/wwwroot/shop.example.com/public;
    index index.php;

    ssl_certificate     /путь/к/сертификату/fullchain.pem;
    ssl_certificate_key /путь/к/сертификату/privkey.pem;

    # Весь трафик по защищённому соединению: адреса писем и обратные
    # адреса платёжных систем должны совпадать с адресом сайта
    if ($server_port !~ 443) {
        rewrite ^(/.*)$ https://$host$1 permanent;
    }

    # Столько магазин сможет принять за один раз — фотографии товаров
    # и архивы дополнений упираются именно в это значение
    client_max_body_size 50m;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        try_files $uri =404;
        fastcgi_pass unix:/tmp/php-cgi-84.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

    # Служебные файлы наружу не отдаём: в .env лежат пароли
    location ~ ^/(\.user\.ini|\.htaccess|\.git|\.env|\.svn|LICENSE|README\.md) {
        return 404;
    }

    # Картинки и стили пусть лежат в браузере, а не запрашиваются заново
    location ~* \.(gif|jpe?g|png|webp|avif|svg|ico)$ {
        expires 30d;
        access_log off;
    }

    location ~* \.(js|css)$ {
        expires 12h;
        access_log off;
    }

    access_log /www/wwwlogs/shop.example.com.log;
    error_log  /www/wwwlogs/shop.example.com.error.log;
}

Адрес сокета PHP (fastcgi_pass) у каждого хостинга свой: на панелях это обычно /tmp/php-cgi-84.sock, на своём сервере — /run/php/php8.4-fpm.sock. Посмотрите, как настроены соседние сайты, и возьмите тот же.

Не подменяйте страницу 404 средствами сервера. Панели хостинга часто добавляют error_page 404 /404.html и включают fastcgi_intercept_errors. Тогда вместо страницы «товар не найден», нарисованной в оформлении магазина, посетитель увидит стандартную страницу сервера — и уйдёт с сайта, вместо того чтобы вернуться в каталог.

Если сайтом управляет панель хостинга, правьте настройки в панели, а не в файле: панель перезаписывает свои файлы при любом изменении сайта, и правка, сделанная руками, тихо пропадёт.

Права на файлы

Папки, в которые магазин пишет:

  • storage — фотографии, выгрузки, журналы, резервные копии;
  • bootstrap/cache — служебные файлы;
  • файл .env — настройки подключения (в него пишет установщик).

Все файлы магазина должны принадлежать тому же пользователю, от имени которого работает веб-сервер. Самая частая причина «фотографии не открываются» — загрузка файлов на сервер от имени root, после чего сайт не может их прочитать.

Фотографии и папка storage

Товары лежат в хранилище, а посетитель получает их по адресу public/storage — это ссылка на хранилище. Магазин создаёт её сам при установке. Если хостинг запрещает создавать такие ссылки, установщик скажет об этом и покажет команду:

php artisan storage:link

Пока ссылки нет, в магазине не открывается ни одна картинка: фотографии на месте, а покупатель видит пустые рамки.

Планировщик задач

Магазину нужна одна строка в планировщике (cron) — про неё отдельная страница, Обслуживание. Без неё магазин работает, но не уходят письма покупателям, не выполняются выгрузки и импорт, не применяются обновления.

Ограничения хостинга

Массовые хостинги закрывают часть возможностей PHP, и по внешним признакам этого не видно. Магазин проверяет их сам и почти всё обходит своими силами:

  • proc_open — запуск отдельных программ. Без него магазин выполняет задачи внутри своего процесса. Единственное, что действительно перестаёт работать, — автоматические копии базы данных: их снимает отдельная программа сервера.
  • pcntl_signal — сигналы процессов. Магазин их не использует: очередь разбирается собственной командой, которая работает и без них.
  • symlink — ссылки на папки. Пока доступ к фотографиям открыт, это просто к сведению; если ссылки нет и создать её нельзя — фотографии не появятся.

Что именно закрыто на вашем сервере, всегда видно в панели управления: раздел «Системный» → «Диагностика».

Обновлено 7 августа 2026