Bereitstellen einer Symfony 4-Anwendung für die Produktion mit LEMP unter Ubuntu 18.04

Der Autor hat Software in the Public Interest Inc ausgewählt, um eine Spende als Teil der https://do.co/ zu erhalten. w4do-cta [Write for DOnations] Programm.

Einführung

https://symfony.com [Symfony] ist ein Open-Source-PHP-Framework mit einer eleganten Struktur und dem Ruf, ein geeignetes Framework zu sein, um ein Projekt unabhängig von seiner Größe zu starten. Aufgrund seiner Flexibilität, Architektur und hohen Leistung ist es als Satz wiederverwendbarer Komponenten die erste Wahl für die Erstellung einer hochkomplexen Unternehmensanwendung.

In diesem Lernprogramm stellen Sie eine vorhandene Symfony 4-Standardanwendung mit einem LEMP-Stapel (Nginx, MySQL und PHP) unter Ubuntu 18.04 für die Produktion bereit, um mit der Konfiguration des Servers und der Struktur des Frameworks zu beginnen. Nginx ist ein beliebter Open-Source-Hochleistungs-HTTP-Server mit zusätzlichen Funktionen, einschließlich Reverse-Proxy-Unterstützung. Es hat einen guten Ruf und beherbergt einige der größten und am höchsten frequentierten Websites im Internet. Wenn Sie stattdessen Ihre eigene Symfony-Anwendung bereitstellen, müssen Sie abhängig von der vorhandenen Struktur Ihrer Anwendung möglicherweise zusätzliche Schritte ausführen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

Schritt 1 - Erstellen eines Benutzers und einer Datenbank für die Anwendung

Durch Befolgen der Anweisungen in den Voraussetzungen verfügen Sie nun über alle grundlegenden Serverabhängigkeiten, die für die Anwendungsinstallation erforderlich sind. Da für jede dynamische Webanwendung eine Datenbank erforderlich ist, erstellen Sie in diesem Abschnitt einen Benutzer und konfigurieren eine Datenbank für die Anwendung ordnungsgemäß.

Um eine MySQL-Datenbank für unsere Anwendung und einen damit verbundenen Benutzer zu erstellen, müssen Sie über das MySQL-Root-Konto auf den MySQL-Client zugreifen:

mysql -u root -p

Geben Sie das entsprechende Passwort ein, das auch beim Ausführen von "+ mysql_secure_installation +" verwendet werden soll.

Als nächstes erstellen Sie die Anwendungsdatenbank mit:

CREATE DATABASE blog;

In der Konsole wird die folgende Ausgabe angezeigt:

OutputQuery OK, 1 row affected (0.00 sec)

Sie haben Ihre Anwendungsdatenbank erfolgreich erstellt. Sie können jetzt einen MySQL-Benutzer erstellen und ihm Zugriff auf die neu erstellte Datenbank gewähren.

Führen Sie den folgenden Befehl aus, um einen MySQL-Benutzer und ein Kennwort zu erstellen. Sie können den Benutzernamen und das Passwort auf Wunsch in etwas Sichereres ändern:

CREATE USER  @'localhost' IDENTIFIED BY ;

Sie werden die folgende Ausgabe sehen:

OutputQuery OK, 0 rows affected (0.00 sec)

Derzeit verfügt der Benutzer * blog-admin * nicht über die richtigen Berechtigungen für die Anwendungsdatenbank. Selbst wenn * blog-admin * versucht, sich mit ihrem Passwort anzumelden, können sie die MySQL-Shell nicht erreichen.

Ein Benutzer benötigt die richtige Berechtigung, um auf eine bestimmte Aktion in einer Datenbank zugreifen oder diese ausführen zu können. Verwenden Sie den folgenden Befehl, um dem Benutzer * blog-admin * vollständigen Zugriff auf die * blog * -Datenbank zu gewähren:

GRANT ALL PRIVILEGES ON blog.* TO @'localhost';

Sie werden die folgende Ausgabe sehen:

OutputQuery OK, 0 rows affected (0.00 sec)

Der * blog-admin * hat jetzt alle Berechtigungen für alle Tabellen in der * blog * -Datenbank. Um die Grant-Tabellen erneut zu laden und Änderungen anzuwenden, müssen Sie eine Operation zum Löschen von Berechtigungen mit der Anweisung flush ausführen:

FLUSH PRIVILEGES;

Sie werden die folgende Ausgabe sehen:

OutputQuery OK, 0 rows affected (0.00 sec)

Sie haben nun einen neuen Benutzer erstellt und Berechtigungen erteilt. Um zu testen, ob Sie auf dem richtigen Weg sind, beenden Sie den MySQL-Client:

quit;

Melden Sie sich erneut mit den Anmeldeinformationen des gerade erstellten MySQL-Benutzers an und geben Sie das Kennwort ein, wenn Sie dazu aufgefordert werden:

mysql -u  -p

Stellen Sie sicher, dass der Benutzer auf die Datenbank zugreifen kann mit:

SHOW DATABASES;

Sie sehen die "+ blog +" - Tabelle in der Ausgabe:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
+--------------------+
2 rows in set (0.00 sec)

Beenden Sie abschließend den MySQL-Client:

quit;

Sie haben erfolgreich eine Datenbank erstellt, einen Benutzer für die Demoanwendung, und dem neu erstellten Benutzer die Berechtigung zum Zugriff auf die Datenbank erteilt. Sie können jetzt die Demo-Anwendung einrichten.

Schritt 2 - Einrichten der Demo-Anwendung

Um dieses Tutorial einfach zu halten, stellen Sie eine Blog-Anwendung bereit, die mit Symfony erstellt wurde. Mit dieser Anwendung kann ein authentifizierter Benutzer einen Blogeintrag erstellen und in der Datenbank speichern. Darüber hinaus kann der Anwendungsbenutzer alle mit einem Autor verknüpften Posts und Details anzeigen.

Der Quellcode der Bloganwendung, die Sie in diesem Lernprogramm bereitstellen, lautet on GitHub. Sie werden Git verwenden, um den Quellcode der Anwendung von GitHub abzurufen und in einem neuen Verzeichnis zu speichern.

Erstellen Sie zunächst ein Verzeichnis, das als Stammverzeichnis für Ihre Anwendung dient. Führen Sie daher den folgenden Befehl in der Konsole aus, um ein neues Verzeichnis mit dem Namen "+ symfony-blog +" zu erstellen:

sudo mkdir -p /var/www/symfony-blog

Um mit den Projektdateien unter Verwendung eines Nicht-Root-Benutzerkontos zu arbeiten, müssen Sie den Ordnereigner und die Gruppe folgendermaßen ändern:

sudo chown : /var/www/symfony-blog

Ersetzen Sie * sammy * durch Ihren sudo-Benutzernamen ohne Rootberechtigung.

Jetzt können Sie in das übergeordnete Verzeichnis wechseln und die Anwendung auf GitHub klonen:

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

Sie sehen die folgende Ausgabe:

OutputCloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

Die Demo-Anwendung ist nun eingestellt. Im nächsten Schritt konfigurieren Sie die Umgebungsvariablen und installieren die erforderlichen Abhängigkeiten für das Projekt.

Schritt 3 - Konfigurieren Ihrer Umgebungsvariablen für die Anwendung

Um die Anwendung vollständig einzurichten, müssen Sie die Projektabhängigkeiten installieren und die Anwendungsparameter ordnungsgemäß konfigurieren.

Standardmäßig wird die Symfony-Anwendung in einem Entwicklungsmodus ausgeführt, der ein sehr detailliertes Protokoll zum Debuggen enthält. Dies trifft nicht auf das zu, was Sie in diesem Lernprogramm tun, und ist keine gute Praxis für eine Produktionsumgebung, da dies zu einer Verlangsamung und zum Erstellen sehr großer Protokolldateien führen kann.

Symfony muss sich bewusst sein, dass Sie die Anwendung in einer Produktionsumgebung ausführen. Sie können dies einrichten, indem Sie entweder eine + .env + - Datei mit Variablendeklarationen erstellen oder Umgebungsvariablen direkt erstellen. Da Sie auch die Datei "+ .env " verwenden können, um Ihre Datenbankanmeldeinformationen für diese Anwendung zu konfigurieren, ist dies für Sie sinnvoller. Ändern Sie Ihr Arbeitsverzeichnis in das geklonte Projekt und erstellen Sie die Datei ` .env +` mit:

cd symfony-blog
sudo nano .env

Fügen Sie der Datei die folgenden Zeilen hinzu, um die Produktionsanwendungsumgebung zu konfigurieren:

env
APP_ENV=prod
APP_DEBUG=0

"+ APP_ENV " ist eine Umgebungsvariable, die angibt, dass sich die Anwendung in der Produktion befindet, während " APP_DEBUG +" eine Umgebungsvariable ist, die angibt, ob die Anwendung im Debug-Modus ausgeführt werden soll oder nicht. Sie haben es vorerst auf false gesetzt.

Speichern Sie die Datei und beenden Sie den Editor.

Installieren Sie als Nächstes eine PHP-Erweiterung, mit der Symfony-Apps XML verarbeiten:

sudo apt install php7.2-xml

Als nächstes müssen Sie die Projektabhängigkeiten installieren und + composer install ausführen:

cd /var/www/symfony-blog
composer install

Sie haben die Umgebungsvariablen erfolgreich konfiguriert und die erforderlichen Abhängigkeiten für das Projekt installiert. Als Nächstes richten Sie die Datenbankanmeldeinformationen ein.

Schritt 4 - Einrichten der Datenbankanmeldeinformationen

Um Daten aus der zuvor erstellten Anwendungsdatenbank abzurufen, müssen Sie die erforderlichen Datenbankanmeldeinformationen in der Symfony-Anwendung einrichten und konfigurieren.

Öffnen Sie die Datei + .env + erneut:

sudo nano .env

Fügen Sie der Datei den folgenden Inhalt hinzu, damit Sie auf einfache Weise eine Verbindung zur Datenbank herstellen und ordnungsgemäß mit ihr interagieren können. Sie können es direkt nach der Zeile "+ APP_DEBUG = 0 " in der Datei " .env +" hinzufügen:

env
...
DATABASE_URL=mysql://:@localhost:3306/blog

Das Symfony-Framework verwendet eine Drittanbieter-Bibliothek mit dem Namen "http://www.doctrine-project.org/[Doctrine]", um mit Datenbanken zu kommunizieren. Doctrine bietet nützliche Tools, mit denen Sie die Interaktion mit Datenbanken einfach und flexibel gestalten können.

Sie können jetzt Doctrine verwenden, um Ihre Datenbank mit den Tabellen aus der geklonten Github-Anwendung zu aktualisieren. Führen Sie dazu den folgenden Befehl aus:

php bin/console doctrine:schema:update --force

Sie sehen die folgende Ausgabe:

OutputUpdating database schema...
   4 queries were executed
[OK] Database schema updated successfully!

Nachdem Sie die erforderlichen Anmeldeinformationen eingerichtet und das Datenbankschema aktualisiert haben, können Sie jetzt problemlos mit der Datenbank interagieren. Um die Anwendung mit einigen Daten zu starten, laden Sie im nächsten Abschnitt eine Reihe von Dummy-Daten in die Datenbank.

Schritt 5 - Füllen Sie Ihre Datenbank mit Doctrine-Fixtures

Momentan sind die neu erstellten Tabellen leer. Sie füllen es mit doctrine-fixtures. Die Verwendung von Doctrine-Fixtures ist keine Voraussetzung für Symfony-Anwendungen, sondern wird nur zur Bereitstellung von Dummy-Daten für Ihre Anwendung verwendet.

Führen Sie den folgenden Befehl aus, um Testdaten, die die Details eines * Autors * und eines Beispielposts * enthalten, automatisch in die für das Blog erstellte Datenbanktabelle zu laden:

php bin/console doctrine:fixtures:load

Sie erhalten eine Warnung, dass die Datenbank gelöscht wird. Sie können weitermachen und + Y + eingeben:

OutputCareful, database will be purged. Do you want to continue y/N ? y
 > purging database
 > loading App\DataFixtures\ORM\Fixtures

Im nächsten Abschnitt wird der Cache geleert und aufgewärmt.

Schritt 6 - Leeren und Aufwärmen des Caches

Um sicherzustellen, dass Ihre Anwendung schneller geladen wird, wenn Benutzer Anforderungen stellen, empfiehlt es sich, den Cache während der Bereitstellung zu erwärmen. Durch das Aufwärmen des Caches werden Seiten generiert und gespeichert, um später schnellere Antworten zu erhalten, anstatt vollständig neue Seiten zu erstellen. Glücklicherweise verfügt Symfony über einen Befehl zum Löschen des Caches, der auch ein Aufwärmen auslöst. Führen Sie dazu den folgenden Befehl aus:

php bin/console cache:clear

Sie werden die folgende Ausgabe sehen:

OutputClearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

Sie werden die Einrichtung in Kürze abschließen. Alles, was bleibt, ist die Konfiguration des Webservers. Sie werden das im nächsten Abschnitt tun.

Schritt 7 - Konfigurieren des Webservers und Ausführen der Anwendung

Inzwischen haben Sie Nginx installiert, um Ihre Seiten zu bedienen, und MySQL, um Ihre Daten zu speichern und zu verwalten. Sie konfigurieren nun den Webserver, indem Sie einen neuen Anwendungsserverblock erstellen, anstatt den Standardblock zu bearbeiten.

Öffnen Sie einen neuen Serverblock mit:

sudo nano /etc/nginx/sites-available/blog

Fügen Sie der neuen Serverblock-Konfigurationsdatei den folgenden Inhalt hinzu. Stellen Sie sicher, dass Sie das "++" im Serverblock durch Ihre Server-IP-Adresse ersetzen:

/ etc / nginx / sites-available / blog

server {
   listen 80;
   listen [::]:80;

   server_name blog ;
   root /var/www/symfony-blog/public;
   index index.php;
   client_max_body_size 100m;

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

   location ~ \.php {
       try_files $uri /index.php =404;
       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_index index.php;
       include fastcgi_params;
     }

   location ~ /\.(?:ht|git|svn) {
       deny all;
   }
}

Zuerst haben wir die Direktiven "+ listen " für Nginx festgelegt, die standardmäßig an Port " 80 " liegen, und dann den Servernamen so festgelegt, dass er mit den Anforderungen für die IP-Adresse des Servers übereinstimmt. Als nächstes haben wir die Direktiven ` root ` verwendet, um den Dokumentenstamm für das Projekt anzugeben. Die Anwendung " symfony-blog " ist in " / var / www / symfony-blog " gespeichert. Um jedoch den bewährten Methoden zu entsprechen, setzen wir das Web-Stammverzeichnis auf " / var / www / symfony-blog / public " als Nur das Unterverzeichnis " / public +" sollte dem Internet zugänglich gemacht werden. Schließlich haben wir die location-Direktive so konfiguriert, dass sie die PHP-Verarbeitung übernimmt.

Speichern Sie die Datei nach dem Hinzufügen des Inhalts und schließen Sie den Editor.

Um den neu erstellten Serverblock zu aktivieren, müssen wir eine symbolische Verknüpfung von der neuen Serverblock-Konfigurationsdatei im Verzeichnis "+ / etc / nginx / sites-available " zum Verzeichnis " / etc / nginx / sites-enabled +" von erstellen Verwenden Sie den folgenden Befehl:

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

Überprüfen Sie die neue Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes ausführen:

sudo nginx -t

Dieser Befehl gibt Fehler an die Konsole aus, falls vorhanden. Sobald keine Fehler mehr vorliegen, führen Sie diesen Befehl aus, um Nginx neu zu laden:

sudo systemctl reload nginx

Sie haben gerade den letzten Schritt abgeschlossen, der für die erfolgreiche Bereitstellung der Symfony 4-Anwendung erforderlich ist. Sie haben den Webserver konfiguriert, indem Sie einen Serverblock erstellt und den Webstamm ordnungsgemäß festgelegt haben, um die Webanwendung zugänglich zu machen.

Schließlich können Sie die Anwendung jetzt ausführen und testen. Besuchen Sie + http: // + in Ihrem Lieblingsbrowser:

Das folgende Bild ist der Screenshot der Symfony-Blog-Anwendung, den Sie unter der IP-Adresse Ihres Servers sehen sollten:

image: https://assets.digitalocean.com/articles/symfony4-1804/EQQNuIv.png [Alt-Screenshot der Symfony-Blog-Anwendung]

Fazit

Symfony ist ein funktionsreiches PHP-Framework mit einer Architektur, die dem Entwickler, der damit Software erstellt, Spaß bei der Webentwicklung macht. Symfony ist ein funktionsreiches Webentwicklungsframework, das Entwicklern leistungsstarke Tools zum Erstellen von Webanwendungen bietet. Aufgrund seiner Flexibilität wird es häufig als gute Wahl für Unternehmensanwendungen angesehen. Die Schritte zum Bereitstellen einer typischen Symfony-Anwendung hängen vom Setup, der Komplexität und den Anforderungen der Anwendung ab.

In diesem Lernprogramm haben Sie eine Symfony 4-Anwendung manuell für die Produktion auf einem Ubuntu 18.04-Server mit LEMP bereitgestellt. Sie können dieses Wissen jetzt auf die Bereitstellung Ihrer eigenen Symfony-Anwendungen anwenden.