Encodera

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

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

Оглавление

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

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

Что нужно на сервере

  • PHP той же версии, что при разработке, с расширениями pdo_mysql и mbstring;
  • Composer;
  • веб-сервер Nginx или Apache, корневая папка сайта — public (см. урок о веб-сервере);
  • база данных MySQL.

Код и пакеты

Код доставляют на сервер через Git, затем устанавливают пакеты:

git clone https://example.com/anna/blog.git /var/www/blog
cd /var/www/blog
composer install --no-dev --optimize-autoloader

Ключ --no-dev пропускает пакеты для разработки, например PHPUnit, а --optimize-autoloader ускоряет поиск классов.

Настройки сервера

Файла .env в репозитории нет — на сервере его создают вручную по образцу .env.example:

APP_DEBUG=false
SITE_NAME="Мой блог"
DB_DSN="mysql:host=localhost;dbname=blog;charset=utf8mb4"
DB_USER=blog
DB_PASSWORD=длинный-случайный-пароль

Главная строка — APP_DEBUG=false. Затем создайте базу и таблицы:

mysql -u blog -p blog < database/schema.sql

Права на папки

Приложение пишет в две папки: var (журнал и кеш) и public/uploads (загруженные файлы). Веб-сервер должен иметь право записи в них:

mkdir -p var/log var/cache public/uploads
chown -R www-data:www-data var public/uploads

www-data — пользователь, от имени которого работает PHP на многих серверах; у вашего хостинга имя может быть другим.

Кеш шаблонов

Без кеша Twig разбирает шаблоны при каждом запросе. Включите кеш вне режима отладки:

// config/container.php
Twig::class => function (ContainerInterface $c) {
    $settings = $c->get('settings');
 
    $twig = Twig::create(__DIR__ . '/../templates', [
        'cache' => $settings['debug'] ? false : __DIR__ . '/../var/cache/twig',
    ]);
 
    $twig->getEnvironment()->addGlobal('site_name', $settings['site_name']);
 
    return $twig;
},

Кеш маршрутов

Список маршрутов Slim тоже разбирает заново при каждом запросе. Результат можно сохранить в файл:

// config/bootstrap.php
$app = AppFactory::createFromContainer($container);
 
if (!$container->get('settings')['debug']) {
    $app->getRouteCollector()->setCacheFile(__DIR__ . '/../var/cache/routes.php');
}

Строку добавляют до подключения маршрутов. Кеш работает, только если все обработчики заданы именами классов: функцию в файл не записать. Обработчик маршрута OPTIONS из урока о CORS придётся вынести в класс-действие.

Обновление

Когда выходит новая версия кода, на сервере повторяют короткий список команд:

git pull
composer install --no-dev --optimize-autoloader
rm -rf var/cache/*

Последняя команда удаляет кеш шаблонов и маршрутов — он пересоздастся при первом запросе. Если изменилась структура базы, выполните нужные запросы SQL.

Проверка после размещения

Что открытьЧто должно быть
Главная страницаОткрывается по HTTPS
/nothingВаша страница 404 без подробностей
/composer.json, /.envОшибка 404
var/log/app.logНет новых записей ERROR

Сайт с входом пользователей должен работать по HTTPS. Тогда в SessionMiddleware добавьте в настройки session_start() строку 'cookie_secure' => true — cookie сессии не уйдёт по незащищённому соединению.

Частая ошибка

После обновления сайт показывает старые страницы или отвечает 404 на новые адреса — значит, остался старый кеш. Файл var/cache/routes.php и кеш Twig сами не обновляются: очищайте var/cache при каждом обновлении кода.

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

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