В 19-ом уроке переходим к этапам разработки, это деплойменту приложения. Если до этого мы работали в локальной среде, то теперь научимся переносить проект на реальный сервер, оптимизировать его для продакшена и настраивать мониторинг. Готовьтесь к практике, будем работать с VPS, Nginx, SSL и инструментами для отслеживания ошибок.
Подготовка проекта к продакшену
Перед деплоем важно убедиться, что приложение готово к работе в production-режиме.
1. Установка зависимостей без dev-пакетов
В продакшене нам не нужны пакеты для разработки (например, barryvdh/laravel-debugbar
).
Запустите команду:
composer install --optimize-autoloader --no-dev
Флаг --no-dev
удалит dev-зависимости, а --optimize-autoloader
ускорит загрузку классов.
2. Настройка .env
Обновите файл .env
:
APP_ENV=production APP_DEBUG=false APP_KEY=base64:... # Если ключа нет, выполните php artisan key:generate
Никогда не оставляйте APP_DEBUG=true
на продакшене! Это угроза безопасности.
3. Права на файлы и папки
Laravel требует доступ на запись в storage
и bootstrap/cache
:
chmod -R 775 storage chmod -R 775 bootstrap/cache
Оптимизация кода
Laravel предлагает встроенные инструменты для ускорения работы приложения.
1. Кэширование конфигурации
Соберите все конфиги в один файл:
php artisan config:cache
После этого изменения в файлах конфигурации (config/*.php
) не будут применяться без повторного кэширования.
2. Кэширование маршрутов
Если в ваших роутах не используются замыкания (closures), выполните:
php artisan route:cache
Совет: Используйте контроллеры вместо замыканий в web.php
/api.php
, чтобы избежать ошибок.
3. Оптимизация автозагрузки
composer dump-autoload -o
Деплой на VPS: Nginx, SSL, Supervisor
Теперь развернем приложение на VPS (Ubuntu 22.04).
1. Настройка сервера
- Обновите пакеты:
sudo apt update && sudo apt upgrade -y
- Установите PHP, Nginx, MySQL:
sudo apt install nginx mysql-server php8.1-fpm php8.1-mysql php8.1-mbstring
2. Развертывание проекта
- Склонируйте репозиторий в
/var/www/laravel
:sudo git clone https://github.com/ваш-репозиторий.git /var/www/laravel
- Установите права:
sudo chown -R www-data:www-data /var/www/laravel sudo chmod -R 775 /var/www/laravel/storage
3. Конфиг Nginx
Создайте файл /etc/nginx/sites-available/laravel
:
server { listen 80; server_name your-domain.com; root /var/www/laravel/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } }
Активируйте конфиг:
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/ sudo systemctl reload nginx
4. SSL через Let’s Encrypt
Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Получите сертификат:
sudo certbot --nginx -d your-domain.com
5. Настройка Supervisor для очередей
Создайте файл /etc/supervisor/conf.d/laravel-worker.conf
:
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/laravel/artisan queue:work --sleep=3 --tries=3 autostart=true autorestart=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/laravel/storage/logs/worker.log
Обновите Supervisor:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
Мониторинг ошибок
Даже на продакшене могут возникать ошибки. Научимся их отслеживать.
1. Sentry
Установите пакет:
composer require sentry/sentry-laravel
Добавьте в .env
:
SENTRY_LARAVEL_DSN=https://ваш-ключ@sentry.io/ваш-проект
Sentry будет автоматически перехватывать исключения и отправлять уведомления.
2. Laravel Telescope
Telescope отличный инструмент для отладки, но на продакшене его доступ нужно ограничить.
Установите пакет:
composer require laravel/telescope
Запустите установку:
php artisan telescope:install php artisan migrate
В файле config/telescope.php
ограничьте доступ:
'gate' => [ 'enabled' => env('APP_ENV') === 'production', 'email' => 'ваш-email@example.com', // Только вы сможете зайти в Telescope ],
Практические задачи
- Оптимизация проекта
- Запустите
config:cache
иroute:cache
. Проверьте, как изменилась скорость загрузки страниц.
- Запустите
- Деплой на тестовый VPS
- Создайте сервер на DigitalOcean/Vultr.
- Разверните проект, используя инструкции выше.
- Интеграция Sentry
- Зарегистрируйтесь на sentry.io.
- Добавьте DSN в проект и спровоцируйте ошибку (например, вызов несуществующего метода). Убедитесь, что ошибка появилась в Sentry.
- Настройка Supervisor
- Создайте задачу в очереди (например, отправку письма).
- Убедитесь, что Supervisor обрабатывает ее.
Итоги 19-го урока
Мы прошли весь путь от подготовки проекта до его запуска на реальном сервере.
Теперь вы умеете:
- Оптимизировать Laravel-приложение.
- Работать с Nginx и SSL.
- Настраивать мониторинг ошибок.
Не останавливайтесь, впереди финальный урок. Полный курс с уроками для начинающих