Требования к серверу
Какой нужен 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— ссылки на папки. Пока доступ к фотографиям открыт, это просто к сведению; если ссылки нет и создать её нельзя — фотографии не появятся.
Что именно закрыто на вашем сервере, всегда видно в панели управления: раздел «Системный» → «Диагностика».