- Home »

Как установить и настроить Laravel с Nginx на Ubuntu 24
Привет! Сегодня разберём, как быстро и правильно поднять Laravel с Nginx на Ubuntu 24. Если ты в поиске надёжного хостинга для своих проектов, то эта статья именно для тебя — никакого теоретического бла-бла-бла, только практические шаги и реальные кейсы из жизни.
Многие разработчики сталкиваются с проблемой правильной настройки связки Laravel + Nginx, особенно когда дело доходит до реальных продакшн-серверов. Одна неверная конфигурация — и твой проект либо работает медленно, либо вообще не стартует. Мы пройдём весь процесс пошагово: от установки зависимостей до тонкой настройки производительности.
Как это работает: архитектура связки Laravel + Nginx
Nginx выступает как веб-сервер и reverse proxy, который принимает HTTP-запросы и передаёт их PHP-FPM для обработки Laravel-приложением. Схема простая: пользователь → Nginx → PHP-FPM → Laravel → база данных.
Преимущества такого подхода:
- Nginx отлично справляется со статическими файлами
- PHP-FPM обеспечивает стабильную работу PHP-процессов
- Laravel получает оптимизированное окружение для работы
- Возможность легкого масштабирования
Подготовка системы и установка зависимостей
Первым делом обновляем систему и устанавливаем необходимые пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install nginx mysql-server php8.3-fpm php8.3-mysql php8.3-xml php8.3-gd php8.3-curl php8.3-zip php8.3-mbstring php8.3-bcmath php8.3-intl php8.3-redis unzip curl git -y
Установка Composer — менеджера пакетов PHP:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
Проверяем, что всё установилось корректно:
nginx -v
php -v
composer --version
mysql --version
Создание Laravel-проекта
Создаём новый проект Laravel в директории /var/www
:
cd /var/www
sudo composer create-project laravel/laravel myapp
sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp
sudo chmod -R 775 /var/www/myapp/storage
sudo chmod -R 775 /var/www/myapp/bootstrap/cache
Настраиваем файл окружения:
cd /var/www/myapp
sudo cp .env.example .env
sudo php artisan key:generate
Настройка базы данных MySQL
Создаём базу данных и пользователя:
sudo mysql -u root -p
CREATE DATABASE laravel_db;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Редактируем .env
файл:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=strong_password_here
Запускаем миграции:
php artisan migrate
Конфигурация Nginx
Создаём конфигурационный файл для нашего сайта:
sudo nano /etc/nginx/sites-available/myapp
Вставляем оптимизированную конфигурацию:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/myapp/public;
index index.php index.html index.htm;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/javascript;
# Handle static files
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt|tar|gz)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# Laravel routes
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP processing
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
# Security: block access to sensitive files
location ~ /\.(?!well-known).* {
deny all;
}
}
Активируем конфигурацию:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Оптимизация PHP-FPM
Редактируем конфигурацию PHP-FPM для лучшей производительности:
sudo nano /etc/php/8.3/fpm/pool.d/www.conf
Ключевые параметры для оптимизации:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
Настраиваем основные параметры PHP:
sudo nano /etc/php/8.3/fpm/php.ini
Важные настройки:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Перезапускаем службы:
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx
Сравнение с альтернативными решениями
Решение | Производительность | Простота настройки | Потребление ресурсов | Масштабируемость |
---|---|---|---|---|
Nginx + PHP-FPM | Отлично | Средне | Низкое | Высокая |
Apache + mod_php | Хорошо | Просто | Высокое | Средняя |
Docker + Laravel Sail | Хорошо | Очень просто | Среднее | Отлично |
Nginx + Apache (Proxy) | Хорошо | Сложно | Высокое | Высокая |
Настройка SSL и безопасности
Устанавливаем Certbot для получения SSL-сертификатов:
sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Получаем SSL-сертификат:
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
Настраиваем автоматическое обновление:
sudo crontab -e
0 12 * * * /usr/bin/certbot renew --quiet
Мониторинг и отладка
Полезные команды для диагностики:
# Проверка статуса служб
sudo systemctl status nginx
sudo systemctl status php8.3-fpm
# Мониторинг логов
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php8.3-fpm.log
# Проверка конфигураций
sudo nginx -t
sudo php-fpm8.3 -t
# Мониторинг производительности
sudo htop
sudo iotop
Оптимизация производительности Laravel
Кэширование конфигурации и маршрутов:
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
php artisan optimize
Настройка Redis для кэширования (опционально):
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
В файле .env
:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
Автоматизация развёртывания
Создаём простой скрипт для развёртывания:
sudo nano /usr/local/bin/deploy-laravel.sh
#!/bin/bash
cd /var/www/myapp
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
sudo systemctl reload php8.3-fpm
echo "Deployment completed successfully!"
sudo chmod +x /usr/local/bin/deploy-laravel.sh
Полезные факты и нестандартные решения
Интересные возможности связки Laravel + Nginx:
- Nginx как балансировщик: можно настроить несколько PHP-FPM пулов для разных частей приложения
- Микрокэширование: Nginx может кэшировать ответы FastCGI на уровне сервера
- A/B тестирование: используя переменные Nginx, можно направлять трафик на разные версии приложения
- Геолокация: Nginx с модулем GeoIP может передавать данные о местоположении в Laravel
Пример конфигурации для микрокэширования:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=laravel:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Решение частых проблем
Основные проблемы и их решения:
- 502 Bad Gateway: проверяем работу PHP-FPM:
sudo systemctl status php8.3-fpm
- Права доступа:
sudo chown -R www-data:www-data /var/www/myapp
- Медленная работа: включаем OPcache и настраиваем пулы PHP-FPM
- Большие файлы: увеличиваем
client_max_body_size
в Nginx
Заключение и рекомендации
Связка Laravel + Nginx + PHP-FPM — это проверенное временем решение для продакшн-серверов. Она обеспечивает отличную производительность, безопасность и масштабируемость. Главное — правильно настроить все компоненты и регулярно мониторить работу системы.
Для размещения своих проектов рекомендую использовать качественный хостинг. Можешь заказать VPS для небольших проектов или выделенный сервер для высоконагруженных приложений.
Не забывай про регулярные бэкапы, мониторинг безопасности и обновления системы. Успешных деплоев!
Полезные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.