4.1.4 Как настроить среду разработки для многозадачных приложений на Laravel

The Host Laravel Banner

Laravel — это популярный PHP-фреймворк с открытым исходным кодом, предназначенный для разработки веб-приложений с чистой архитектурой, расширяемостью и поддержкой современных подходов. Laravel предлагает мощную систему маршрутизации, поддержку шаблонов (Blade), Eloquent ORM, средства для создания API и встроенную систему работы с очередями, что делает его идеальным для многозадачных приложений с фоновой обработкой. Laravel активно используется для создания как простых сайтов, так и сложных корпоративных решений.

Установка Laravel на хостинг

Для установки Laravel на услугу хостинга выполните следующие шаги:

  1. Инициализируйте установку проекта в вашу www-директорию, используя PHP Composer:
# В данном случае используется PHP Composer 8.2 для получения последней версии Laravel
composer-php-8.2 create-project laravel/laravel ~/www/test.com.ua
  • ~/www/test.com.ua — путь, куда Composer установит проект;
  • create-project — команда Composer для создания нового проекта на основе шаблона;
  • laravel/laravel — официальный стартовый шаблон для новых Laravel-проектов.

  1. Создайте базу данных для вашего проекта:

Перейдите в панель управления хостингом. В разделе “Инструменты” выберите “Базы данных”:

Создайте новую базу данных:

Откройте файловый менеджер, перейдите в директорию вашего проекта, например, ~/www/test.com.ua/config/, и укажите параметры новой базы данных:

'mysql' => [
            'driver' => 'mysql', # укажите, mysql
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'), # имя базы
            'username' => env('DB_USERNAME', 'didi'),    # имя пользователя
            'password' => env('DB_PASSWORD', ' '),       # пароль
            ...
  1. Создайте файл .htaccess со следующим содержимым в корне проекта для корректного перенаправления:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</IfModule>
  1. Выполните миграцию базы данных:
php-8.2 artisan migrate

  1. Откройте браузер и введите ваше доменное имя для проверки. Вы должны увидеть стартовую страницу:

Системные требования

Перед установкой убедитесь, что ваш сервер соответствует следующим требованиям:

  • Заказана услуга выделенного или виртуального сервера;
  • CPU: 2–4 ядра;
  • ОЗУ: от 4 ГБ (оптимально 8 ГБ и более для очередей, Redis, Node.js);
  • Диск: SSD от 20 ГБ (логирование, кэш, очереди);
  • ОС: Ubuntu 22.04 LTS или Ubuntu 24.04 LTS (рекомендуется);
  • root-доступ или sudo для установки пакетов и настройки среды.

Установка Laravel на сервер

Перед началом установки важно обновить все пакеты и подключить необходимые репозитории для совместимости и безопасности ПО.

Обновите пакеты:

sudo apt update && sudo apt upgrade

Установите утилиты для работы с внешними репозиториями:

sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https -y

Добавьте официальный репозиторий последних стабильных версий PHP:

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Установка Nginx

sudo apt install nginx

Разрешите HTTP-трафик через firewall:

sudo ufw allow 'Nginx HTTP'

Включите Nginx и автозагрузку:

sudo systemctl start nginx
sudo systemctl enable nginx

Установка PHP и PHP-FPM

Laravel требует PHP. Для многозадачных приложений рекомендуется использовать PHP-FPM. Выберите подходящую версию (например, PHP 8.2 или 8.3):

sudo apt install php8.2 php8.2-fpm php8.2-cli php8.2-mysql php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-zip php8.2-curl php8.2-redis php8.2-dom

Проверьте статус PHP-FPM:

sudo systemctl status php8.2-fpm

Для повышения производительности настройте параметры в php.ini:

sudo nano /etc/php/8.2/fpm/php.ini

Измените:

  • memory_limit = 512M
  • upload_max_filesize = 64M
  • post_max_size = 64M
  • max_execution_time = 300

Сохраните и перезапустите PHP-FPM:

sudo systemctl restart php8.2-fpm

Установка MySQL

sudo apt install mysql-server

Выполните базовую настройку:

sudo mysql_secure_installation

Создайте пользователя и БД:

sudo mysql -u root -p

CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'your_username'@'localhost' IDENTIFIED BY "your_password";
GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_username'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Установка Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

Проверьте Composer:

composer --version

Установка Redis

sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server

Проверьте статус Redis:

sudo systemctl status redis-server

Установка Supervisor

sudo apt install supervisor
sudo systemctl start supervisor
sudo systemctl enable supervisor

Создайте конфиг для очередей:

sudo nano /etc/supervisor/conf.d/my-laravel-app-queue.conf
/etc/supervisor/conf.d/my-laravel-app-queue.conf
[program:my-laravel-app-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/my-laravel-app/artisan queue:work --sleep=3 --tries=3 --timeout=3600
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/my-laravel-app/storage/logs/queue.log
stopwaitsecs=3600

Пояснения к конфигурации command — путь к artisan и параметры; autostart/autorestart — автоматический запуск/перезапуск; user — обычно www-data; numprocs — количество воркеров; stdout_logfile — путь к логам.

Внимание! Убедитесь, что www-data имеет права на storage/logs вашего приложения!

Обновите Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start my-laravel-app-queue:*

Проверьте статус воркеров:

sudo supervisorctl status

Создание нового Laravel-проекта

cd /var/www/html
composer create-project laravel/laravel my-laravel-app
cd my-laravel-app

Настройте .env (DB, CACHE, QUEUE):

cp .env.example .env
nano .env
.env
APP_NAME="My Laravel App"
APP_ENV=local
APP_KEY=base64:YOUR_GENERATED_APP_KEY_HERE

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password

BROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Сгенерируйте ключ:

php artisan key:generate

Выполните миграции:

php artisan migrate

Настройка Nginx для Laravel

Создайте конфиг:

sudo nano /etc/nginx/sites-available/my-laravel-app.conf
/etc/nginx/sites-available/my-laravel-app.conf
server {
    listen 80;
    server_name my-laravel-app.test;

    root /var/www/html/my-laravel-app/public;
    index index.php index.html index.htm;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Создайте симлинк:

sudo ln -s /etc/nginx/sites-available/my-laravel-app.conf /etc/nginx/sites-enabled/

Проверьте синтаксис:

sudo nginx -t

Перезапустите:

sudo systemctl restart nginx

Права на файлы

sudo chown -R www-data:www-data /var/www/html/my-laravel-app/storage
sudo chown -R www-data:www-data /var/www/html/my-laravel-app/bootstrap/cache
sudo chmod -R 775 /var/www/html/my-laravel-app/storage
sudo chmod -R 775 /var/www/html/my-laravel-app/bootstrap/cache

После всех шагов перейдите по домену или http://<IP-сервера>.

Настройка /etc/hosts (для локальной разработки)

Подробнее — инструкция.

Добавьте домен в /etc/hosts:

sudo nano /etc/hosts

127.0.0.1 my-laravel-app.test

Примечание: Если сервер на другом IP, используйте этот IP вместо 127.0.0.1. Теперь доступен адрес http://my-laravel-app.test.

Типичные проблемы и решения
Проблема Причина Решение
“PHP module missing…” Не установлен PHP-модуль Установите нужный модуль (apt install php8.2-...)
502/504 Gateway Timeout Недостаточно памяти, PHP не запускается Увеличьте лимиты, проверьте RAM
No write permission Неправильные права на storage/cache Исправьте владельца: chown -R www-data:www-data
Can’t connect to database Ошибка в данных БД или MySQL не запущен Проверьте подключение, статус MySQL
Ошибка SSL/сертификата Нет сертификата или проблемы с DNS Проверьте DNS, настройте certbot
“Permission denied” для очередей Нет прав на storage/logs Дайте права www-data на storage/logs
Ошибка миграций Неправильные env или миграции уже выполнены Проверьте .env, php artisan migrate:fresh