Symfony Projekt per FTP deployen
Nachdem ich das vergangene Wochenende damit verbracht habe, meinen PC und Strato grundlos zu beschimpfen, habe ich es am Ende doch noch geschafft. Auf meinem simplen „Power Web Basic“ Account bei Strato ist jetzt ein Symfony-Projekt installiert und voll funktionsfähig. Hier eine kleine Anleitung um ein Syfmony Projekt per FTP zu deployen.
Aufgrund des Alters dieses Beitrags und der Weiterentwicklung des Frameworks ist dieser Guide mit Vorsicht zu genießen!
Voraussetzungen checken
- eine Liste für die Voraussetzungen der aktuellen Symfony Version findet man hier.
- zusätzlich sollte man den
/var
sowie den/web
Ordner auf das gewünschte Zielsystem hochladen und dann dieweb/config.php
mit dem Browser aufrufen. - Außerdem ist es sinnvoll, die benötigten Datenbanken bereits zu erstellen und (wenn nötig) mit Daten anzureichern.
Das Projekt lokal vorbereiten
In der offiziellen Dokumentation von Symfony gibt es auch einen Artikel, der das Deployen auf einen simplen FTP beschreibt. Neben allen anderen Methoden, ist diese allerdings am „unsichersten“.
Das Projekt wird mit Hilfe des Composers zusammengestellt, daher bestand mein erster Versuch darin, das Projekt lokal fertigzustellen, um es dann einfach hochzuladen. So hatte Symfony die externe Datenbank nicht erreichen können (in der parameters.yml
waren die falschen Credentials eingetragen).
Der nächste Versuch bestand darin, die nötigen Daten hochzuladen und den Composer auf der Maschine von Strato auszuführen. Dieser Versuch hat letztendlich auch funktioniert, es lagen nur einige kleine Steinchen auf dem Weg dorthin, über die man leicht stolpern kann.
Der Ablauf
Nachdem das Projekt hochgeladen, die parameters.yml
angepasst und der Cache geleert ist, kann es eigentlich losgehen. Neben einer Verbindung zum Filesystem per FTP (z.B. mit Filezilla) wird aber noch eine SSH-Verbindung zum Server (z.B. via Putty oder FireSSH) benötigt. Strato bietet diese Voraussetzungen auch in den günstigen Paketen an.
Hochgeladen werden müssen die Verzeichnisse /app
, /bin
, /src
, /var
und /web
sowie die composer.phar
, die dazugehörige composer.json
und die composer.lock
in ein beliebiges leeres Verzeichnis. Das Zielverzeichnis muss also nicht der Server-Root sein.
Ist das erledigt setzt man als nächstes alle Zugriffsberechtigungen für alle Verzeichnisse und Dateien auf 755, also rwxr-xr-x
.
Bis hier hin war Filezilla hinreichend, nun geht’s weiter auf dem Kommandozeile: Hat man sich erfolgreich per SSH auf dem Server angemeldet, wechselt man in das Zielverzeichnis. Von hier werden alle Befehle ausgeführt. Zuerst sollte man jedoch die aktuelle Shell überprüfen, gebraucht wird die Bash-Shell! Danach müssen alle Vendor-Packete installiert werden. Wie auch lokal erledigt man das mit dem Befehl php composer.phar install
.
Ist dies erledigt, wurde Symfony bereits vollständig installiert, jedoch nur im development
-Modus und genau dieser darf nicht auf einen Live-Server! Um Symfony mitzuteilen, dass man nur noch im Produktivmodus arbeiten möchte, muss die Umgebungsvariable SYMFONY_ENV
auf den Wert ‚prod‘ gesetzt werden. Dies wird wieder mit dem Composer erreicht:
SYMFONY_ENV=prod php composer.phar install --no-dev --optimize-autoloader
Falls keine Fehler aufgetreten sind, ist man fertig! Das waren alle Schritte um ein Syfmony Projekt per FTP zu deployen. Jetzt noch testen, ob alles korrekt funktioniert.
Von Update zu Update
Ab und zu kommt es vor, dass Änderungen nach dem Upload nicht direkt wirksam werden. Was ist Schuld daran? Ganz einfach: Der Cache! Und den kann man löschen.
Mit SSH auf den Server verbinden und im Symfony-Root php bin/console cache:clear --env=prod
ausführen. Alternativ kann man auch den Ordner var/cache/prod
direkt löschen. Hier muss man allerdings nach dem ersten Aufruf die Zugriffsrechte kontrollieren!