Dateien, Konsole und Cron
SFTP
Der Tab Dateizugriff zeigt Host, Port und deinen Benutzernamen. Das Passwort wird einmal angezeigt, direkt nachdem du es gesetzt hast, und danach nie wieder.
| Feld | Wert |
|---|---|
| Host | sftp.itsh.dev |
| Port | 2222 |
| Benutzername | Steht im Tab, einer pro Website |
| Authentifizierung | Nur Passwort |
Port 2222, nicht 22. Die meisten Clients nehmen 22 als Standard, und auf diesem Host antwortet dieser Port mit einem anderen Dienst. Du bekommst also eine Hostkey-Warnung oder eine abgelehnte Anmeldung statt eines Timeouts. Wird dein Passwort abgelehnt und steht der Port noch auf 22, ist es ein Port-Problem und kein Passwort-Problem.
Jeder SFTP-Client funktioniert. FileZilla, Cyberduck und WinSCP sind die üblichen, und aus dem Terminal:
sftp -P 2222 <dein-benutzername>@sftp.itsh.devEs gibt keine SSH-Keys und keine Shell
Der Zugang authentifiziert sich per Passwort. Es gibt keine Stelle, an der du einen Public Key hinterlegst, und ssh auf denselben Host bringt dir nichts: der Zugang hat keine Shell. Einzelne Befehle laufen über die Konsole weiter unten.
Setz oder ersetz das Passwort mit Passwort zurücksetzen im selben Tab. Es warnt vorher:
Aktuelle SFTP-Sitzungen werden beendet. Fortfahren?Ein langer Upload kann abbrechen, ohne dass du etwas getan hast
Der SFTP-Endpunkt startet neu, sobald sich Zugangsdaten ändern. Das dauert ein paar Sekunden und trennt Verbindungen, die in diesem Moment offen sind. Dein eigenes Zurücksetzen ist eine Ursache, aber nicht die einzige. Ein Upload über mehrere Gigabyte kann also mittendrin sterben, ohne dass du den Grund siehst.
Nimm einen Client, der fortsetzt statt neu anzufangen, und prüf, ob der Upload wirklich durchgelaufen ist.
Wo deine Dateien landen
Nach dem Verbinden stehst du ganz oben in deinem eigenen Bereich. Darin:
site/
public_html/ <- alles hier wird im Web ausgeliefertNur public_html wird ausgeliefert. Eine Datei daneben, nicht darin, bleibt erhalten und ist für deinen Code lesbar. Genau dorthin gehören Konfiguration, Bibliotheken und alles andere, was nicht herunterladbar sein darf.
Eine leere Website liefert eine Platzhalterseite mit dem Text Your site is ready aus. Die zu sehen heißt, dass die Website funktioniert und das Document Root leer ist, nicht dass etwas schiefgegangen ist.
Manche Pfade erreichen deine Dateien nie
/healthz ist auf jeder Website reserviert und antwortet immer mit ok. Jeder Pfad, der mit einem Punkt beginnt, etwa /.env oder /.git/config, wird unter nginx mit 403 abgelehnt.
Konsole
Der Tab Konsole führt einen einzelnen Befehl gegen deine Website aus und streamt die Ausgabe zurück. Es ist keine Shell-Sitzung: jeder Lauf ist eigenständig, zwischen den Läufen wird nichts gemerkt, und es gibt kein Arbeitsverzeichnis, das bestehen bleibt.
composer install --no-dev
wp core update
php artisan migrateEin Auswahlfeld bietet fertige Befehle für WordPress, Laravel, Flarum, Drupal und Composer an.
Verfügbar: php, composer, wp (WP-CLI), git, unzip, bash. Alles, was dein Projekt selbst unter vendor/bin installiert, funktioniert ebenfalls. Die PHP-Extensions sind dieselben, mit denen die Website läuft.
| Grenze | Wert |
|---|---|
| Gleichzeitige Befehle pro Website | 1 |
| Länge des Befehls | 4096 Zeichen |
| Laufzeit | 10 Minuten, dann wird der Befehl beendet |
| Ausgabe aufbewahrt | Etwa 1 Stunde |
Startest du einen zweiten Befehl, während einer läuft, bekommst du:
a command is already running for this siteWarte entweder ab oder nutz Stoppen.
Befehle laufen in /app/public_html, also derselben Stelle wie public_html über SFTP. Setz Arbeitsverzeichnis, um darunter zu arbeiten. Etwas anderes nimmt das Feld nicht:
invalid working directory: working_dir must be /app/public_html or a subdirectoryDie Konsole läuft neben deiner Website, nicht in ihr
Jeder Befehl bekommt einen eigenen kurzlebigen Container mit deinen Dateien und deinen Datenbank-Zugangsdaten. Deine Website liefert währenddessen weiter aus, und ein abstürzender Befehl reißt sie nicht mit. Umgekehrt kann ein Befehl deine Website nicht neu starten: dafür gibt es Website neu starten unter Aktionen.
Die Datenbank-Zugangsdaten stehen in der Umgebung, du musst sie also nicht eintippen:
php -r 'echo getenv("DB_NAME"), PHP_EOL;'Cron
Der Tab Cron plant wiederkehrende Befehle. Gleiche Umgebung wie die Konsole, gleiche Dateien, gleiche Werkzeuge.
Zeitpläne haben fünf Felder und laufen in UTC
Minute Stunde Tag-im-Monat Monat Wochentag*/15 * * * * und 30 4 * * 1 gehen. Alles andere nicht:
- Kein Sekundenfeld. Ausdrücke mit sechs Feldern werden abgelehnt.
- Keine Kurzform.
@daily,@hourlyund der Rest werden abgelehnt. - Immer UTC.
0 3 * * *läuft um 03:00 UTC, also je nach Jahreszeit um 04:00 oder 05:00 in Deutschland. Die PHP-Zeitzone der Website ändert daran nichts.
Ein Zeitplan, den der Parser nicht lesen kann, wird beim Speichern abgelehnt:
Ungültiger ZeitplanGrenzen
| Grenze | Wert |
|---|---|
| Cron-Jobs pro Website | 5 |
| Cron-Jobs pro Konto | 30 |
| Zeitlimit | 300 Sekunden als Standard, 10 bis 3600 erlaubt |
| Laufhistorie | 3 erfolgreiche und 3 fehlgeschlagene Läufe, 24 Stunden aufbewahrt |
Maximal 5 Cron-Jobs pro Website.
Maximal 30 Cron-Jobs pro Konto erreicht.Der Name ist ein kurzer Slug und lässt sich nach dem Anlegen nicht mehr ändern:
Name muss mit einem Kleinbuchstaben beginnen und darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten (max. 31 Zeichen).Was bei einem Lauf passiert
Jeder Lauf erscheint unter Läufe mit seinem Exit-Code, und Ausgabe zeigt, was er ausgegeben hat. Verschickt wird nichts.
- Ein fehlgeschlagener Lauf wird nicht wiederholt. Der nächste geplante Lauf ist die Wiederholung, ein täglicher Job verliert damit einen Tag.
- Überlappende Läufe werden standardmäßig übersprungen. Mit dem Standard
Forbidwird ein Lauf, der startet, während der vorige noch läuft, verworfen und nicht eingereiht.Allowlässt sie überlappen,Replacebeendet den vorigen. - Ein verpasstes Zeitfenster wird nicht nachgeholt. Konnte innerhalb von 30 Sekunden nach dem geplanten Zeitpunkt nichts starten, entfällt dieser Lauf.
- Ausgaben verschwinden nach 24 Stunden. Was du behalten willst, schreib in eine Datei in deinem eigenen Verzeichnis.
Weiter
- Datenbanken für Zugangsdaten und Verbindungslimits
- Backups und Wiederherstellung, bevor du eine Migration ausführst