PHP: Erste Schritte

Wie Sie mit PHP auf Stackhero starten

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite PHP-Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekunden mit einem einfachen git push.
  • Verwenden Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie beruhigende automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
  • Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die PHP-Cloud-Hosting-Lösung von Stackhero auszuprobieren!

Ihre PHP-Anwendung auf Stackhero bereitzustellen ist sowohl einfach als auch leistungsstark. In nur wenigen Schritten ist Ihr Projekt online und einsatzbereit. Diese Anleitung führt Sie Schritt für Schritt durch das Erstellen, Konfigurieren und Bereitstellen Ihres PHP-Services auf eine benutzerfreundliche Weise.

Zu Beginn können Sie einen PHP-Service direkt über das Stackhero-Dashboard erstellen. Die Benutzeroberfläche ist darauf ausgelegt, diesen Vorgang schnell und unkompliziert zu gestalten.

Bevor Sie starten, stellen Sie sicher, dass Sie folgende Tools eingerichtet haben:

  1. Git. Sie können es unter https://git-scm.com/downloads herunterladen.
  2. Windows Terminal (optional für Windows-Nutzer). Dieses Terminal bietet eine verbesserte Benutzererfahrung und ist über den Microsoft Store verfügbar.

Die wichtigste Konfiguration ist Ihr SSH Public Key. Sie können Ihren Public Key mit einem der folgenden Befehle abrufen:

cat ~/.ssh/id_rsa.pub

oder

cat ~/.ssh/id_ed25519.pub

Falls Sie noch kein SSH-Schlüsselpaar besitzen, können Sie eines mit ssh-keygen unter Linux und macOS oder ssh-keygen.exe unter Windows generieren.

Sobald Sie Ihren Public Key haben, gehen Sie ins Stackhero-Dashboard, wählen Sie Ihren PHP-Service, navigieren Sie zur Konfigurationsseite und fügen Sie Ihren Schlüssel in das dafür vorgesehene Feld ein.

Tip: Wenn Sie Ihren SSH Public Key für alle zukünftigen Services global hinterlegen möchten, können Sie dies tun. Klicken Sie einfach oben rechts im Dashboard auf Ihr Profilbild, gehen Sie zu "Ihr Profil" und fügen Sie dort Ihren SSH Public Key ein.

Um Ihnen den Einstieg zu erleichtern, haben wir eine Beispiel-PHP-Anwendung vorbereitet. Sie können das Repository mit folgendem Befehl klonen:

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

Stackhero macht das Deployment Ihrer Anwendung via Git besonders einfach. Kopieren Sie den git remote-Befehl, der auf der Übersichtsseite Ihres PHP-Services im Dashboard angezeigt wird. Er sieht etwa so aus:

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

Sie sind nun bereit, Ihre Anwendung zu deployen. Sie können Ihren Code mit folgendem Befehl pushen:

git push stackhero main

Beim ersten Push werden Sie aufgefordert, den Key-Fingerprint zu akzeptieren. Geben Sie einfach "yes" ein, wenn Sie dazu aufgefordert werden. Nach kurzer Zeit sollte Ihre Anwendung online sein. Den Status können Sie über die im Stackhero-Dashboard angegebene URL prüfen (in der Regel https://<XXXXXX>.stackhero-network.com).

Um Ihre Anwendung zu aktualisieren, ändern Sie einfach die Datei www/index.php (oder eine andere gewünschte Datei) und deployen Sie Ihre Änderungen erneut mit:

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

Wenn Sie bereits eine PHP-Anwendung haben, die Sie deployen möchten, müssen Sie lediglich das Remote-Repository zu Ihrem Projekt hinzufügen (siehe Remote-Repository-Server konfigurieren). Anschließend können Sie Ihre Änderungen wie gewohnt pushen:

git push stackhero main

Standardmäßig sucht Stackhero Ihren PHP-Code und statische Dateien im Verzeichnis www. Wenn beispielsweise jemand yourdomain.com/myphoto.jpg aufruft, wird die Datei aus www/myphoto.jpg ausgeliefert. Falls Ihre Anwendung ein anderes öffentliches Verzeichnis verwendet, können Sie diese Einstellung in der Konfiguration Ihres PHP-Services anpassen.

Falls Sie beim Deployment auf folgenden Fehler stoßen:

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.

Diese Meldung bedeutet, dass das Remote-Git-Repository Änderungen enthält, die in Ihrer lokalen Kopie nicht vorhanden sind. Wenn Sie sicher sind, dass Sie das Remote-Repository mit Ihrer lokalen Version überschreiben möchten, können Sie den Push erzwingen mit:

git push -f stackhero main

Wenn Sie diesen Fehler sehen:

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

Bedeutet das in der Regel, dass der Branch main lokal nicht existiert. In diesem Fall können Sie stattdessen den Branch master pushen:

git push stackhero master

Wenn Git Everything up-to-date meldet und Sie Ihre Änderungen nicht deployed sehen, haben Sie vermutlich vergessen, Ihre Änderungen zu committen. Sie können das wie folgt beheben:

git add -A .
git commit -m "Ihr Commit-Text"
git push stackhero main

Falls Sie keinen Code geändert haben, aber dennoch ein Deployment auslösen möchten, können Sie einen leeren Commit verwenden:

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

Wenn Sie einen anderen Branch (z.B. production) deployen möchten, verwenden Sie:

git push stackhero production:main

Um einen bestimmten Tag (wie v1.0) zu deployen, führen Sie aus:

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

Das ^{} stellt sicher, dass der Commit, auf den sich der Tag bezieht, korrekt gepusht wird.

Wenn Sie einen bestimmten Commit deployen möchten, ermitteln Sie zunächst dessen Hash mit git log. Anschließend können Sie diesen Commit mit folgendem Befehl erzwingen:

git push -f stackhero <HASH>:main

Es ist üblich, separate Services für verschiedene Umgebungen wie Produktion und Staging zu betreiben. Sie können dies verwalten, indem Sie Remote-Repositories umbenennen und hinzufügen.

Um Ihr aktuelles Remote von stackhero in stackhero-staging umzubenennen, führen Sie aus:

git remote rename stackhero stackhero-staging

Erstellen Sie anschließend über das Dashboard einen neuen PHP-Service für die Produktion und fügen Sie ihn hinzu mit:

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

Nun können Sie in die gewünschte Umgebung deployen mit:

git push stackhero-production main

oder

git push stackhero-staging main

Wenn Sie auf macOS arbeiten und bei jedem Push nach dem Passwort Ihres SSH-Keys gefragt werden, müssen Sie das Passwort nicht aus dem Key entfernen. Sie können das Passwort sicher im macOS-Schlüsselbund speichern. Führen Sie dazu einfach aus:

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

Danach wird macOS beim Pushen Ihres Codes nicht mehr nach dem Passwort fragen.

Für Produktions- und Staging-Umgebungen ist es wichtig, sensible Daten wie Tokens und Passwörter sicher zu speichern. Anstatt Secrets im Repository zu hinterlegen, empfiehlt es sich, Umgebungsvariablen zu verwenden. Sie können diese Variablen im Stackhero-Dashboard hinzufügen und dann in Ihrem Code darauf zugreifen. Wenn Sie beispielsweise eine Umgebungsvariable namens mySecret anlegen, können Sie sie in PHP so abrufen:

getenv("mySecret")

Wenn Sie Ihren Code pushen, lesen die Stackhero-Deploymentskripte Ihre composer.json und installieren automatisch alle dort angegebenen Abhängigkeiten mit Composer.

Wenn Ihre Anwendung Dateien speichern muss (z.B. von Nutzern hochgeladene Fotos), empfiehlt es sich häufig, eine Object Storage-Lösung zu verwenden. Damit können Sie Dateien einfach zwischen mehreren Services teilen und halten Ihre Uploads getrennt vom Anwendungscode. Sie können beispielsweise MinIO als schnelle, zuverlässige und S3-kompatible Lösung nutzen.

Wenn Sie lieber lokalen Speicher verwenden möchten, steht Ihnen der persistente Speicher Ihrer PHP-Instanz zur Verfügung. Dieser ist unter /persistent/storage/ erreichbar.

Um beispielsweise eine hochgeladene Datei zu speichern, können Sie die Funktion move_uploaded_file wie folgt verwenden:

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

Weitere Informationen zum Datei-Upload in PHP finden Sie in der offiziellen Dokumentation: https://www.php.net/manual/en/features.file-upload.php.

ACHTUNG: Speichern Sie Ihre Daten immer im Verzeichnis /persistent/storage/.

Wenn Ihre Instanz neu startet oder Sie Code-Änderungen pushen, können alle außerhalb des persistenten Speichers abgelegten Daten verloren gehen.