Размещение на сервере
Размещение (деплой) — перенос приложения с вашего компьютера на сервер, где его увидят посетители. На сервере важны две вещи, не нужные при разработке: посетитель не должен видеть подробности ошибок, а настройки не должны собираться заново при каждом запросе.
Рабочий режим
На сервере режим разработки выключают:
composer development-disableКоманда удаляет файлы config/development.config.php и config/autoload/development.local.php. После этого вместо текста исключения посетитель видит общую страницу ошибки, а кеш настроек разрешён.
Кеш настроек
Без кеша Laminas при каждом запросе читает файлы всех модулей и сливает их в один массив. Кеш включают в файле config/application.config.php:
// config/application.config.php
return [
'modules' => require __DIR__ . '/modules.config.php',
'module_listener_options' => [
'config_glob_paths' => [
realpath(__DIR__) . '/autoload/{{,*.}global,{,*.}local}.php',
],
'config_cache_enabled' => true,
'config_cache_key' => 'application.config.cache',
'module_map_cache_enabled' => true,
'module_map_cache_key' => 'application.module.cache',
'cache_dir' => 'data/cache/',
],
];| Ключ | Значение |
|---|---|
config_glob_paths | Какие файлы из config/autoload читать |
config_cache_enabled | Сохранять ли слитые настройки в файл |
module_map_cache_enabled | Сохранять ли карту классов модулей |
cache_dir | Папка для файлов кеша |
После первого запроса в data/cache появятся файлы с готовыми настройками. В режиме разработки эти ключи переопределяются, и кеш выключен.
Локальные настройки
Файл config/autoload/local.php не хранится в репозитории. На сервере его создают вручную и записывают в него пароль рабочей базы и другие секреты.
Веб-сервер
Корневая папка сайта — public. Все запросы, для которых нет настоящего файла, передаются в public/index.php. Пример для nginx:
server {
listen 80;
server_name example.com;
root /var/www/blog/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Для Apache в заготовке уже лежит файл public/.htaccess с такими же правилами. Папки data и public/uploads должны быть доступны веб-серверу для записи.
Порядок обновления
git pull
composer install --no-dev --optimize-autoloader
composer development-disable
rm -f data/cache/*.php| Шаг | Зачем |
|---|---|
git pull | Получить новый код |
composer install --no-dev | Установить пакеты без инструментов разработки |
--optimize-autoloader | Ускорить поиск классов |
rm -f data/cache/*.php | Сбросить кеш настроек, чтобы подхватились изменения |
Изменения структуры базы применяют отдельно — запросами SQL, сохранёнными в проекте.
Частая ошибка
В закешированных настройках не может быть функций-замыканий: их нельзя записать в файл. Фабрика, заданная в настройках как function ($container) { ... }, работает при разработке и ломает сайт на сервере с включённым кешем. В файлах настроек указывайте фабрики только именами классов.