4.1.4 Как настроить среду разработки для многозадачных приложений на Laravel
Laravel — это популярный PHP-фреймворк с открытым исходным кодом, предназначенный для разработки веб-приложений с чистой архитектурой, расширяемостью и поддержкой современных подходов. Laravel предлагает мощную систему маршрутизации, поддержку шаблонов (Blade), Eloquent ORM, средства для создания API и встроенную систему работы с очередями, что делает его идеальным для многозадачных приложений с фоновой обработкой. Laravel активно используется для создания как простых сайтов, так и сложных корпоративных решений.
Установка Laravel на хостинг
Для установки Laravel на услугу хостинга выполните следующие шаги:
- Инициализируйте установку проекта в вашу 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-проектов.
- Создайте базу данных для вашего проекта:
Перейдите в панель управления хостингом. В разделе “Инструменты” выберите “Базы данных”:
Создайте новую базу данных:
Откройте файловый менеджер, перейдите в директорию вашего проекта, например, ~/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', ' '), # пароль
...
- Создайте файл .htaccess со следующим содержимым в корне проекта для корректного перенаправления:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</IfModule>
- Выполните миграцию базы данных:
php-8.2 artisan migrate
- Откройте браузер и введите ваше доменное имя для проверки. Вы должны увидеть стартовую страницу:
Системные требования
Перед установкой убедитесь, что ваш сервер соответствует следующим требованиям:
- Заказана услуга выделенного или виртуального сервера;
- 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
[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
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
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 |