PHP: Pierwsze kroki

Jak rozpocząć pracę z PHP na Stackhero

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie PHP cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania PHP cloud hosting Stackhero zajmuje tylko 5 minut!

Uruchomienie aplikacji PHP na Stackhero jest zarówno proste, jak i wydajne. W kilku krokach Twój projekt będzie dostępny online i gotowy do działania. Ten przewodnik przeprowadzi Cię przez proces tworzenia, konfigurowania i wdrażania usługi PHP w przyjazny, krok po kroku sposób.

Aby rozpocząć, możesz utworzyć usługę PHP na Stackhero bezpośrednio z poziomu panelu zarządzania. Interfejs został zaprojektowany tak, aby ten proces był szybki i intuicyjny.

Przed rozpoczęciem upewnij się, że masz przygotowane następujące narzędzia:

  1. Git. Możesz go pobrać ze strony https://git-scm.com/downloads.
  2. Windows Terminal (opcjonalnie dla użytkowników Windows). Ten terminal zapewnia lepsze doświadczenie pracy. Jest dostępny w Microsoft Store.

Podstawową konfiguracją, której będziesz potrzebować, jest Twój klucz publiczny SSH. Możesz go uzyskać, uruchamiając jedną z poniższych komend:

cat ~/.ssh/id_rsa.pub

lub

cat ~/.ssh/id_ed25519.pub

Jeśli nie masz jeszcze pary kluczy SSH, możesz ją wygenerować za pomocą ssh-keygen na Linuxie i macOS lub ssh-keygen.exe na Windows.

Gdy już masz swój klucz publiczny, przejdź do panelu Stackhero, wybierz swoją usługę PHP, przejdź do strony konfiguracji i wklej klucz w odpowiednie pole.

Tip: Jeśli chcesz ustawić swój klucz publiczny SSH dla wszystkich przyszłych usług, możesz zrobić to globalnie. Kliknij swoje zdjęcie profilowe w prawym górnym rogu panelu, przejdź do "Twój profil" i wklej tam swój klucz publiczny SSH.

Aby ułatwić Ci start, przygotowaliśmy przykładową aplikację PHP. Możesz sklonować repozytorium poleceniem:

git clone https://github.com/stackhero-io/phpGettingStarted.git stackhero-php-getting-started
cd stackhero-php-getting-started

Stackhero umożliwia łatwe wdrażanie aplikacji za pomocą Git. Skopiuj polecenie git remote podane na pierwszej stronie Twojej usługi PHP w panelu. Będzie wyglądać mniej więcej tak:

git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Jesteś już gotowy do wdrożenia aplikacji. Możesz wypchnąć swój kod poleceniem:

git push stackhero main

Podczas pierwszego pushowania zostaniesz poproszony o zaakceptowanie odcisku klucza. Wpisz po prostu "yes", gdy zostaniesz o to zapytany. Po krótkiej chwili Twoja aplikacja powinna być dostępna online. Status możesz sprawdzić pod adresem URL podanym w panelu Stackhero (zazwyczaj https://<XXXXXX>.stackhero-network.com).

Aby zaktualizować aplikację, wystarczy zmodyfikować plik www/index.php (lub inny potrzebny plik), a następnie ponownie wdrożyć zmiany poleceniem:

git add -A .
git commit -m "Update www/index.php"
git push stackhero main

Jeśli masz już gotową aplikację PHP, którą chcesz wdrożyć, wystarczy dodać zdalne repozytorium do swojego projektu (zobacz Skonfiguruj zdalne repozytorium). Następnie możesz wypchnąć zmiany poleceniem:

git push stackhero main

Domyślnie Stackhero szuka Twojego kodu PHP i plików statycznych w katalogu www. Na przykład, gdy ktoś odwiedza yourdomain.com/myphoto.jpg, plik zostanie obsłużony z www/myphoto.jpg. Jeśli Twoja aplikacja korzysta z innego katalogu publicznego, możesz zmienić to ustawienie w konfiguracji usługi PHP.

Jeśli podczas wdrażania pojawi się taki błąd:

error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ten komunikat oznacza, że zdalne repozytorium Git zawiera zmiany, których nie masz lokalnie. Jeśli chcesz nadpisać zdalne repozytorium swoją wersją lokalną, możesz wymusić push poleceniem:

git push -f stackhero main

Jeśli pojawi się taki błąd:

error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'

Zazwyczaj oznacza to, że gałąź main nie istnieje lokalnie. W takim przypadku możesz wypchnąć gałąź master:

git push stackhero master

Jeśli Git wyświetla Everything up-to-date, a nie widzisz wdrożonych zmian, prawdopodobnie zapomniałeś zatwierdzić swoje zmiany. Możesz to naprawić, wykonując:

git add -A .
git commit -m "Twój komunikat commita"
git push stackhero main

Jeśli nie zmieniłeś żadnego kodu, ale chcesz wymusić wdrożenie, możesz użyć pustego commita:

git commit --allow-empty -m "Force update"
git push stackhero main

Jeśli chcesz wdrożyć inną gałąź (np. production), użyj polecenia:

git push stackhero production:main

Aby wdrożyć konkretny tag (np. v1.0), uruchom:

git push stackhero 'v1.0^{}:main'

^{} zapewnia, że commit powiązany z tagiem zostanie poprawnie wypchnięty.

Jeśli musisz wdrożyć konkretny commit, najpierw znajdź jego hash za pomocą git log. Następnie wymuś push tego commita poleceniem:

git push -f stackhero <HASH>:main

Często stosuje się oddzielne usługi dla różnych środowisk, takich jak produkcyjne i staging. Możesz to obsłużyć, zmieniając nazwy i dodając zdalne repozytoria.

Aby zmienić nazwę obecnego zdalnego repozytorium z stackhero na stackhero-staging, uruchom:

git remote rename stackhero stackhero-staging

Następnie utwórz nową usługę PHP dla produkcji w panelu i dodaj ją poleceniem:

git remote add stackhero-production ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Teraz możesz wdrażać na wybrane środowisko poleceniem:

git push stackhero-production main

lub

git push stackhero-staging main

Jeśli korzystasz z macOS i przy każdym pushowaniu kodu jesteś proszony o hasło do klucza SSH, nie musisz usuwać hasła z klucza. Możesz bezpiecznie zapisać hasło w pęku kluczy macOS. Wystarczy uruchomić:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

Po tym macOS nie będzie już pytał o hasło do klucza podczas pushowania kodu.

Dla środowisk produkcyjnych i staging ważne jest bezpieczne przechowywanie wrażliwych danych, takich jak tokeny i hasła. Zamiast umieszczać sekrety w repozytorium, zaleca się korzystanie ze zmiennych środowiskowych. Możesz dodać takie zmienne w panelu Stackhero, a następnie odczytać je w kodzie. Na przykład, jeśli utworzysz zmienną środowiskową o nazwie mySecret, możesz ją pobrać w PHP tak:

getenv("mySecret")

Podczas pushowania kodu, skrypty wdrożeniowe Stackhero odczytają Twój plik composer.json i automatycznie zainstalują wszystkie zależności określone przez Composer.

Jeśli Twoja aplikacja musi przechowywać pliki (np. zdjęcia przesyłane przez użytkowników), często warto skorzystać z rozwiązania object storage. Takie podejście ułatwia współdzielenie plików między usługami i oddziela przesłane pliki od kodu. Możesz rozważyć MinIO jako szybkie, niezawodne i kompatybilne z S3 rozwiązanie.

Jeśli wolisz korzystać z lokalnego magazynu plików, możesz wykorzystać trwałą przestrzeń dyskową dostępną w Twojej instancji PHP. Jest ona dostępna pod ścieżką /persistent/storage/.

Na przykład, aby zapisać przesłany plik, użyj funkcji move_uploaded_file w następujący sposób:

move_uploaded_file($_FILES['image']['tmp_name'], '/persistent/storage/image.jpg');

Więcej informacji o przesyłaniu plików w PHP znajdziesz w oficjalnej dokumentacji: https://www.php.net/manual/en/features.file-upload.php.

UWAGA: Zawsze przechowuj dane w folderze /persistent/storage/.

Jeśli Twoja instancja zostanie zrestartowana lub wypchniesz zmiany w kodzie, wszystkie dane zapisane poza trwałą przestrzenią dyskową mogą zostać utracone.