Wie man Symfony 4 auf einem Debian 9 Server einrichtet
Symfony ist eine beliebte Wahl des PHP-Entwicklers für die Entwicklung von kleinen bis großen Anwendungen. Mit jedem neuen Release entwickelt sich Symfony zu einem besseren Toolkit für Entwickler. Symfony ermöglicht schnelle Anwendungsentwicklungsprozesse, so dass Entwickler eine vollwertige API, E-Commerce-Plattformen, Fintech- und Buchhaltungsanwendungen usw. auf der anderen Seite des Spektrums erstellen können. Entwickler können mit Hilfe der Twig Templating Engine einfache Websites erstellen.
Symfony 4 verfügt über ein intelligentes Rezeptsystem und eine vereinfachte Verzeichnisstruktur, die die Code-Dateien in Ihrem Projekt nicht überlastet. Symfony Flex installiert Bibliotheken mit Aliasnamen und registriert sie automatisch in den Konfigurationen des Bundles. Die neue Version führt auch ein blitzschnelles Schnellrouting-System mit Hash-Map-Lookups für statische Routen und kombinierten regulären Ausdrücken für Routen mit Platzhaltern ein.
Angesichts der Popularität von Symfony 4 entschied ich mich, diese Version auf einem Debian 9-Rechner zu konfigurieren und zu installieren. In diesem Artikel werde ich Ihnen zeigen, wie Sie einen kompletten Symfony Stack einrichten können, um Symfony-Anwendungen auszuführen. Der Prozess umfasst Schritte in Bezug auf Berechtigungen, Webroots und Webserver.
Erstellen eines DigitalOcean-Servers
Heute können Sie eine Reihe von Cloud Hosting-Providern auf dem Markt finden, und die Wahl hängt wirklich von Ihrer Mischung aus Leistungsanforderungen und Budget ab.
Für die Zwecke dieses Artikels werde ich mich für DigitalOcean entscheiden, einen Cloud Hosting Provider, der von den Entwicklern sehr geschätzt wird. Sie können sich ganz einfach für ein DigitalOcean-Konto anmelden und Ihre Verteilung, Größe und das Rechenzentrum Ihres Servers auswählen, wie in der folgenden GIF dargestellt:
Nun ist der nächste Schritt der Start des SSH-Terminals. Wenn Sie ein Linux- oder Mac-Benutzer sind, erhalten Sie es standardmäßig auf Ihrem Computer. Wenn Sie ein Windows-Benutzer sind, müssen Sie PuTTY. Die gute Nachricht ist, dass Windows 10 mit einer eigenen PowerShell geliefert wird, die Sie für die Zwecke dieses Artikels verwenden können.
Nach dem Start des Droplets benötigen Sie die folgenden drei Elemente, um sich am SSH-Terminal anzumelden:
-
Server-IP-Adresse
-
Benutzername
-
Passwort oder SSH-Schlüssel
Da ich Windows benutze, werde ich PuTTY für alle SSH-bezogenen Aktivitäten verwenden. Notieren Sie sich die oben genannten Punkte aus dem Droplet und melden Sie sich am SSH-Terminal an. Wenn Sie in PuTTY die IP-Adresse eingeben und auf Enter klicken, fragt Sie der Server nach dem Zwischenspeichern des Schlüssels. Einfacher Klick Ja.
Geben Sie anschließend die Anmeldedaten ein und Sie melden sich bei Ihrem DigitalOcean-Droplet mit Root-Zugriff an.
Der Symfony LAMP Stapel
Symfony setzt auf einen typischen LAMP-Stapel, der aus PHP, Apache/Nginx, MySQL und einer Linux-Distribution besteht. Sie müssen zuerst alle diese Softwarekomponenten installieren und dann Apache/Nginx entsprechend den Anforderungen von Symfony konfigurieren. Glücklicherweise sind alle Komponenten für die Erstellung des Symfony-Stacks Open Source, so dass Sie nur die Befehle ausführen und über SSH auf Ihrem Server installieren müssen.
Symfony hat auch die Webserver-Konfiguration für Nginx und Apache in ihrer Dokumentation definiert, so dass ich hier die wichtigsten Einstellungen erläutern werde und Sie den Rest dort lesen können.
Aktualisieren der Pakete unter Debian
Das erste Aktionselement auf der Liste ist das Aktualisieren der Pakete auf dem Debian-Rechner.
Überprüfen Sie zunächst die Debian-Version auf dem Server, indem Sie den folgenden Befehl ausführen:
cat /etc/debian_version
Also habe ich Debian 9.4 auf meinem DigitalOcean-Server.
Führen Sie anschließend die folgenden Befehle aus, um die Pakete über SSH zu aktualisieren:
apt-get update apt-get upgrade apt-get dist-upgrade
Sobald alles aktualisiert ist, bin ich bereit, den Webserver zu installieren.
Apache2 für Symfony 4 installieren
Gehen Sie zum SSH-Terminal und installieren Sie den Apache2 zuerst mit dem folgenden Befehl:
apt-get install apache2 -y
Sobald der Befehl abgeschlossen ist, greifen Sie auf die IP Ihres Servers zu und Sie sehen die Apache Startseite:
Als nächstes gehen Sie mit dem Befehl in die Unterverzeichnisstruktur:
cd /etc/apache2/sites-available/
Aktivieren Sie zuerst die Option mod_rewrite mit diesem Befehl:
a2enmod rewrite
Öffnen Sie nun die Datei 000-default.conf und fügen Sie Folgendes hinzu, um den Webhost im Apache 2 zu konfigurieren:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/projec_access.log combined
</VirtualHost>
Nun ist der Apache2 konfiguriert, um das Projekt im Ordner /var/wwww/html auszuführen. Sie können die Konfiguration aber auch um einige weitere Optionen erweitern, die am besten zu Symfony 4 passen, hier ein Beispiel:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
AllowOverride None
Require all granted
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/crvfakeexample.com>
# Options FollowSymlinks
# </Directory>
# optionally disable the RewriteEngine for the asset directories
# which will allow apache to simply reply with a 404 when files are
# not found instead of passing the request into the full symfony stack
<Directory /var/www/crvfakeexample.com/public/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
ErrorLog /var/log/apache2/crvfakeexample.com_error.log
CustomLog /var/log/apache2/crvfakeexample.com_access.log combined
# optionally set the value of the environment variables used in the application
#SetEnv APP_ENV prod
#SetEnv APP_SECRET <app-secret-id>
#SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
</VirtualHost>
Sie können auch die neuesten Apache-Optionen verwenden, wie z.B. Alle gewährten benötigen und Umgebungsvariablen in den obigen Einstellungen konfigurieren, und nun den Apache-Server mit dem folgenden Befehl neu laden, damit die neuen Einstellungen wirksam werden können:
service apache2 reload
Nginx für Symfony 4 installieren
Wenn Sie Apache nicht verwenden möchten, ist Nginx eine gute Option für einen Webserver. Der Prozess ist ziemlich ähnlich.
Beginnen Sie mit der Installation von Nginx mit dem folgenden Befehl:
apt-get update
apt-get install nginx -y
Führen Sie nun cd /etc/nginx/conf.d aus und konfigurieren Sie die Datei als:
server {
server_name domain.tld www.domain.tld;
root /var/www/html/symfony4/public;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# optionally set the value of the environment variables used in the application
# fastcgi_param APP_ENV prod;
# fastcgi_param APP_SECRET <app-secret-id>;
# fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/index.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
Laden Sie nun den Server neu, indem Sie den folgenden Befehl ausführen:
service nginx reload
PHP 7.2 für Symfony 4 installieren
Eine wichtige Abhängigkeit von Symfony 4 ist PHP 7.1.3 (oder höher) auf dem Server. Um die erforderliche Version zu installieren, muss ich ein paar Pakete auf Debian 9 aktualisieren/installieren, um PHP 7.2 zu installieren. Gehen Sie zum SSH-Terminal (und stellen Sie sicher, dass Sie sich im Root befinden) und führen Sie die folgenden Befehle aus:
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
Führen Sie nun im nächsten Schritt diese Befehle aus:
sudo apt update
sudo apt install php7.2
Nach erfolgreicher Installation überprüfen Sie die PHP-Version:
php -v
Ich muss auch ein paar weitere Bibliotheken installieren, um sicherzustellen, dass PHP 7.2 auf dem Server richtig funktioniert. Führen Sie den folgenden Befehl aus, um die erforderlichen Bibliotheken zu installieren:
sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2
Die Bibliotheken werden installiert und PHP 7.2 ist korrekt für Symfony 4 konfiguriert.
MySQL installieren, um Datenbanken zu konfigurieren
Lassen Sie uns schnell die MySQL-Datenbank installieren.
Beginnen Sie, indem Sie den folgenden Befehl ausführen:
apt-get install mysql-server
Der Prozess wird eine Pause einlegen, um Ihre Zustimmung einzuholen. Geben Sie (y) ein und drücken Sie die Eingabetaste. Legen Sie im nächsten Fenster das Passwort für den MySQL-Root-Benutzer fest.
Der Prozess ist in wenigen Minuten abgeschlossen.
Als nächstes werde ich MySQL entsprechend den Anforderungen des LAMP-Stacks konfigurieren. Geben Sie dazu den folgenden Befehl ein:
mysql_secure_installation
An dieser Stelle ist das Server-Setup gemäß den Anforderungen von Symfony 4 abgeschlossen und ich werde mich nun auf die Installation des Frameworks selbst konzentrieren.
Komponist unter Debian 9 installieren
Die globale Installation von Composer ist eine gute Idee, denn auf diese Weise kann jeder Benutzer es problemlos nutzen. Also werde ich es im Verzeichnis /user/local/bin installieren.
Kopieren wir zuerst das Installationsprogramm in das Verzeichnis /tmp:
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
Führen Sie anschließend den folgenden Befehl aus, um die Composer-Datei auszuführen und global zu installieren:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Nachdem Composer nun installiert ist, werde ich mit der eigentlichen Symfony 4 Installation fortfahren.
Installieren Sie schließlich Symfony 4 auf dem Debian 9 Server.
An dieser Stelle habe ich den Apache-Server für die Webroot durch Angabe der URL konfiguriert: /var/www/html/symfony4/public.
Gehen Sie in den html-Ordner und führen Sie den folgenden Composer-Befehl aus, um Symfony 4 zu installieren:
composer create-project symfony/skeleton symfony4
Das Framework wird in wenigen Sekunden installiert. Da Symfony 4 mit einer kleinen Codebasis und Abhängigkeiten sehr optimiert ist, werden während der Installation keine Anmeldeinformationen abgefragt. Danach müssen Sie die Datenbank konfigurieren.
Sobald der Prozess abgeschlossen ist, greifen Sie auf die IP Ihres Servers zu und Sie sehen die Willkommensseite:
Als nächstes werde ich die Datenbank-Anmeldeinformationen zur env-Datei der Symfony hinzufügen.
###> doctrine/doctrine-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
# customize this line!
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"
###< doctrine/doctrine-bundle ###
Schlussworte
Symfony 4 wurde von PHP-Entwicklern weithin angenommen und geschätzt und wurde bereits in Millionenhöhe heruntergeladen. Sie können auch die Standardversionen von Symfony 3.x verwenden (Sie müssen nur den Befehl aktualisieren, um die jeweilige Version zu installieren):
Für Symfony 3.0:
composer create-project symfony/framework-standard-edition your_project_name "3.0.*"
Für Symfony 3.1:
composer create-project symfony/framework-standard-edition your_project_name "3.1.*"
Wenn Sie Hilfe bei der Installation und Einrichtung von Symfony 4 auf einem Debian 9-Rechner benötigen, lassen Sie es mich in den Kommentaren wissen.