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 ядра;
- ОЗП (RAM): від 4 ГБ (оптимально 8 ГБ і більше при активному використанні черг, Redis, Node.js);
- Диск: SSD-диск від 20 ГБ (читання-запис Redis, логів, кешу);
- ОС: Ubuntu 22.04 LTS або Ubuntu 24.04 LTS (рекомендовано);
- root-доступ або sudo для встановлення пакетів та налаштування середовища.
Для створення сучасних веб-додатків на Laravel, особливо тих, що використовують фонові завдання, черги та інші асинхронні операції (багатозадачні додатки), потрібне надійне та правильно налаштоване середовище розробки. У цьому посібнику ми докладно опишемо кроки з налаштування такого середовища на операційній системі Ubuntu, використовуючи Nginx, PHP-FPM, MySQL, Composer, Node.js, Redis та Supervisor.
Встановлення 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
Nginx — це високопродуктивний веб-сервер, який обслуговуватиме ваші Laravel-додатки.
sudo apt install nginx
Дозволити HTTP-трафік через фаєрвол:
sudo ufw allow 'Nginx HTTP'
Увімкніть Nginx та його автозавантаження при ввімкненні системи:
sudo systemctl start nginx
sudo systemctl enable nginx
Встановлення PHP та PHP-FPM
Laravel потребує PHP. Для багатозадачних додатків, особливо при використанні Nginx, ми будемо використовувати PHP-FPM (FastCGI Process Manager) для ефективнішої обробки PHP-скриптів. Виберіть версію PHP, що відповідає вашим вимогам Laravel (наприклад, 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
Laravel підтримує різні бази даних. У цьому прикладі ми будемо використовувати MySQL, але ви можете вибрати PostgreSQL.
sudo apt install mysql-server
Виконайте для базового налаштування безпеки:
sudo mysql_secure_installation
У процесі mysql_secure_installation
вам буде запропоновано встановити пароль для користувача root
, видалити анонімних користувачів, заборонити віддалений вхід для root
та видалити тестову базу даних. Рекомендується відповісти “так” на всі ці питання.
Для створення користувача та бази даних для Laravel увійдіть до MySQL як root
:
sudo mysql -u root -p
Виконайте наступні команди, замінивши your_database_name
, your_username
та your_password
на бажані значення:
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
Composer — це менеджер залежностей для PHP, необхідний для встановлення Laravel та його пакетів.
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
Redis — це сховище даних у пам’яті, що використовується Laravel для кешування, керування сесіями та, що важливо для багатозадачних додатків, для обробки черг (Laravel Queues).
sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
Перевірте статус Redis:
sudo systemctl status redis-server
Встановлення Supervisor
Supervisor — це система керування процесами, яка дозволяє запускати та контролювати довготривалі процеси, такі як воркери черг Laravel. Це критично важливо для забезпечення стабільної роботи фонових завдань.
sudo apt install supervisor
sudo systemctl start supervisor
sudo systemctl enable supervisor
Наступним кроком буде налаштування Supervisor для Laravel Queues. Laravel Queues дозволяють вашому додатку виконувати ресурсомісткі завдання у фоновому режимі. Supervisor стежитиме за воркерами черг і перезапускатиме їх у разі збою.
Створіть файл конфігурації 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
та командаqueue:work
. Параметри--sleep
,--tries
та--timeout
можуть бути налаштовані відповідно до ваших потреб.autostart=true
: Запускати воркери при старті Supervisor.autorestart=true
: Автоматично перезапускати воркери у разі збою.user=www-data
: Користувач, від імені якого запускатимуться воркери (зазвичай це користувач Nginx/PHP-FPM).numprocs
: Кількість процесів воркерів, які будуть запущені. Для багатозадачних додатків можна збільшити це значення (наприклад, до 2-4) залежно від навантаження.stdout_logfile
: Шлях до файлу логів для воркерів.
Важливо
Переконайтеся, що у користувача www-data
є права на читання/запис у директорію вашого Laravel-додатка, особливо в storage/logs
.
Збережіть файл та оновіть Supervisor, щоб він прочитав нову конфігурацію:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start my-laravel-app-queue:*
Перевірте статус воркерів:
sudo supervisorctl status
Ви повинні побачити статус RUNNING
для вашого процесу черги.
Створення нового Laravel-проекту
Тепер, коли всі компоненти встановлені, ви можете створити новий Laravel-проект.
cd /var/www/html # Або в будь-яку іншу зручну директорію
composer create-project laravel/laravel my-laravel-app
cd my-laravel-app
Налаштуйте файл змінного середовища .env. Скопіюйте .env.example
в .env
та відредагуйте його, вказавши дані вашої бази даних та драйвери кешу/черги.
cp .env.example .env
nano .env
Приклад налаштувань для .env
замініть your_database_name, your_username та your_password на ім’я користувача, пароль і назву бази даних.:
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-додатка
Створіть файл конфігурації Nginx для вашого Laravel-додатка.
sudo nano /etc/nginx/sites-available/my-laravel-app.conf
Додайте наступну конфігурацію, замінивши my-laravel-app.test
на бажаний домен (наприклад, localhost
або ім’я домену у вашому файлі /etc/hosts
):
server {
listen 80;
server_name my-laravel-app.test; # Замініть на ваш домен або IP
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/
Також необхідно розкоментувати показник server_names_hash_bucket_size
у конфігу nginx за адресою /etc/nginx/nginx.conf
Перевірте синтаксис конфігурації Nginx:
sudo nginx -t
Після отримання статусу ‘ok’ перезавантажте його:
sudo systemctl restart nginx
Права доступу до файлів
Переконайтеся, що директорії storage
та bootstrap/cache
вашого Laravel-додатка мають правильні права для запису веб-сервером (користувачем www-data
).
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
Після виконання всіх зазначених дій перейдіть за адресою доменного імені, вказаного в Nginx або (якщо ви не використовуєте домен) http://<IP-адреса_сервера>
.
Якщо все налаштовано правильно — ви побачите стартову сторінку Laravel:
Налаштування /etc/hosts (для локальної розробки)
Детальніше про це ви можете дізнатися з нашої інструкції.
Якщо ви використовуєте власний домен, такий як my-laravel-app.test
, додайте його до вашого файлу /etc/hosts
(на вашій локальній машині, звідки ви звертаєтесь до сервера):
sudo nano /etc/hosts
Додайте рядок:
127.0.0.1 my-laravel-app.test
Примітка:
Якщо ваш сервер знаходиться на іншому IP, використовуйте IP-адресу сервера замість 127.0.0.1
.
Тепер ви повинні мати доступ до вашого Laravel-додатка за адресою http://my-laravel-app.test
у браузері.
Типові проблеми та їх вирішення
Проблема | Причина | Рішення |
---|---|---|
“PHP module missing…” | Відсутній модуль PHP | Встановіть потрібний модуль (apt install php8.2-<module> ) |
502/504 Gateway Timeout | Недостатньо пам’яті, PHP не запускається | Збільшіть ліміти пам’яті, перевірте RAM |
No write permission | Неправильні права на папки storage/cache | Перевірте власника: sudo chown -R www-data:www-data ... |
Can’t connect to database | Неправильно налаштоване підключення до БД | Перевірте дані підключення, статус MySQL |
Помилка SSL/сертифіката | Відсутній дійсний сертифікат або проблеми з DNS | Перевірте DNS і налаштуйте certbot |
“Permission denied” при чергах | Supervisor/worker не має прав на storage/logs | Надайте права www-data на storage/logs |
Помилка міграцій | Неправильні змінні .env, міграції вже застосовані | Перевірте .env, виконайте php artisan migrate:fresh |
Офіційна документація
Для отримання додаткової детальної інформації рекомендуємо звернутися до офіційних джерел: