Skip to content

SSR i scheduler ​

SSR jest opcjonalnym trybem renderowania stron Inertia z resources/js/site. Przy wyłączonym SSR Laravel nadal zwraca dokument z widoku resources/views/site.blade.php, który renderuje metadane SEO. Ustawienia domyślne są w config/inertia.php; SSR jest domyślnie wyłączony.

Lokalne włączanie SSR opisuje Praca lokalna.

Włączenie SSR na serwerze ​

  1. Ustaw INERTIA_SSR_ENABLED=true w .env aplikacji.
  2. Wyczyść cache konfiguracji: php artisan config:clear.
  3. Zbuduj klienta i bundle SSR: npm run build:ssr. Skrypt wykonuje vp build oraz vp build --ssr; bundle SSR trafia do bootstrap/ssr.
  4. Wyślij public/build i bootstrap/ssr na serwer. Oba katalogi są w .gitignore; przy wdrożeniu przez phploy wysyła je include[].
  5. Uruchom php artisan ssr:ensure i sprawdź logi, jeśli serwer nie odpowiada. Wdrożenie przez phploy restartuje serwer SSR samo.
  6. Skonfiguruj scheduler, aby ssr:ensure pilnował procesu co minutę.

Scheduler i cron ​

routes/console.php rejestruje ssr:ensure co minutę z withoutOverlapping(5) oraz seo:sitemap raz dziennie. ssr:ensure nic nie robi, gdy SSR jest wyłączony lub serwer odpowiada na health check. Gdy proces nie działa, sprawdza obecność bundle’a i uruchamia inertia:start-ssr jako proces w tle.

Aby dodać wpis do crontaba bieżącego użytkownika, uruchom:

bash
php artisan mb:schedule-add

Komenda dopisuje * * * * * <PHP_BINARY> <ścieżka-projektu>/artisan schedule:run >> /dev/null 2>&1, jeśli wpis jeszcze nie istnieje. Cron uruchamia cały harmonogram Laravel: poza kontrolą procesu SSR codziennie generuje on sitemapę z opublikowanych stron i artykułów oraz synchronizuje odnośnik do niej w robots.txt.

Konfiguracja procesu ​

ZmiennaDziałanie
INERTIA_SSR_ENABLEDWłącza SSR; domyślnie false.
INERTIA_SSR_URLAdres endpointu SSR; domyślnie http://127.0.0.1:13714. Zmień go, jeśli serwer używa innego hosta lub portu.
INERTIA_SSR_RUNTIMEPolecenie uruchamiające Node; domyślnie node. Jeśli cron nie widzi Node w PATH, ustaw ścieżkę do binarki.
INERTIA_SSR_ENSURE_BUNDLE_EXISTSDomyślnie false: brak bundle’a SSR nie jest błędem.
INERTIA_SSR_THROW_ON_ERRORDomyślnie false: błąd SSR nie przerywa żądania.

Po zmianie .env wyczyść cache konfiguracji i ponownie uruchom php artisan ssr:ensure. Przy INERTIA_SSR_ENABLED=false harmonogram nie uruchamia procesu SSR, a witryna nadal działa bez niego.

Ścieżka do Node ​

Cron zwykle ma uboższy PATH niż terminal, więc node zainstalowany przez menedżer wersji może nie być w nim widoczny. Właściwa wartość INERTIA_SSR_RUNTIME zależy od środowiska. Ścieżkę do binarki pokażą na przykład:

bash
volta which node                          # Volta
ls -d ~/.nvm/versions/node/*/bin/node     # nvm
readlink -f "$(which node)"               # instalacja systemowa

Diagnozowanie ​

  • SSR bundle not found — wykonaj npm run build:ssr i upewnij się, że bootstrap/ssr jest na serwerze.
  • SSR runtime "node" not found on PATH — ustaw INERTIA_SSR_RUNTIME zgodnie z sekcją Ścieżka do Node. To ostrzeżenie może pojawiać się w logu także po ustawieniu ścieżki, mimo że serwer wstał; o tym, czy proces działa, rozstrzyga ssr-process.log.
  • exec() is disabled — ssr:ensure nie może wystartować procesu, jeśli PHP ma exec na liście disable_functions; sprawdź konfigurację PHP hostingu.
  • Serwer nie wstaje po poleceniu — sprawdź storage/logs/ssr/ssr-RRRR-MM-DD.log (decyzje ssr:ensure) oraz storage/logs/ssr/ssr-process.log (wyjście procesu Node).

Made by Moonbite