Встановлення
Ця сторінка проведе вас від «нічого не встановлено» до робочого застосунку Lift, який можна опитати через curl.
1. Перевірте передумови
Вам потрібні PHP 8.1 або новіший і Composer.
php -v # має бути ≥ 8.1
composer -V # будь-яка свіжа версія
Якщо php -v показує 7.x, спершу встановіть PHP 8.1+:
- Ubuntu/Debian:
sudo apt install php8.3-cli php8.3-curl php8.3-mbstring - macOS (Homebrew):
brew install php - Windows: завантажте з windows.php.net
Рекомендовані розширення PHP (жодне не є строго обов’язковим, але вони вам знадобляться):
| Розширення | Потрібне для |
|---|---|
ext-curl |
HTTP-клієнта |
ext-mbstring |
Роботи з рядками UTF-8, підпису JWT |
ext-pdo + ext-pdo_mysql / ext-pdo_pgsql / ext-pdo_sqlite |
Бази даних |
ext-redis |
RedisCache, RedisQueue, RedisSessionStore |
ext-pcntl |
Коректного завершення воркера черг |
ext-opcache |
Продуктивності в продакшені (величезне пришвидшення) |
2. Створіть проєкт
mkdir my-app
cd my-app
composer init --name="me/my-app" --type=project --no-interaction
composer require malinichevvv/lift-php
Це єдина залежність. Lift автоматично підтягує невеликі пакети PSR-інтерфейсів, які йому потрібні (psr/http-message, psr/container тощо).
3. Розкладіть файли
Lift не нав’язує жодної структури, але ось мінімальне розкладання, яке водночас готове до продакшену:
my-app/
├── composer.json
├── composer.lock
├── vendor/ (створюється composer)
├── public/
│ └── index.php ← єдина точка входу, єдиний PHP-файл, який віддає вебсервер
├── src/ ← ваші класи (контролери, сервіси, …)
├── views/ ← опційно, якщо використовуєте шаблони
├── storage/ ← рантайм-файли (логи, кеш, сесії)
└── .env ← опційно, конфігурація під оточення
Створіть public/index.php:
<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use Lift\App;
use Lift\Http\Response;
$app = new App();
$app->get('/', fn() => Response::json([
'status' => 'ok',
'time' => date('c'),
'php' => PHP_VERSION,
]));
$app->run();
4. Перевірте, що все працює
php -S 127.0.0.1:8000 -t public
В іншому терміналі:
curl http://127.0.0.1:8000/
# {"status":"ok","time":"2025-...","php":"8.3.6"}
Якщо ви бачите JSON — Lift встановлено і він працює. 🎉
5. Налаштуйте свій реальний вебсервер
Вбудований сервер PHP підходить для розробки. Для продакшену вам знадобиться PHP-FPM за Nginx або Apache.
Nginx + PHP-FPM
server {
listen 80;
server_name example.com;
root /var/www/my-app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Статичні ресурси: віддаємо напряму, з тривалим кешем
location ~* \.(css|js|svg|png|jpg|jpeg|gif|woff2?)$ {
expires 30d;
access_log off;
}
}
Apache
/var/www/my-app/public/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
</IfModule>
Переконайтеся, що для цього каталогу у вашому vhost встановлено AllowOverride All.
Caddy (альтернатива без конфігурації)
example.com {
root * /var/www/my-app/public
php_fastcgi unix//run/php/php8.3-fpm.sock
file_server
encode gzip
}
6. Увімкніть OPcache у продакшені
Ця єдина зміна приблизно подвоює пропускну здатність запитів. Додайте до php.ini (або у drop-in файл у /etc/php/8.3/fpm/conf.d/):
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; лише продакшен — скидайте вручну під час деплою
opcache.save_comments=1 ; обов’язково для маршрутизації через атрибути #[Route]
opcache.jit=tracing
opcache.jit_buffer_size=64M
Після ввімкнення перезапустіть PHP-FPM (sudo systemctl restart php8.3-fpm).
7. (Опційно) Файл оточення
Для конфігурації за принципом 12-factor покладіть .env у корінь проєкту:
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:GENERATE_ME_LATER
DB_DSN="mysql:host=127.0.0.1;dbname=myapp;charset=utf8mb4"
DB_USER=root
DB_PASS=secret
Завантажте його в public/index.php до створення застосунку:
$app = new App();
$app->loadEnv(__DIR__ . '/../.env');
Потім у будь-якому місці коду:
use Lift\Config\Env;
$debug = Env::bool('APP_DEBUG', false);
$dsn = Env::string('DB_DSN');
8. (Опційно) Використовуйте CLI lift
Бінарник lift встановлюється Composer у vendor/bin/lift. Він генерує шаблонний код і запускає воркери черг / міграції:
vendor/bin/lift make:controller UserController
vendor/bin/lift make:request StoreUserRequest
vendor/bin/lift make:model User
vendor/bin/lift queue:work
vendor/bin/lift migrate
Повний перелік: Консоль (CLI).
Часті підводні камені під час встановлення
- ❌
Class "Lift\App" not found→ ви забулиrequire '.../vendor/autoload.php'на початкуindex.php. - ❌
SyntaxError: unexpected token "fn"→ ваш PHP старший за 7.4 (Lift вимагає 8.1+). Виконайтеphp -vдля перевірки. - ❌ 404 для кожного маршруту, окрім
/→ ваш вебсервер не перенаправляє URL наindex.php. Перевірте конфігурацію Nginx/Apache вище. - ❌
composer require malinichevvv/lift-phpпише «Could not find package» → якщо ви пробуєте ще не випущену версію, встановіть зі шляху або VCS:composer config repositories.lift path /path/to/lift composer require malinichevvv/lift-php:@dev
Наступні кроки
Тепер у вас є робочий застосунок. Час змусити його щось робити.