Artikel

Deployment von Symfony – Ein umfassender Leitfaden

GitLinuxSymfony

In diesem Beitrag erkläre ich Schritt für Schritt, wie du ein Symfony-Projekt in einer Produktionsumgebung deployen kannst. Wir gehen dabei auf wichtige Aspekte wie Abhängigkeiten, Umgebungsvariablen, Webserver-Konfiguration und Sicherheitsmaßnahmen ein.

1. Voraussetzungen und Vorbereitung

Bevor du dein Projekt in Produktion überführst, solltest du folgende Punkte klären:

  • Server-Zugang: Stelle sicher, dass du per SSH oder einem anderen Remote-Zugriff Zugriff auf deinen Server hast.
  • PHP und Composer: Auf deinem Server sollten die benötigten PHP-Version und Composer installiert sein.
  • Webserver: Konfiguriere deinen Webserver (Apache, Nginx o.ä.) so, dass der Document Root auf den public/-Ordner deines Symfony-Projekts zeigt.
  • Datenbank: Richte deine Produktionsdatenbank ein und passe die Zugangsdaten in deiner Konfiguration an.

2. Projekt klonen und Abhängigkeiten installieren

Zunächst klonst du dein Repository auf den Server:

git clone git@github.com:dein-username/dein-projekt.git
cd dein-projekt

Anschließend installierst du die PHP-Abhängigkeiten ohne die Entwicklungs-Pakete und optimierst den Autoloader:

composer install --no-dev --optimize-autoloader

3. Umgebungsvariablen konfigurieren

In der Entwicklung nutzt Symfony typischerweise die .env-Datei. Für die Produktion ist es jedoch empfehlenswert, Umgebungsvariablen außerhalb des Repositories zu verwalten. Auf Shared Hosts, bei denen du keine globalen Umgebungsvariablen setzen kannst, verwendest du stattdessen eine .env.local-Datei.

Beispiel einer .env.local:

APP_ENV=prod
APP_DEBUG=false
APP_SECRET=dein_einzigartiger_geheimer_schluessel
DATABASE_URL="mysql://user:pass@localhost:3306/deinedb?serverVersion=5.7"
MAILER_DSN=smtp://username:password@smtp.example.com:port
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=1

# JWT-Konfiguration (falls verwendet)
JWT_PRIVATE_KEY_PATH=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY_PATH=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE="dein_geheimer_passphrase"

Wichtig:

  • Sorge dafür, dass .env.local in deiner .gitignore eingetragen ist, um sensible Daten nicht ins Repository zu laden.
  • Passe alle Werte (z. B. Datenbank- und Mailer-Daten) an deine Umgebung an.

4. Cache optimieren

Nachdem alle Umgebungsvariablen korrekt gesetzt sind, solltest du den Symfony-Cache für die Produktionsumgebung leeren und neu aufbauen:

php bin/console cache:clear --env=prod --no-debug

5. Assets und Frontend vorbereiten

Falls du Symfony Encore oder ein anderes Build-Tool verwendest, führe den Produktionsbuild aus, um deine CSS-, JavaScript- und Bilddateien zu optimieren:

yarn encore production

Importmap-Assets installieren

Wenn du die Importmap für Frontend-Assets verwendest (z. B. um Stimulus und andere Bibliotheken zu verwalten), führe folgenden Befehl aus, um die benötigten Assets zu installieren:

php bin/console importmap:install

Stelle sicher, dass alle generierten Assets in den public/-Ordner kopiert werden.

6. Webserver-Konfiguration

Dein Webserver (z. B. Apache oder Nginx) muss so konfiguriert sein, dass der public/-Ordner als Document Root dient. Beispiel für eine Nginx-Konfiguration:

server {
    listen 80;
    server_name deine-domain.de;

    root /pfad/zu/deinem/projekt/public;
    index index.php;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

7. Sicherheitsmaßnahmen und weitere Anpassungen

  • Dateiberechtigungen: Stelle sicher, dass der Webserver Schreibrechte für var/cache und var/log besitzt.
  • SSL: Richte HTTPS über ein SSL-Zertifikat ein, um die Datenübertragung zu sichern.
  • Authentifizierung: Achte darauf, dass sensible Endpunkte, wie z. B. API-Routen, entsprechend abgesichert sind.

8. Weitere Tipps für den Produktionsbetrieb

  • Deployment-Tool: Überlege den Einsatz von Deployment-Tools wie Deployer oder Capistrano, um den Veröffentlichungsprozess zu automatisieren.
  • Monitoring: Implementiere ein Monitoring, um Server- und Anwendungsperformance im Blick zu behalten.
  • Backup: Plane regelmäßige Backups deiner Datenbank und wichtigen Dateien.

Mit diesen Schritten solltest du in der Lage sein, dein Symfony-Projekt sicher und effizient in einer Produktionsumgebung zu betreiben. Solltest du während des Deployments auf Probleme stoßen, lohnt sich oft ein Blick in die offizielle Symfony-Dokumentation zum Deployment für weiterführende Hinweise und Best Practices.

Viel Erfolg beim Deployment deines Projekts!

0 Kommentare