В 19-ом уроке разберём одну из важных этапов разработки, это деплоймент приложения. После месяцев работы ваш проект на Yii 2 готов к запуску в продакшене. Но как сделать это правильно, чтобы избежать ошибок и обеспечить стабильность? В этом уроке я расскажу о подготовке приложения к продакшену, настройке веб-сервера, автоматизации деплоя через GitHub Actions и мониторинге ошибок.
Подготовка приложения к продакшену (environments)
Первый шаг перед деплоем, это настройка окружения. В Yii 2 используется гибкая система конфигураций через файлы окружений (environments). По умолчанию проект создаётся с тремя окружениями: dev, prod и test. Продакшен требует особых настроек: отключение дебаг-режима, оптимизация ассетов и настройка безопасности.
Шаг 1: Активация production-окружения
В файле index.php вашего приложения замените строку:
defined('YII_ENV') or define('YII_ENV', 'dev');
на:
defined('YII_ENV') or define('YII_ENV', 'prod');
Это отключит панель отладки и включит режим оптимизации.
Шаг 2: Настройка конфигурации
В папке config обновите файл web.php для продакшена:
return [ 'components' => [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ], ], ], 'params' => $params, ];
Убедитесь, что кэширование включено, а логи сохраняются только для критических ошибок.
Шаг 3: Минимизация ассетов
Для ускорения загрузки страниц сожмите CSS и JavaScript. В консоли выполните:
php yii asset config/assets-prod.php config/assets.php
Это создаст оптимизированные версии ваших файлов.
Практическая задача:
- Переключите окружение на
prod. - Обновите конфиг
web.php, отключив дебаг-режим. - Создайте минифицированные ассеты.
Настройка веб-сервера (Nginx/Apache)
Для работы Yii 2 требуется правильно настроенный веб-сервер. Рассмотрим конфигурацию для Nginx и Apache.
Настройка Nginx
Пример конфига для сайта your-domain.com:
server { listen 80; server_name your-domain.com; root /var/www/yii-project/web; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\.(ht|svn|git) { deny all; } }
Этот конфиг направляет все запросы через index.php и запрещает доступ к скрытым файлам.
Настройка Apache
В файле .htaccess внутри папки web добавьте:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Это активирует ЧПУ и перенаправление запросов.
Практическая задача:
- Установите Nginx/Apache на сервер.
- Настройте виртуальный хост для вашего домена.
- Проверьте доступность приложения через браузер.
Автоматизация деплоя через GitHub Actions
Ручной деплой устарел. Лучше использовать CI/CD (Continuous Integration/Continuous Deployment). Настроим автоматический деплой через GitHub Actions.
Шаг 1: Создание workflow-файла
В папке .github/workflows создайте файл deploy.yml:
name: Deploy to Production on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install dependencies run: composer install --no-dev --prefer-dist --optimize-autoloader - name: Deploy to server uses: appleboy/scp-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_KEY }} source: "./" target: "/var/www/yii-project"
Этот скрипт запускает деплой при пуше в ветку master, устанавливает зависимости и копирует файлы на сервер.
Шаг 2: Настройка SSH-ключей
Добавьте секреты в настройках репозитория GitHub:
SERVER_HOST— IP сервера.SERVER_USER— имя пользователя.SSH_KEY— приватный ключ для доступа.
Практическая задача:
- Создайте workflow-файл для GitHub Actions.
- Настройте автоматический деплой при изменении кода.
Мониторинг ошибок: Sentry или Yii2-логгер
Даже после деплоя приложение может работать с ошибками. Для их отслеживания используйте Sentry или встроенный логгер Yii 2.
Интеграция Sentry
Установите пакет:
composer require sentry/sentry-laravel
В конфиге web.php добавьте:
'components' => [ 'log' => [ 'targets' => [ [ 'class' => 'Sentry\Yii2\SentryTarget', 'dsn' => 'ВАШ_DSN_ИЗ_SENTRY', 'levels' => ['error', 'warning'], ], ], ], ],
Теперь все ошибки будут отправляться в Sentry.
Использование Yii2-логгера
Для базового мониторинга настройте файловый логгер:
'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error'], 'logFile' => '@runtime/logs/app.log', ], ], ],
Логи сохранятся в runtime/logs/app.log.
Практическая задача:
- Подключите Sentry к вашему приложению.
- Проверьте отправку ошибок, вызвав исключение в коде.
Заключение
Мы разобрали ключевые этапы деплоймента приложения на Yii 2, подготовку окружения, настройку сервера, автоматизацию и мониторинг. Теперь ваш проект готов к работе в реальных условиях.
Хотите освоить Yii 2 от основ до продвинутых тем? Перейти к полному курсу
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


