Encodera

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

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

Оглавление

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

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

Режим работы

Режим задают две константы в начале web/index.php:

<?php
// web/index.php
 
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');

YII_DEBUG включает подробные отчёты об ошибках, YII_ENV называет окружение: dev — разработка, prod — рабочий сервер. На сервере посетитель вместо отчёта с кодом увидит обычную страницу ошибки, а панель отладки и Gii отключатся: в config/web.php они подключены внутри условия if (YII_ENV_DEV).

Чтобы не править файл при каждой выкладке, значения читают из переменных окружения сервера:

define('YII_DEBUG', getenv('YII_DEBUG') === 'true');
define('YII_ENV', getenv('YII_ENV') ?: 'prod');

Если переменные не заданы, сайт работает в безопасном режиме prod.

Корень сайта

Веб-сервер должен отдавать папку web, а не папку проекта. Пример для nginx:

server {
    server_name example.com;
    root /var/www/blog/web;
    index index.php;
 
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
 
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }
}

Строка try_files передаёт в index.php все запросы, для которых нет файла, — так работают красивые адреса.

Шаги выкладки

git pull
composer install --no-dev --optimize-autoloader
php yii migrate --interactive=0
php yii cache/flush-all
КомандаЧто делает
git pullПолучает новый код
composer install --no-devСтавит библиотеки без инструментов разработки
php yii migrate --interactive=0Выполняет новые миграции без вопросов
php yii cache/flush-allОчищает кеш

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

Веб-сервер должен иметь право записи в две папки: runtime (журналы, кеш) и web/assets (сюда Yii копирует стили и скрипты из наборов ресурсов). Остальные файлы ему достаточно читать.

Настройки для сервера

Пароль базы данных и адрес почтового сервера на сервере другие. Их читают из переменных окружения:

// config/db.php
return [
    'class' => 'yii\db\Connection',
    'dsn' => getenv('DB_DSN'),
    'username' => getenv('DB_USER'),
    'password' => getenv('DB_PASSWORD'),
    'charset' => 'utf8mb4',
    'enableSchemaCache' => YII_ENV_PROD,
    'schemaCacheDuration' => 3600,
];

enableSchemaCache сохраняет в кеше структуру таблиц: Yii перестаёт запрашивать её у базы при каждом обращении, и сайт работает заметно быстрее. После миграций этот кеш очищают — поэтому в шагах выкладки есть cache/flush-all.

Проверка после выкладки

  • главная страница открывается, панели отладки внизу нет;
  • адрес /gii отвечает ошибкой 404;
  • несуществующий адрес показывает вашу страницу ошибки, а не отчёт с кодом;
  • в runtime/logs/app.log нет новых ошибок.

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

Если корнем сайта указать папку проекта, а не web, посетителям станут доступны файлы вроде /config/db.php и /runtime/logs/app.log — с паролями и внутренними данными. Корневой папкой всегда указывают web.

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

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