Laravel
Rapira uruchamia Laravela w trybie Classic ze standardowym skryptem wejściowym public/index.php. Każde żądanie HTTP działa w nowym żądaniu PHP, jak w php-fpm. Aplikacja nie wymaga zmian. Rapira nie obsługuje jeszcze Laravela w trybie Worker.
Zweryfikowano na
- PHP 8.5.8: NTS, SAPI embed
- Rapira 0.8.0
- Aplikacja bazowa laravel/laravel z laravel/framework v13.23.0
Testy używały aplikacji bazowej laravel/laravel w trybie Classic z jednym workerem i dodatkowymi trasami. Sprawdzały trasowanie, sesje, przesyłanie plików, treści żądań, cache konfiguracji, cache tras, błędy oraz 50 kolejnych żądań. Przykłady na tej stronie używają formatu konfiguracji v0.9.
Wymagania
Zainstaluj Rapirę zgodnie z instrukcją Instalacja. Rapira dostarcza PHP jako bibliotekę, a nie jako polecenie php. Zainstaluj PHP CLI dla Composera i artisan. Rapira nie używa ani nie zmienia tego CLI.
Nowy projekt laravel/laravel używa SQLite oraz sterowników sesji, cache'u i kolejek opartych na bazie danych, więc wymaga pdo_sqlite. Wydania Rapiry zawierają pdo_sqlite. Pełną listę rozszerzeń zawiera Instalacja. Jeśli kompilujesz PHP, włącz rozszerzenia, których potrzebują twoje sterowniki. Zobacz Budowanie ze źródeł.
Możesz też ustawić SESSION_DRIVER=file, CACHE_STORE=file i QUEUE_CONNECTION=sync. Testy tej strony używały tych ustawień.
Uruchamianie serwera
Domyślny tryb to dispatcher, ale public/index.php Laravela nie ma pętli dispatchera. Ustaw mode = "classic" w rapira.toml:
[http]
listen = "127.0.0.1:8000"
[http.pool]
entrypoint = "public/index.php"
mode = "classic"
processes = 4Uruchom rapira serve rapira.toml, aby wystartować serwer. Względny entrypoint używa katalogu pliku konfiguracyjnego jako bazy. Wszystkie klucze i wartości domyślne opisuje Konfiguracja.
Aplikacja nie ma trwałego stanu, który trzeba resetować między żądaniami. PHP uruchamia się raz w procesie nadrzędnym, zanim proces nadrzędny utworzy workery. Dlatego wszystkie workery używają jednego OPcache dla kodu aplikacji i vendor/. W PHP 8.4 OPcache to osobny plik opcache.so, który wymaga linii zend_extension w php.ini. Więcej informacji zawiera tryb Classic.
Utwórz cache frameworka przed uruchomieniem produkcji. Testy potwierdziły oba cache w trybie Classic:
php artisan config:cache
php artisan route:cacheTrasy i adresy URL
Rapira nie mapuje adresów URL na skrypty PHP. Każde żądanie uruchamia public/index.php, a Laravel trasuje ścieżkę z $_SERVER['REQUEST_URI']. Testy objęły trasowanie, stronę 404 Laravela i generowanie adresów przez url(). Wygenerowane adresy są bezwzględne i nie zawierają index.php. Nie wymagają nadpisywania $_SERVER ani zmian konfiguracji tras lub adresów URL.
Aby serwować zasoby z public/, włącz middleware plików statycznych. Dodaj middleware do istniejącej tabeli [http] i dodaj tabelę [http.static]. Rapira wymaga obu ustawień:
[http]
middleware = ["static"]
[http.static]
root = "public"Middleware odpowiada na żądania, które pasują do plików w public/. Wszystkie pozostałe żądania trafiają do Laravela. Zamiast tego zasoby może serwować CDN lub reverse proxy.
Wbudowana trasa /up zwraca 200. Load balancer lub kontener może jej użyć do kontroli stanu. Rapira może też serwować /livez i /readyz pod osobnym adresem. Zobacz Metryki i kontrole stanu.
Rapira przyjmuje tylko nieszyfrowany HTTP i pozostawia $_SERVER['HTTPS'] puste, także gdy żądanie ma nagłówek X-Forwarded-Proto. Gdy proxy kończy TLS, skonfiguruj w Laravelu zaufane proxy. Bez tej konfiguracji url() tworzy odnośniki http://.
Sesje, CSRF i formularze
Testy używały plikowego sterownika sesji. Każdy klient otrzymał osobną sesję i wysłał jej ciasteczko w następnym żądaniu. CSRF nie wymaga konfiguracji Rapiry, ponieważ token jest w sesji.
Testy objęły też dane formularzy, treści JSON i przesyłanie plików. http.max_body_size_mb ogranicza treść żądania przed uruchomieniem PHP. Wartość domyślna to 8 MiB. Rapira zwraca 413 dla większej treści, a Laravel nie otrzymuje żądania. Aby przyjmować większe pliki, zwiększ tę wartość. Zwiększ też post_max_size i upload_max_filesize w php.ini. Zobacz Treść żądania.
Laravel zwrócił zwykłą odpowiedź 500 dla wyjątku w trasie. Następne żądanie działało normalnie i nie powtórzyło wyjątku.
Tryb Worker
Rapira nie obsługuje jeszcze Laravela w trybie Worker. Uruchamiaj Laravela w trybie Classic.
Laravel przechowuje stan żądania w kontenerze, w rozwiązanych singletonach i we właściwościach statycznych. Worker musi zresetować ten stan przed następnym żądaniem. Octane wykonuje ten reset dla obsługiwanych serwerów, ale Rapira nie ma sterownika Octane. Aplikacje Symfony i Yii3 mogą działać w trybie Worker.
Własny worker Laravela bez pełnego resetu stanu może przekazać dane żądania, sesji lub uwierzytelniania z jednego żądania do późniejszego żądania. Nie używaj własnego workera bez pełnych testów izolacji stanu.