🢂Wdrażanie aplikacji Laravel przy użyciu Artisan

Poznaj zaawansowane techniki wdrażania aplikacji Laravel przy użyciu poleceń Artisan. Dowiedz się, jak optymalizować aplikację dla środowiska produkcyjnego i zapewnić sprawne przejście od rozwoju do wdrożenia.

Proces wdrażania aplikacji Laravel to kluczowy etap w cyklu życia każdego projektu. Artisan udostępnia szereg narzędzi, które ułatwiają ten proces i pozwalają na optymalizację aplikacji dla środowiska produkcyjnego. W tym artykule przyjrzymy się poleceniom, które są niezbędne dla efektywnego wdrażania aplikacji Laravel.

Podstawy wdrażania aplikacji

Proces wdrażania aplikacji Laravel często wiąże się z wykonaniem kilku poleceń Artisan w celu optymalizacji i przygotowania aplikacji do pracy w środowisku produkcyjnym.

Polecenia php artisan optimize, php artisan config:cache, php artisan route:cache i php artisan view:cache są kluczowe dla zwiększenia wydajności aplikacji w środowisku produkcyjnym. Przed wdrożeniem często stosuje się również polecenia php artisan down i php artisan up do przełączenia aplikacji w tryb konserwacji na czas wdrożenia.

Często podczas wdrożenia wykonuje się również polecenie Composer composer install --optimize-autoloader --no-dev. Instaluje ono zależności projektu, pomijając pakiety deweloperskie (--no-dev) i optymalizuje autoloader (--optimize-autoloader), co przyczynia się do zmniejszenia rozmiaru wdrożonej aplikacji i poprawia wydajność ładowania klas.

W środowisku produkcyjnym, migracje bazy danych często uruchamiane są automatycznie podczas procesu wdrożenia. Można to zrobić za pomocą polecenia php artisan migrate --force, które wymusza uruchomienie migracji bez konieczności interaktywnego potwierdzenia, co jest typowe dla środowisk produkcyjnych. Należy jednak upewnić się, że migracje są bezpieczne i nie spowodują utraty danych.

W aplikacjach korzystających z kolejek zadań, w środowisku produkcyjnym często uruchamia się workera kolejki w tle za pomocą polecenia php artisan queue:work --daemon. Pozwala to na asynchroniczne przetwarzanie czasochłonnych zadań bez blokowania odpowiedzi dla użytkownika.

Przykłady użycia przy wdrażaniu

Poniżej znajduje się zestaw praktycznych przykładów komend używanych podczas wdrażania aplikacji Laravel:

# Kompleksowa optymalizacja przed wdrożeniem
php artisan optimize --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Uruchomienie migracji w środowisku produkcyjnym bez potwierdzenia
php artisan migrate --force

# Aktualizacja struktury bazy danych bez utraty danych
php artisan migrate --force --seed

# Przełączenie aplikacji w tryb konserwacji z niestandardową wiadomością i czasem oczekiwania
php artisan down --retry=1800

# Tryb konserwacji z dostępem przez sekretny token dla deweloperów
php artisan down --secret="tajny-token-dostepowy"

# Uruchomienie migracji bez przerwania działania aplikacji (nowe w Laravel 8+)
php artisan migrate --force --isolated

# Optymalizacja aplikacji dla konkretnego środowiska
php artisan optimize --env=production

# Czyszczenie plików sesji wygasłych
php artisan session:gc

# Generowanie dokumentacji API (wymaga zainstalowania pakietu)
php artisan apidoc:generate

# Publikowanie zasobów od dostawców (vendors)
php artisan vendor:publish --provider="Provider\ServiceProvider" --tag="config"

# Instalacja Passport dla API OAuth (jeśli używany)
php artisan passport:install

# Resetowanie wszystkich kluczy OAuth (używać ostrożnie!)
php artisan passport:keys --force

# Przygotowanie aplikacji do skalowania horyzontalnego
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
php artisan storage:link

# Wyłączenie trybu konserwacji po zakończeniu wdrożenia
php artisan up

Skalowalność i wydajność

Poniżej znajdują się dodatkowe przykłady dotyczące skalowania i optymalizacji wydajności aplikacji Laravel:

# Czyszczenie wszelkich pamięci podręcznych przed wdrożeniem nowej wersji
php artisan optimize:clear

# Optymalizacja buforów dla środowiska produkcyjnego
php artisan optimize
php artisan event:cache
php artisan route:cache
php artisan config:cache
php artisan view:cache

# Upewnienie się, że wszystkie usługi cache zostały wyczyszczone i zregenerowane
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan event:clear
sleep 2
php artisan event:cache
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize

# Uruchomienie testów przed wdrożeniem
php artisan test --parallel

# Ustawienia dla baz danych w klastrze (np. replikacji)
php artisan config:cache --env=production_cluster

# Obsługa wielu workerów kolejki dla skalowania
php artisan queue:work --queue=high,default,low --sleep=3 --tries=3 --timeout=90 --daemon

Automatyzacja wdrożeń

Podczas automatyzacji wdrożeń w ciągłej integracji i ciągłym dostarczaniu (CI/CD), często używa się następujących poleceń:

# Czysty skrypt wdrożeniowy dla Laravela
php artisan down 
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
php artisan up

# Sprawdzenie gotowości aplikacji do wdrożenia
php artisan about

# Tworzenie kluczy aplikacji podczas pierwszego wdrożenia
php artisan key:generate --force

# Linkowanie storage do public podczas pierwszego wdrożenia
php artisan storage:link

# Publikowanie wszystkich zasobów pakietów
php artisan vendor:publish --all --force

# Wypełnianie pustej bazy danych początkowymi danymi
php artisan db:seed --force

# Sprawdzenie spójności tras
php artisan route:list

Tryb konserwacji

Artisan oferuje rozbudowane opcje zarządzania trybem konserwacji aplikacji:

# Podstawowe włączenie trybu konserwacji
php artisan down

# Tryb konserwacji z niestandardowym kodem odpowiedzi
php artisan down --status=503

# Tryb konserwacji z czasem ponownej próby (w sekundach)
php artisan down --retry=60

# Tryb konserwacji z możliwością dostępu dla określonych IP
php artisan down --allow=192.168.1.1 --allow=192.168.1.2

# Tryb konserwacji z dostępem przez sekretny URL
php artisan down --secret="tajny-token"
# Dostęp przez: https://example.com/tajny-token

# Tryb konserwacji z przekierowaniem do innej strony
php artisan down --redirect=/maintenance

# Tryb konserwacji bez wpływu na określone ścieżki
php artisan down --except=/api/health-check

# Wyłączenie trybu konserwacji
php artisan up

Zarządzanie ustawieniami środowiskowymi

Podczas wdrażania aplikacji Laravel, często konieczne jest zarządzanie różnymi ustawieniami środowiskowymi:

# Generowanie klucza aplikacji
php artisan key:generate

# Generowanie klucza dla określonego środowiska
php artisan key:generate --env=production

# Publiczne przechowywanie plików - tworzenie linków symbolicznych
php artisan storage:link

# Publikowanie zasobów pakietów dla środowiska produkcyjnego
php artisan vendor:publish --tag=public --force

# Czyszczenie pamięci podręcznej konfiguracji
php artisan config:clear

# Buforowanie konfiguracji dla wydajności
php artisan config:cache

Dobre praktyki wdrażania

  1. Używaj trybu konserwacji - Zawsze włączaj tryb konserwacji podczas wdrażania, aby uniknąć potencjalnych problemów z użytkownikami korzystającymi z aplikacji w trakcie aktualizacji.

  2. Automatyzuj proces - Utwórz skrypt lub używaj narzędzi CI/CD do automatyzacji procesu wdrażania, co minimalizuje ryzyko błędu ludzkiego.

  3. Korzystaj z buforowania konfiguracji - W środowisku produkcyjnym zawsze używaj php artisan config:cache dla lepszej wydajności.

  4. Twórz kopie zapasowe - Przed wdrożeniem nowej wersji, twórz kopie zapasowe bazy danych i plików.

  5. Testuj przed wdrożeniem - Uruchamiaj testy automatyczne przed każdym wdrożeniem.

  6. Monitoruj po wdrożeniu - Po zakończeniu wdrożenia monitoruj aplikację pod kątem błędów i problemów wydajnościowych.

  7. Używaj flag --force - W środowisku produkcyjnym używaj flag --force dla poleceń, które mogą wymagać interakcji użytkownika.

  8. Dokumentuj procedury - Przechowuj dokumentację procesu wdrażania w repozytorium projektu.

  9. Wdrażaj stopniowo - Rozważ wdrażanie nowych funkcji stopniowo, wykorzystując feature toggles lub wdrażanie canary.

  10. Optymalizuj autoloader - Zawsze używaj --optimize-autoloader z Composer, aby przyspieszyć ładowanie klas.