Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Размещение на сервере

Размещение (деплой) — перенос приложения с вашего компьютера на сервер, где его увидят посетители. На сервере важны две вещи, не нужные при разработке: посетитель не должен видеть подробности ошибок, а настройки не должны собираться заново при каждом запросе.

Рабочий режим

На сервере режим разработки выключают:

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) { ... }, работает при разработке и ломает сайт на сервере с включённым кешем. В файлах настроек указывайте фабрики только именами классов.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.