Вы разработали крутое приложение на Yii2, протестировали его локально, и теперь пришло время выложить его в интернет. Но как это сделать правильно, чтобы всё работало быстро, безопасно и без сюрпризов? В этой статье я поделюсь своим опытом развертывания Yii2 на продакшн-сервере, расскажу о подводных камнях и дам практические советы.
Подготовка сервера: что нужно установить
Прежде чем заливать код, убедитесь, что на сервере есть всё необходимое. Обычно это LAMP или LEMP стек. Для Yii2 требуется PHP версии 7.4 или выше (лучше 8.x), а также расширения: mbstring, intl, pdo, pdo_mysql, openssl, json, curl, dom, simplexml. Не забудьте про Composer — без него никак.
Вот пример установки на Ubuntu:
sudo apt update
sudo apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-intl php8.1-curl php8.1-xml php8.1-zip unzip nginx mysql-server
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Для веб-сервера я предпочитаю Nginx — он быстрее и гибче в настройке. Но можно использовать и Apache. Главное — правильно настроить корневую директорию.
web. Это защитит конфиденциальные файлы от прямого доступа.
Настройка Nginx для Yii2
Конфигурация Nginx для Yii2 должна перенаправлять все запросы, кроме существующих файлов, на index.php. Вот проверенный шаблон:
server {
listen 80;
server_name example.com;
root /var/www/yii2-app/web;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$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;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
После сохранения конфига не забудьте перезагрузить Nginx: sudo systemctl reload nginx.
Деплой кода и установка зависимостей
Самый простой способ — клонировать репозиторий через Git. Но для продакшена лучше использовать git archive или CI/CD, чтобы не тащить лишние файлы. Я обычно делаю так:
cd /var/www
git clone https://github.com/yourname/yii2-app.git
cd yii2-app
composer install --no-dev --optimize-autoloader
Флаг --no-dev исключает dev-зависимости, а --optimize-autoloader ускоряет автозагрузку классов. После этого нужно настроить окружение. В Yii2 есть файлы init и шаблоны конфигов. Для продакшена используйте:
php init --env=Production --overwrite=All
Затем отредактируйте common/config/main-local.php и frontend/config/main-local.php, указав доступы к БД и другие параметры.
Миграции и права доступа
Примените миграции для создания структуры БД:
php yii migrate --interactive=0
Не забудьте про права на директории runtime и web/assets. Веб-сервер должен иметь возможность писать в них:
sudo chown -R www-data:www-data runtime web/assets
sudo chmod -R 775 runtime web/assets
Оптимизация производительности
Yii2 имеет встроенные инструменты для ускорения. В продакшене обязательно включите кэширование схемы БД и классов. В конфиге добавьте:
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=mydb',
'username' => 'root',
'password' => '',
'enableSchemaCache' => true,
'schemaCacheDuration' => 3600,
'schemaCache' => 'cache',
],
],
Также включите OPcache в PHP. Это даст прирост производительности до 50%. В php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
Последняя опция отключает проверку изменений файлов — не забудьте сбрасывать OPcache при деплое.
Настройка безопасности
Продакшн-сервер — лакомый кусочек для хакеров. Обязательно сделайте следующее:
- Отключите отладочную панель и режим разработки в конфиге:
YII_DEBUG = false,YII_ENV = 'prod'. - Установите сложные пароли для БД и SSH.
- Настройте firewall (UFW или iptables), оставив только 80, 443 и SSH порт.
- Используйте HTTPS с Let's Encrypt — это бесплатно и просто.
Для HTTPS установите Certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
Certbot автоматически настроит редирект с HTTP на HTTPS.
Автоматизация деплоя
Ручной деплой — это прошлый век. Настройте простой скрипт или используйте CI/CD (GitLab CI, GitHub Actions). Вот пример скрипта deploy.sh:
#!/bin/bash
set -e
cd /var/www/yii2-app
git pull origin main
composer install --no-dev --optimize-autoloader
php yii migrate --interactive=0
sudo systemctl reload php8.1-fpm
sudo systemctl reload nginx
echo "Deploy completed!"
Не забудьте сделать его исполняемым: chmod +x deploy.sh.
.env, который не попадает в Git. В Yii2 можно использовать библиотеку vlucas/phpdotenv.
Мониторинг и логирование
После запуска следите за здоровьем приложения. Настройте логи Yii2 на запись в файлы с ротацией. В конфиге:
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
'logFile' => '@runtime/logs/app.log',
'maxFileSize' => 1024 * 10, // 10MB
'maxLogFiles' => 5,
],
],
],
],
Также рекомендую установить Sentry или аналогичный сервис для отслеживания ошибок в реальном времени. Это сэкономит часы отладки.
Для мониторинга сервера подойдут htop, netdata или Prometheus + Grafana. Главное — знать, что происходит с CPU, памятью и диском.
Что в итоге
Развертывание Yii2 на продакшене — это не магия, а последовательность шагов. Подготовьте сервер, настройте Nginx, задеплойте код, примените миграции, оптимизируйте и защитите. Автоматизируйте процесс, чтобы избежать ошибок. И не забывайте про мониторинг — он поможет вовремя заметить проблемы.
Следуя этим советам, вы сможете развернуть стабильное и быстрое приложение, которое выдержит нагрузку и не подведет пользователей.
