Размещение на сервере
Размещение (деплой) — перенос приложения с вашего компьютера на сервер, где его увидят посетители. У 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/uploadswww-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 при каждом обновлении кода.