Home » Как установить и настроить Laravel с Nginx на Ubuntu 24
Как установить и настроить Laravel с Nginx на Ubuntu 24

Как установить и настроить 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 для небольших проектов или выделенный сервер для высоконагруженных приложений.

Не забывай про регулярные бэкапы, мониторинг безопасности и обновления системы. Успешных деплоев!

Полезные ссылки:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked