Урок 19: Деплоймент приложения на Yii 2. Подготовка, настройка сервера, автоматизация.

В 19-ом уроке разберём одну из важных этапов разработки, это деплоймент приложения. После месяцев работы ваш проект на Yii 2 готов к запуску в продакшене. Но как сделать это правильно, чтобы избежать ошибок и обеспечить стабильность? В этом уроке я расскажу о подготовке приложения к продакшену, настройке веб-сервера, автоматизации деплоя через GitHub Actions и мониторинге ошибок.

Подготовка приложения к продакшену (environments)

Первый шаг перед деплоем, это настройка окружения. В Yii 2 используется гибкая система конфигураций через файлы окружений (environments). По умолчанию проект создаётся с тремя окружениями: devprod и test. Продакшен требует особых настроек: отключение дебаг-режима, оптимизация ассетов и настройка безопасности.

Шаг 1: Активация production-окружения

В файле index.php вашего приложения замените строку:

php
defined('YII_ENV') or define('YII_ENV', 'dev');

на:

php
defined('YII_ENV') or define('YII_ENV', 'prod');

Это отключит панель отладки и включит режим оптимизации.

Шаг 2: Настройка конфигурации

В папке config обновите файл web.php для продакшена:

php
return [
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
    ],
    'params' => $params,
];

Убедитесь, что кэширование включено, а логи сохраняются только для критических ошибок.

Шаг 3: Минимизация ассетов

Для ускорения загрузки страниц сожмите CSS и JavaScript. В консоли выполните:

bash
php yii asset config/assets-prod.php config/assets.php

Это создаст оптимизированные версии ваших файлов.

Практическая задача:

  1. Переключите окружение на prod.
  2. Обновите конфиг web.php, отключив дебаг-режим.
  3. Создайте минифицированные ассеты.

Настройка веб-сервера (Nginx/Apache)

Для работы Yii 2 требуется правильно настроенный веб-сервер. Рассмотрим конфигурацию для Nginx и Apache.

Настройка Nginx

Пример конфига для сайта your-domain.com:

nginx
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 добавьте:

apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Это активирует ЧПУ и перенаправление запросов.

Практическая задача:

  1. Установите Nginx/Apache на сервер.
  2. Настройте виртуальный хост для вашего домена.
  3. Проверьте доступность приложения через браузер.

Автоматизация деплоя через GitHub Actions

Ручной деплой устарел. Лучше использовать CI/CD (Continuous Integration/Continuous Deployment). Настроим автоматический деплой через GitHub Actions.

Шаг 1: Создание workflow-файла

В папке .github/workflows создайте файл deploy.yml:

yaml
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 — приватный ключ для доступа.

Практическая задача:

  1. Создайте workflow-файл для GitHub Actions.
  2. Настройте автоматический деплой при изменении кода.

Мониторинг ошибок: Sentry или Yii2-логгер

Даже после деплоя приложение может работать с ошибками. Для их отслеживания используйте Sentry или встроенный логгер Yii 2.

Интеграция Sentry

Установите пакет:

bash
composer require sentry/sentry-laravel

В конфиге web.php добавьте:

php
'components' => [
    'log' => [
        'targets' => [
            [
                'class' => 'Sentry\Yii2\SentryTarget',
                'dsn' => 'ВАШ_DSN_ИЗ_SENTRY',
                'levels' => ['error', 'warning'],
            ],
        ],
    ],
],

Теперь все ошибки будут отправляться в Sentry.

Использование Yii2-логгера

Для базового мониторинга настройте файловый логгер:

php
'log' => [
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error'],
            'logFile' => '@runtime/logs/app.log',
        ],
    ],
],

Логи сохранятся в runtime/logs/app.log.

Практическая задача:

  1. Подключите Sentry к вашему приложению.
  2. Проверьте отправку ошибок, вызвав исключение в коде.

Заключение

Мы разобрали ключевые этапы деплоймента приложения на Yii 2, подготовку окружения, настройку сервера, автоматизацию и мониторинг. Теперь ваш проект готов к работе в реальных условиях.

Хотите освоить Yii 2 от основ до продвинутых тем? Перейти к полному курсу

Поделиться статьей:
Поддержать автора блога

Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.

Персональные рекомендации
Оставить комментарий