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!

Wdrażanie PHP na Stackhero jest proste i potężne. W kilku krokach możesz mieć swoją aplikację online. Ten przewodnik przeprowadzi Cię przez tworzenie, konfigurowanie i wdrażanie usługi PHP w przyjazny, krok po kroku sposób.

Rozpocznij od utworzenia usługi PHP na Stackhero za pośrednictwem panelu. Intuicyjny interfejs sprawia, że proces jest szybki i efektywny.

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

  1. Git. Możesz go pobrać z https://git-scm.com/downloads.
  2. Użytkownicy Windows mogą uznać, że Windows Terminal oferuje lepsze doświadczenie. Możesz go pobrać ze sklepu Microsoft Store.

Jedynym ustawieniem, które musisz dostosować w konfiguracji usługi, jest klucz publiczny SSH. Możesz uzyskać swój klucz publiczny, używając jednej z następujących komend:

cat ~/.ssh/id_rsa.pub

lub

cat ~/.ssh/id_ed25519.pub

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

Po uzyskaniu klucza publicznego przejdź do panelu Stackhero, wybierz swoją usługę PHP, przejdź do strony konfiguracji i wklej swój klucz w odpowiednie pole.

Wskazówka: Możesz zdefiniować swój klucz publiczny SSH globalnie, aby przyszłe usługi automatycznie go uwzględniały. Aby to zrobić, kliknij swoje zdjęcie profilowe w prawym górnym rogu panelu, wybierz 'Twój profil' i wklej swój klucz publiczny SSH.

Przygotowano prostą aplikację PHP, aby pokazać, jak działa na Stackhero. Aby rozpocząć, sklonuj repozytorium za pomocą następujących komend:

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

Stackhero upraszcza wdrażanie aplikacji za pomocą Git. Skopiuj wartość podaną przez komendę git remote z pierwszej strony swojej usługi PHP w panelu. Komenda będzie wyglądać podobnie do tej:

git remote add stackhero ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Teraz nadszedł czas, aby wdrożyć swoją aplikację. Wypchnij swój kod za pomocą następującej komendy:

git push stackhero main

Za pierwszym razem, gdy wypchniesz, zostaniesz poproszony o zaakceptowanie odcisku klucza. Wpisz "yes", gdy zostaniesz o to poproszony. Po krótkim czasie Twoja aplikacja powinna być online. Możesz sprawdzić jej status, odwiedzając URL podany na panelu Stackhero (zwykle coś w stylu https://XXXXX.stackhero-network.com).

Aby zaktualizować swoją aplikację, zmodyfikuj plik www/index.php według potrzeb i ponownie wdroż swoje zmiany za pomocą:

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

Jeśli masz istniejącą aplikację PHP, możesz łatwo ją wdrożyć, dodając zdalne repozytorium do swojego projektu (zobacz Skonfiguruj zdalny serwer repozytorium). Następnie wypchnij swoje zmiany za pomocą:

git push stackhero main

Domyślnie katalog publiczny jest ustawiony na "www". To tutaj wykonywany jest Twój kod PHP (w tym index.php) i przechowywane są Twoje pliki statyczne. Na przykład, odwiedzając yourdomain.com/myphoto.jpg, pobierasz plik z www/myphoto.jpg. Możesz zaktualizować ten katalog w konfiguracji swojej usługi PHP, jeśli to konieczne.

Jeśli napotkasz błąd taki jak poniżej podczas wdrażania:

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 błąd wskazuje, że zdalne repozytorium Git zawiera zmiany, które nie są obecne w Twoim lokalnym repozytorium. Aby bezpiecznie nadpisać te zmiany, możesz wymusić wypchnięcie za pomocą:

git push -f stackhero main

Jeśli zobaczysz ten 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'

Oznacza to, że gałąź main nie istnieje lokalnie. W takim przypadku spróbuj wypchnąć gałąź master zamiast tego:

git push stackhero master

Jeśli Git odpowiada Everything up-to-date, a Twoje zmiany nie są wdrożone, mogłeś zapomnieć zatwierdzić swoje zmiany. Aby to rozwiązać, uruchom:

git add -A .
git commit -m "Your commit message"
git push stackhero main

Jeśli nie zmieniłeś żadnego kodu, ale nadal chcesz wywołać wdrożenie, możesz wymusić aktualizację za pomocą pustego zatwierdzenia:

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

Jeśli chcesz wdrożyć gałąź inną niż main (na przykład gałąź o nazwie "production"), możesz użyć następującej komendy:

git push stackhero production:main

Aby wdrożyć konkretny tag (na przykład tag "v1.0"), użyj:

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

Składnia ^{} zapewnia, że commit związany z tagiem jest poprawnie wypchnięty.

Jeśli musisz wdrożyć konkretny commit, najpierw uzyskaj jego hash za pomocą git log. Następnie wymuś wypchnięcie tego commitu za pomocą:

git push -f stackhero <HASH>:main

Często możesz mieć oddzielne usługi dla różnych środowisk, takich jak produkcja i staging. Możesz nimi zarządzać, zmieniając nazwy i dodając zdalne repozytoria.

Aby zmienić nazwę swojego obecnego zdalnego repozytorium z stackhero na stackhero-staging, użyj:

git remote rename stackhero stackhero-staging

Następnie utwórz nową usługę PHP dla produkcji za pośrednictwem panelu i dodaj ją za pomocą:

git remote add stackhero-production ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Teraz możesz wdrożyć do odpowiedniego środowiska, używając albo:

git push stackhero-production main

lub

git push stackhero-staging main

Na macOS możesz być proszony o hasło do klucza za każdym razem, gdy wypychasz swój kod. Zamiast usuwać hasło z klucza SSH, możesz przechowywać hasło do klucza w pęku kluczy macOS. To podejście utrzymuje bezpieczeństwo, jednocześnie oszczędzając czas. Uruchom następującą komendę, aby dodać swój klucz do pęku kluczy:

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

Po skonfigurowaniu macOS nie będzie już pytać o hasło do klucza podczas wypychania kodu.

Dla środowisk produkcyjnych i stagingowych istotne jest bezpieczne przechowywanie danych wrażliwych, takich jak tokeny i hasła. Zamiast kodować sekrety w repozytorium, rozważ użycie zmiennych środowiskowych. Możesz dodać te zmienne na panelu Stackhero i uzyskać do nich dostęp w swoim kodzie. Na przykład, jeśli utworzysz zmienną środowiskową o nazwie "mySecret", możesz uzyskać jej wartość w PHP za pomocą:

getenv("mySecret")

Gdy wypychasz swój kod, skrypty wdrożeniowe odczytują Twój plik composer.json i automatycznie instalują wszystkie określone zależności za pomocą Composer.

Jeśli Twoja aplikacja musi przechowywać pliki (na przykład zdjęcia użytkowników), zaleca się użycie rozwiązania do przechowywania obiektów. To podejście nie tylko ułatwia udostępnianie plików między wieloma usługami, ale także oddziela przesłane pliki od Twojego kodu. Zalecamy zapoznanie się z MinIO jako szybkim, niezawodnym i zgodnym z S3 rozwiązaniem.

Alternatywnie, jeśli wolisz lokalne przechowywanie plików, możesz użyć trwałego magazynu dostarczanego z Twoją instancją PHP. Ten magazyn znajduje się w katalogu /persistent/storage/.

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

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

Więcej szczegółów na temat przesyłania plików znajdziesz w oficjalnej dokumentacji PHP: https://www.php.net/manual/en/features.file-upload.php.

UWAGA: Nigdy nie przechowuj danych poza folderem /persistent/storage/!

Jeśli Twoja instancja zostanie zrestartowana lub jeśli wypchniesz zmiany w kodzie, wszelkie dane przechowywane poza trwałym magazynem mogą zostać utracone!