Installieren und Konfigurieren von Laravel mit LEMP unter Ubuntu 18.04

Einführung

Laravel ist ein Open-Source-PHP-Framework, das eine Reihe von Tools und Ressourcen zum Erstellen moderner PHP-Anwendungen bereitstellt. Da eincomplete ecosystemeine integrierten Funktionen nutzt, hat die Popularität von Laravel in den letzten Jahren rapide zugenommen, und viele Entwickler haben es als bevorzugten Rahmen für einen optimierten Entwicklungsprozess übernommen.

In diesem Handbuch installieren und konfigurieren Sie eine neue Laravel-Anwendung auf einem Ubuntu 18.04-Server. Verwenden SieComposer, um die Framework-Abhängigkeiten herunterzuladen und zu verwalten. Wenn Sie fertig sind, haben Sie eine funktionierende Laravel-Demo-Anwendung, die Inhalte aus einer MySQL-Datenbank abruft.

Voraussetzungen

Um dieses Handbuch zu vervollständigen, müssen Sie zuerst die folgenden Aufgaben auf Ihrem Ubuntu 18.04-Server ausführen:

[[Schritt-1 - Installieren der erforderlichen PHP-Module]] == Schritt 1 - Installieren der erforderlichen PHP-Module

Bevor Sie Laravel installieren können, müssen Sie einige PHP-Module installieren, die vom Framework benötigt werden. Wir werdenapt verwenden, um die PHP-Modulephp-mbstring,php-xml undphp-bcmath zu installieren. Diese PHP-Erweiterungen bieten zusätzliche Unterstützung für den Umgang mit Zeichenkodierung, XML und Präzisionsmathematik.

Wenn Sie in dieser Sitzung zum ersten Malapt verwenden, sollten Sie zuerst den Befehlupdate ausführen, um den Paketmanager-Cache zu aktualisieren:

sudo apt update

Nun können Sie die benötigten Pakete installieren mit:

sudo apt install php-mbstring php-xml php-bcmath

Ihr System ist jetzt bereit, die Installation von Laravel über Composer auszuführen. Zuvor benötigen Sie jedoch eine Datenbank für Ihre Anwendung.

[[Schritt 2 - Erstellen einer Datenbank für die Anwendung] == Schritt 2 - Erstellen einer Datenbank für die Anwendung

Um die grundlegende Installation und Verwendung von Laravel zu demonstrieren, erstellen wir eine Beispielanwendungtravel list, um eine Liste der Orte anzuzeigen, zu denen ein Benutzer reisen möchte, sowie eine Liste der Orte, die er bereits besucht hat. Dies kann in einer einfachenplaces-Tabelle mit einem Feld für Orte gespeichert werden, die wirname nennen, und einem anderen Feld, um sie alsvisited odernot visited zu markieren, die wir ' Ich rufevisited auf. Zusätzlich fügen wir einid-Feld hinzu, um jeden Eintrag eindeutig zu identifizieren.

Um über die Laravel-Anwendung eine Verbindung zur Datenbank herzustellen, erstellen wir einen dedizierten MySQL-Benutzer und gewähren diesem Benutzer die vollständigen Berechtigungen für dietravel_list-Datenbank.

Melden Sie sich zunächst als Datenbankbenutzer vonrootbei der MySQL-Konsole an mit:

sudo mysql

Führen Sie zum Erstellen einer neuen Datenbank den folgenden Befehl in Ihrer MySQL-Konsole aus:

CREATE DATABASE travel_list;

Jetzt können Sie einen neuen Benutzer erstellen und ihm vollständige Berechtigungen für die gerade erstellte benutzerdefinierte Datenbank erteilen. In diesem Beispiel erstellen wir einen Benutzer mit dem Namentravel_user mit dem Kennwortpassword. Sie sollten dies jedoch in ein sicheres Kennwort Ihrer Wahl ändern:

GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Dadurch erhält der Benutzer vontravel_userdie vollen Berechtigungen für die Datenbank vontravel_list, während dieser Benutzer keine anderen Datenbanken auf Ihrem Server erstellen oder ändern kann.

Beenden Sie anschließend die MySQL-Shell:

exit

Sie können jetzt testen, ob der neue Benutzer über die richtigen Berechtigungen verfügt, indem Sie sich erneut bei der MySQL-Konsole anmelden. Verwenden Sie hierzu die benutzerdefinierten Benutzeranmeldeinformationen:

mysql -u travel_user -p

Beachten Sie das Flag-p in diesem Befehl, das Sie zur Eingabe des Kennworts auffordert, das beim Erstellen des Benutzerstravel_userverwendet wird. Vergewissern Sie sich nach dem Anmelden an der MySQL-Konsole, dass Sie Zugriff auf dietravel_list-Datenbank haben:

SHOW DATABASES;

Dadurch erhalten Sie die folgende Ausgabe:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| travel_list        |
+--------------------+
2 rows in set (0.01 sec)

Erstellen Sie als Nächstes eine Tabelle mit dem Namenplaces in der Datenbanktravel_list. Führen Sie in der MySQL-Konsole die folgende Anweisung aus:

CREATE TABLE travel_list.places (
    id INT AUTO_INCREMENT,
    name VARCHAR(255),
    visited BOOLEAN,
    PRIMARY KEY(id)
);

Füllen Sie nun die Tabelleplacesmit einigen Beispieldaten:

INSERT INTO travel_list.places (name, visited)
VALUES ("Tokyo", false),
("Budapest", true),
("Nairobi", false),
("Berlin", true),
("Lisbon", true),
("Denver", false),
("Moscow", false),
("Oslo", false),
("Rio", true),
("Cincinati", false),
("Helsinki", false);

Führen Sie Folgendes aus, um zu bestätigen, dass die Daten erfolgreich in Ihrer Tabelle gespeichert wurden:

SELECT * FROM travel_list.places;

Sie werden eine Ausgabe ähnlich der folgenden sehen:

Output+----+-----------+---------+
| id | name      | visited |
+----+-----------+---------+
|  1 | Tokyo     |       0 |
|  2 | Budapest  |       1 |
|  3 | Nairobi   |       0 |
|  4 | Berlin    |       1 |
|  5 | Lisbon    |       1 |
|  6 | Denver    |       0 |
|  7 | Moscow    |       0 |
|  8 | Oslo      |       0 |
|  9 | Rio       |       1 |
| 10 | Cincinati |       0 |
| 11 | Helsinki  |       0 |
+----+-----------+---------+
11 rows in set (0.00 sec)

Nachdem Sie bestätigt haben, dass Ihre Testtabelle gültige Daten enthält, können Sie die MySQL-Konsole beenden:

exit

Jetzt können Sie die Anwendung erstellen und für die Verbindung mit der neuen Datenbank konfigurieren.

[[Schritt-3 - Erstellen einer neuen Laravel-Anwendung]] == Schritt 3 - Erstellen einer neuen Laravel-Anwendung

Sie erstellen jetzt eine neue Laravel-Anwendung mit dem Befehlcomposer create-project. Dieser Composer-Befehl wird normalerweise verwendet, um neue Anwendungen basierend auf vorhandenen Frameworks und Inhaltsverwaltungssystemen zu booten.

In diesem Handbuch wirdtravel_list als Beispielanwendung verwendet. Sie können dies jedoch in etwas anderes ändern. Die Anwendungtravel_listzeigt eine Liste der Speicherorte an, die von einem lokalen MySQL-Server abgerufen wurden, um die Grundkonfiguration von Laravel zu demonstrieren und zu bestätigen, dass Sie eine Verbindung zur Datenbank herstellen können.

Wechseln Sie zunächst in das Ausgangsverzeichnis Ihres Benutzers:

cd ~

Mit dem folgenden Befehl wird ein neuestravel_list-Verzeichnis erstellt, das eine Barebone-Laravel-Anwendung basierend auf den Standardeinstellungen enthält:

composer create-project --prefer-dist laravel/laravel travel_list

Sie werden eine Ausgabe ähnlich der folgenden sehen:

OutputInstalling laravel/laravel (v5.8.17)
  - Installing laravel/laravel (v5.8.17): Downloading (100%)
Created project in travel_list
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 80 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)
  - Installing phpoption/phpoption (1.5.0): Downloading (100%)
  - Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)
  - Installing symfony/css-selector (v4.3.2): Downloading (100%)
...

Wenn die Installation abgeschlossen ist, greifen Sie auf das Anwendungsverzeichnis zu und führen Sie den Befehlartisanvon Laravel aus, um zu überprüfen, ob alle Komponenten erfolgreich installiert wurden:

cd travel_list
php artisan

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

OutputLaravel Framework 5.8.29

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
      --env[=ENV]       The environment the command should run under
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

(...)

Diese Ausgabe bestätigt, dass die Anwendungsdateien vorhanden sind und die Laravel-Befehlszeilentools wie erwartet funktionieren. Die Anwendung muss jedoch noch konfiguriert werden, um die Datenbank und einige andere Details einzurichten.

[[Schritt-4 - Konfigurieren von Laravel]] == Schritt 4 - Konfigurieren von Laravel

Die Laravel-Konfigurationsdateien befinden sich in einem Verzeichnis namensconfig im Stammverzeichnis der Anwendung. Wenn Sie Laravel mit Composer installieren, wird außerdem einenvironment file erstellt. Diese Datei enthält Einstellungen, die für die aktuelle Umgebung spezifisch sind, in der die Anwendung ausgeführt wird, und hat Vorrang vor den Werten, die in regulären Konfigurationsdateien im Verzeichnisconfigfestgelegt sind. Für jede Installation in einer neuen Umgebung ist eine angepasste Umgebungsdatei erforderlich, in der unter anderem Einstellungen für die Datenbankverbindung, Debugoptionen und die Anwendungs-URL definiert werden. Diese Angaben können je nach der von der Anwendung ausgeführten Umgebung variieren.

[.warning] #Warning: Die Umgebungskonfigurationsdatei enthält vertrauliche Informationen zu Ihrem Server, einschließlich Datenbankanmeldeinformationen und Sicherheitsschlüsseln. Aus diesem Grund sollten Sie diese Datei niemals öffentlich freigeben.
#

Wir bearbeiten jetzt die.env-Datei, um die Konfigurationsoptionen für die aktuelle Anwendungsumgebung anzupassen.

Öffnen Sie die Datei.envmit dem Befehlszeileneditor Ihrer Wahl. Hier verwenden wirnano:

nano .env

Obwohl diese Datei viele Konfigurationsvariablen enthält, müssen Sie jetzt nicht alle einrichten. Die folgende Liste enthält eine Übersicht der Variablen, die sofort beachtet werden müssen:

  • APP_NAME: Anwendungsname, der für Benachrichtigungen und Nachrichten verwendet wird.

  • APP_ENV: Aktuelle Anwendungsumgebung.

  • APP_KEY: Dieser eindeutige Schlüssel wird zur Erzeugung von Salzen und Hashes verwendet und automatisch bei der Installation von Laravel über Composer erstellt, sodass Sie ihn nicht ändern müssen.

  • APP_DEBUG: Gibt an, ob Debug-Informationen auf der Clientseite angezeigt werden sollen.

  • APP_URL: Basis-URL für die Anwendung, die zum Generieren von Anwendungslinks verwendet wird.

  • DB_DATABASE: Datenbankname.

  • DB_USERNAME: Benutzername für die Verbindung zur Datenbank.

  • DB_PASSWORD: Kennwort für die Verbindung zur Datenbank.

Standardmäßig sind diese Werte für eine lokale Entwicklungsumgebung konfiguriert, dieHomestead verwendet, eine von Laravel bereitgestellte vorgefertigte Vagrant-Box. Diese Werte werden geändert, um die aktuellen Umgebungseinstellungen unserer Beispielanwendung widerzuspiegeln.

Wenn Sie Laravel in einerdevelopment- odertesting-Umgebung installieren, können Sie die OptionAPP_DEBUG aktiviert lassen, da Sie beim Testen der Anwendung über einen Browser wichtige Debug-Informationen erhalten. Die VariableAPP_ENV sollte in diesem Fall aufdevelopment odertesting gesetzt werden.

Wenn Sie Laravel in einerproduction-Umgebung installieren, sollten Sie die OptionAPP_DEBUG deaktivieren, da sie dem endgültigen Benutzer vertrauliche Informationen zu Ihrer Anwendung anzeigt. DieAPP_ENV sollten in diesem Fall aufproduction gesetzt werden.

Die folgende Datei.env richtet unsere Beispielanwendung fürdevelopment ein:

[.note] #Note: Die VariableAPP_KEY enthält einen eindeutigen Schlüssel, der automatisch generiert wurde, als Sie Laravel über Composer installiert haben. Sie müssen diesen Wert nicht ändern. Wenn Sie einen neuen sicheren Schlüssel generieren möchten, können Sie den Befehlphp artisan key:generate verwenden.
#

/var/www/travel_list/.env

APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://domain_or_IP

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=travel_list
DB_USERNAME=travel_user
DB_PASSWORD=password

...

Passen Sie Ihre Variablen entsprechend an. Wenn Sie mit der Bearbeitung fertig sind, speichern und schließen Sie die Datei, um Ihre Änderungen beizubehalten. Wenn Sienano verwenden, können Sie dies mitCTRL+X, dann mitY undEnter bestätigen.

Ihre Laravel-Anwendung ist jetzt eingerichtet, der Webserver muss jedoch noch konfiguriert werden, damit Sie über einen Browser darauf zugreifen können. Im nächsten Schritt konfigurieren wir Nginx für Ihre Laravel-Anwendung.

[[Schritt-5 - Einrichten von Nginx]] == Schritt 5 - Einrichten von Nginx

Wir haben Laravel in einem lokalen Ordner des Home-Verzeichnisses Ihres Remotebenutzers installiert. Dies funktioniert zwar gut in lokalen Entwicklungsumgebungen, wird jedoch für Webserver, die für das öffentliche Internet geöffnet sind, nicht empfohlen. Wir verschieben den Anwendungsordner in/var/www. Dies ist der übliche Speicherort für Webanwendungen, die unter Nginx ausgeführt werden.

Verwenden Sie zunächst den Befehlmv, um den Anwendungsordner mit seinem gesamten Inhalt nach/var/www/travel_list zu verschieben:

sudo mv ~/travel_list /var/www/travel_list

Jetzt müssen wir dem Webserverbenutzer Schreibzugriff auf die Ordnerstorage undcache gewähren, in denen Laravel anwendungsgenerierte Dateien speichert:

sudo chown -R www-data.www-data /var/www/travel_list/storage
sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache

Die Anwendungsdateien sind jetzt in Ordnung, aber wir müssen Nginx noch konfigurieren, um den Inhalt bereitzustellen. Zu diesem Zweck erstellen wir eine neue Konfigurationsdatei für den virtuellen Host unter/etc/nginx/sites-available:

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

Die folgende Konfigurationsdatei enthält die Einstellungen vonrecommendedfür Laravel-Anwendungen unter Nginx:

/etc/nginx/sites-available/travel_list

server {
    listen 80;
    server_name server_domain_or_IP;
    root /var/www/travel_list/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

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

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Kopieren Sie diesen Inhalt in die Datei/etc/nginx/sites-available/travel_listund passen Sie gegebenenfalls die hervorgehobenen Werte an Ihre eigene Konfiguration an. Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind.

Um die neue Konfigurationsdatei für den virtuellen Host zu aktivieren, erstellen Sie eine symbolische Verknüpfung zutravel_list insites-enabled:

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

[.note] #Note: Wenn Sie eine andere virtuelle Hostdatei haben, die zuvor für die gleichenserver_name konfiguriert wurde, die im virtuellen Host vontravel_listverwendet werden, müssen Sie möglicherweise die alte Konfiguration von deaktivieren Entfernen der entsprechenden symbolischen Verknüpfung innerhalb von/etc/nginx/sites-enabled/.
#

Um zu bestätigen, dass die Konfiguration keine Syntaxfehler enthält, können Sie Folgendes verwenden:

sudo nginx -t

Sie sollten die Ausgabe so sehen:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Um die Änderungen zu übernehmen, laden Sie Nginx neu mit:

sudo systemctl reload nginx

Gehen Sie nun zu Ihrem Browser und greifen Sie mit dem Domänennamen oder der IP-Adresse des Servers auf die Anwendung zu, wie in der Direktiveserver_namein Ihrer Konfigurationsdatei definiert:

http://server_domain_or_IP

Sie sehen eine Seite wie diese:

Laravel splash page

Damit wird bestätigt, dass Ihr Nginx-Server ordnungsgemäß für Laravel konfiguriert ist. Ab diesem Zeitpunkt können Sie Ihre Anwendung auf dem Grundgerüst der Standardinstallation aufbauen.

Im nächsten Schritt ändern wir die Hauptroute der Anwendung, um Daten in der Datenbank mithilfe derDB-Fassade von Laravel abzufragen.

[[Schritt-6 - Anpassen der Hauptseite]] == Schritt 6 - Anpassen der Hauptseite

Angenommen, Sie haben bisher alle Schritte in diesem Handbuch ausgeführt, sollten Sie über eine funktionierende Laravel-Anwendung und eine Datenbanktabelle mit dem Namenplaces verfügen, die einige Beispieldaten enthält.

Wir bearbeiten jetzt die Hauptanwendungsroute, um die Datenbank abzufragen und den Inhalt anviewder Anwendung zurückzugeben.

Öffnen Sie die Hauptroutendateiroutes/web.php:

nano routes/web.php

Diese Datei enthält standardmäßig den folgenden Inhalt:

routes/web.php

Routen werden in dieser Datei mit der statischen MethodeRoute::get definiert, die als Argumentepath undcallback function empfängt.

Der folgende Code ersetzt die Rückruffunktion für die Hauptroute. Mit dem Flagvisitedwerden zwei Abfragen an die Datenbank durchgeführt, um die Ergebnisse zu filtern. Die Ergebnisse werden an eine Ansicht mit dem Namentravel_list zurückgegeben, die als Nächstes erstellt wird. Kopieren Sie diesen Inhalt in die Dateiroutes/web.phpund ersetzen Sie den bereits vorhandenen Code:

routes/web.php

 $visited, 'togo' => $togo ] );
});

Speichern und schließen Sie die Datei, wenn Sie mit der Bearbeitung fertig sind. Jetzt erstellen wir die Ansicht, mit der die Datenbankergebnisse für den Benutzer gerendert werden. Erstellen Sie eine neue Ansichtsdatei inresources/views:

nano resources/views/travel_list.blade.php

Die folgende Vorlage erstellt zwei Listen von Orten basierend auf den Variablenvisited undtogo. Kopieren Sie diesen Inhalt in Ihre neue Ansichtsdatei:

resources/views/travel_list/blade.php



    Travel List



    

My Travel Bucket List

Places I'd Like to Visit

    @foreach ($togo as $newplace)
  • {{ $newplace->name }}
  • @endforeach

Places I've Already Been To

    @foreach ($visited as $place)
  • {{ $place->name }}
  • @endforeach

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Gehen Sie jetzt zu Ihrem Browser und laden Sie die Anwendung neu. Sie sehen eine Seite wie diese:

Demo Laravel Application

Sie haben jetzt eine funktionierende Laravel-Anwendung, die Inhalte aus einer MySQL-Datenbank abruft.

Fazit

In diesem Tutorial haben Sie eine neue Laravel-Anwendung auf einem LEMP-Stack (Linux, Nginx, MySQL und PHP) eingerichtet, der auf einem Ubuntu 18.04-Server ausgeführt wird. Sie haben auch Ihre Standardroute angepasst, um Datenbankinhalte abzufragen und die Ergebnisse in einer benutzerdefinierten Ansicht anzuzeigen.

Von hier aus können Sie neue Routen und Ansichten für zusätzliche Seiten erstellen, die Ihre Anwendung benötigt. Weitere Informationen zuroutes,views unddatabase support finden Sie in der offiziellen Laravel-Dokumentation. Wenn Sie für die Produktion bereitstellen, sollten Sie auch dieoptimization section auf verschiedene Arten überprüfen, um die Leistung Ihrer Anwendung zu verbessern.

Zur Verbesserung der Sicherheit sollten Sie ein TLS / SSL-Zertifikat für Ihren Server installieren, damit dieser Inhalte über HTTPS bereitstellen kann. Zu diesem Zweck können Sie unserem Leitfaden zuhow to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04 folgen.