Automatisches Bereitstellen von Laravel-Anwendungen mit Deployer unter Ubuntu 16.04

Einführung

Laravel ist ein Open-Source-PHP-Webframework, mit dem gängige Webentwicklungsaufgaben wie Authentifizierung, Routing und Caching vereinfacht werden sollen. Deployer ist ein Open-Source-PHP-Bereitstellungstool mit sofortiger Unterstützung für eine Reihe gängiger Frameworks, darunter Laravel, CodeIgniter, Symfony und Zend Framework.

Deployer automatisiert Bereitstellungen, indem eine Anwendung von einem Git-Repository auf einen Server geklont, Abhängigkeiten mit Composer installiert und die Anwendung so konfiguriert wird, dass Sie dies nicht manuell tun müssen. Auf diese Weise können Sie mehr Zeit für die Entwicklung anstatt für Uploads und Konfigurationen aufwenden und häufiger bereitstellen.

In diesem Lernprogramm stellen Sie eine Laravel-Anwendung automatisch ohne Ausfallzeit bereit. Dazu bereiten Sie die lokale Entwicklungsumgebung vor, in der Sie Code bereitstellen, und konfigurieren dann einen Produktionsserver mit Nginx und einer MySQL-Datenbank für die Bereitstellung der Anwendung.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

Schritt 1 - Einrichten Ihrer lokalen Entwicklungsumgebung

Da Sie Ihre Anwendung von Ihrem lokalen Computer aus erstellen und bereitstellen, konfigurieren Sie zunächst Ihre lokale Entwicklungsumgebung. Deployer steuert den gesamten Bereitstellungsprozess von Ihrem lokalen Computer aus. Beginnen Sie also mit der Installation.

Öffnen Sie auf Ihrem * lokalen * Computer das Terminal und laden Sie das Deployer-Installationsprogramm mit + curl + herunter:

curl -LO https://deployer.org/deployer.phar

Führen Sie als Nächstes ein kurzes PHP-Skript aus, um sicherzustellen, dass das Installationsprogramm mit dem SHA-1-Hash für das neueste Installationsprogramm auf der https://deployer.org/download[Deployer - Download-Seite übereinstimmt. Ersetzen Sie den markierten Wert durch den neuesten Hash:

php -r "if (hash_file('sha1', 'deployer.phar') === '') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('deployer.phar'); } echo PHP_EOL;"
OutputInstaller verified

Stellen Sie Deployer systemweit zur Verfügung. Beachten Sie, dass Sie möglicherweise das Verzeichnis "+ / usr / local / bin / dep +" erstellen müssen, bevor Sie diesen Befehl ausführen, wenn Sie Windows oder macOS auf Ihrem lokalen Computer ausführen:

sudo mv deployer.phar /usr/local/bin/dep

Mach es ausführbar:

sudo chmod +x /usr/local/bin/dep

Als nächstes erstellen Sie ein Laravel-Projekt auf Ihrem * lokalen Rechner *:

composer create-project --prefer-dist laravel/laravel  "5.5.*"

Sie haben die gesamte erforderliche Software auf Ihrem lokalen Computer installiert. Nachdem dies geschehen ist, werden wir ein Git-Repository für die Anwendung erstellen.

Schritt 2 - Herstellen einer Verbindung zu Ihrem Remote-Git-Repository

Deployer wurde entwickelt, damit Benutzer Code von überall aus bereitstellen können. Um diese Funktionalität zu ermöglichen, müssen Benutzer Code an ein Repository im Internet senden, von dem aus Deployer den Code dann auf den Produktionsserver kopiert. Wir werden Git, ein Open-Source-Versionskontrollsystem, verwenden, um den Quellcode der Laravel-Anwendung zu verwalten. Sie können mithilfe des SSH-Protokolls eine Verbindung zum Git-Server herstellen. Um dies sicher zu tun, müssen Sie SSH-Schlüssel generieren. Dies ist sicherer als die kennwortbasierte Authentifizierung. Sie können daher vermeiden, das Kennwort vor jeder Bereitstellung einzugeben.

Führen Sie den folgenden Befehl auf Ihrem * lokalen Computer * aus, um den SSH-Schlüssel zu generieren. Beachten Sie, dass "+ -f " den Dateinamen der Schlüsseldatei angibt und Sie diesen durch Ihren eigenen Dateinamen ersetzen können. Es wird ein SSH-Schlüsselpaar (mit den Namen "+" und "+ .pub ") im Ordner " ~ / .ssh / +" generiert.

ssh-keygen -t rsa -b 4096 -f  ~/.ssh/

Möglicherweise befinden sich auf Ihrem lokalen Computer mehrere SSH-Schlüssel. Konfigurieren Sie daher den SSH-Client so, dass Sie wissen, welcher private SSH-Schlüssel verwendet werden soll, wenn eine Verbindung zu Ihrem Git-Server hergestellt wird.

Erstellen Sie eine SSH-Konfigurationsdatei * auf Ihrem lokalen Computer *:

touch ~/.ssh/config

Öffnen Sie die Datei und fügen Sie eine Verknüpfung zu Ihrem Git-Server hinzu. Dies sollte die Direktive "+ HostName " (die auf den Hostnamen Ihres Git-Servers verweist) und die Direktive " IdentityFile +" (die auf den Dateipfad des soeben erstellten SSH-Schlüssels verweist) enthalten:

~ / .ssh / config

Host
   HostName
   IdentityFile ~/.ssh/

Speichern und schließen Sie die Datei und schränken Sie ihre Berechtigungen ein:

chmod 600 ~/.ssh/config

Jetzt weiß Ihr SSH-Client, welcher private Schlüssel für die Verbindung zum Git-Server verwendet wird.

Zeigen Sie den Inhalt Ihrer öffentlichen Schlüsseldatei mit dem folgenden Befehl an:

cat ~/.ssh/.pub

Kopieren Sie die Ausgabe und fügen Sie den öffentlichen Schlüssel Ihrem Git-Server hinzu.

Wenn Sie einen Git-Hosting-Dienst verwenden, lesen Sie die Dokumentation zum Hinzufügen von SSH-Schlüsseln zu Ihrem Konto:

Jetzt können Sie mit Ihrem lokalen Computer eine Verbindung zu Ihrem Git-Server herstellen. Testen Sie die Verbindung mit dem folgenden Befehl:

ssh -T

Wenn dieser Befehl zu einem Fehler führt, überprüfen Sie, ob Sie Ihre SSH-Schlüssel korrekt hinzugefügt haben, indem Sie in der Dokumentation Ihres Git-Hosting-Dienstes nachschlagen und erneut versuchen, eine Verbindung herzustellen.

Bevor Sie die Anwendung in das entfernte Git-Repository verschieben und dort bereitstellen, konfigurieren Sie zunächst den Produktionsserver.

Schritt 3 - Konfigurieren des Deployer-Benutzers

Deployer verwendet das SSH-Protokoll, um Befehle sicher auf dem Server auszuführen. Aus diesem Grund besteht der erste Schritt zur Konfiguration des Produktionsservers darin, einen Benutzer zu erstellen, mit dem sich Deployer anmelden und Befehle über SSH auf Ihrem Server ausführen kann.

Melden Sie sich mit einem Benutzer ohne Rootberechtigung bei Ihrem LEMP-Server an und erstellen Sie mit dem folgenden Befehl einen neuen Benutzer mit dem Namen "* deployer *":

sudo adduser deployer

Laravel benötigt einige beschreibbare Verzeichnisse, um zwischengespeicherte Dateien und Uploads zu speichern. Daher müssen die vom Benutzer * deployer * erstellten Verzeichnisse vom Nginx-Webserver beschreibbar sein. Fügen Sie dazu den Benutzer der Gruppe * www-data * hinzu:

sudo usermod -aG www-data deployer

Die Standardberechtigung für Dateien, die vom Benutzer * deployer * erstellt wurden, sollte + 644 + für Dateien und + 755 + für Verzeichnisse sein. Auf diese Weise kann der Benutzer * deployer * die Dateien lesen und schreiben, während die Gruppe und andere Benutzer sie lesen können.

Setzen Sie dazu die Standard-Umask von * deployer * auf + 022 +:

sudo chfn -o umask=022 deployer

Wir speichern die Anwendung im Verzeichnis "+ / var / www / html / +". Ändern Sie daher den Eigentümer des Verzeichnisses in den Benutzer "* deployer " und die Gruppe " www-data *".

sudo chown deployer:www-data /var/www/html

Der Benutzer * deployer * muss in der Lage sein, Dateien und Ordner im Verzeichnis + / var / www / html + zu ändern. Vor diesem Hintergrund sollten alle neuen Dateien und Unterverzeichnisse, die im Verzeichnis "+ / var / www / html" erstellt wurden, die Gruppen-ID des Ordners (* www-data *) erben. Um dies zu erreichen, legen Sie die Gruppen-ID in diesem Verzeichnis mit dem folgenden Befehl fest:

sudo chmod g+s /var/www/html

Deployer klont das Git-Repo mithilfe von SSH auf den Produktionsserver. Sie möchten also sicherstellen, dass die Verbindung zwischen Ihrem LEMP-Server und dem Git-Server sicher ist. Wir verwenden denselben Ansatz wie für unseren lokalen Computer und generieren einen SSH-Schlüssel für den Benutzer * deployer *.

Wechseln Sie zum Benutzer * deployer * auf Ihrem Server:

su - deployer

Generieren Sie als Nächstes ein SSH-Schlüsselpaar als Benutzer * deployer *. Dieses Mal können Sie den Standarddateinamen der SSH-Schlüssel akzeptieren:

ssh-keygen -t rsa -b 4096

Zeigen Sie den öffentlichen Schlüssel an:

cat ~/.ssh/id_rsa.pub

Kopieren Sie den öffentlichen Schlüssel und fügen Sie ihn wie im vorherigen Schritt zu Ihrem Git-Server hinzu.

Ihr lokaler Computer kommuniziert auch über SSH mit dem Server. Generieren Sie daher SSH-Schlüssel für den Benutzer * deployer * auf Ihrem lokalen Computer und fügen Sie den öffentlichen Schlüssel zum Server hinzu.

Führen Sie auf Ihrem * lokalen * Rechner den folgenden Befehl aus. Fühlen Sie sich frei, durch einen Dateinamen Ihrer Wahl zu ersetzen:

ssh-keygen -t rsa -b 4096 -f  ~/.ssh/

Kopieren Sie die Ausgabe des folgenden Befehls, die den öffentlichen Schlüssel enthält:

cat ~/.ssh/.pub

Führen Sie auf * Ihrem * Server als * Bereitstellungsbenutzer * Folgendes aus:

nano ~/.ssh/authorized_keys

Fügen Sie den öffentlichen Schlüssel in den Editor ein und drücken Sie "+ CTRL-X ", " Y " und dann " ENTER +", um zu speichern und zu beenden.

Beschränken Sie die Berechtigungen der Datei:

chmod 600 ~/.ssh/authorized_keys

Wechseln Sie nun zurück zum Benutzer sudo:

exit

Jetzt kann Ihr Server eine Verbindung zum Git-Server herstellen und Sie können sich mit dem Benutzer * deployer * von Ihrem lokalen Computer aus beim Server anmelden.

Melden Sie sich von Ihrem lokalen Computer an Ihrem Server als Benutzer * deployer * an, um die Verbindung zu testen:

ssh deployer@  -i ~/.ssh/

Nachdem Sie sich als * deployer * angemeldet haben, testen Sie auch die Verbindung zwischen Ihrem Server und dem Git-Server:

ssh -T

Beenden Sie schließlich den Server:

exit

Von hier aus können wir Nginx und MySQL auf unserem Webserver konfigurieren.

Schritt 4 - Konfigurieren von Nginx

Wir sind jetzt bereit, den Webserver zu konfigurieren, der die Anwendung bedienen soll. Dazu müssen Sie das Stammverzeichnis und die Verzeichnisstruktur des Dokuments konfigurieren, in denen die Laravel-Dateien gespeichert werden. Wir werden Nginx so einrichten, dass unsere Dateien aus dem Verzeichnis "+ / var / www / laravel +" bereitgestellt werden.

Zuerst müssen wir eine server block configuration erstellen Datei für die neue Site.

Melden Sie sich als sudo-Benutzer beim Server an und erstellen Sie eine neue Konfigurationsdatei. Denken Sie daran, durch Ihren eigenen Domainnamen zu ersetzen:

sudo nano /etc/nginx/sites-available/

Fügen Sie oben in der Konfigurationsdatei einen "+ server +" - Block hinzu:

example.com ’> / etc / nginx / sites-available /

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

       root /var/www/html//current/public;
       index index.php index.html index.htm index.nginx-debian.html;

       server_name  www.;
}

Die beiden Direktiven "+ listen " oben teilen Nginx mit, welche Ports abgehört werden sollen, und die Direktive " root " definiert den Document Root, in dem Laravel installiert wird. Das ` current / public ` im Pfad des Stammverzeichnisses ist ein symbolischer Link, der auf die neueste Version der Anwendung verweist. Durch Hinzufügen der Direktive " index " weisen wir Nginx an, zuerst alle " index.php " - Dateien bereitzustellen, bevor sie nach ihren HTML-Gegenstücken suchen, wenn sie einen Verzeichnisspeicherort anfordern. Nach der Anweisung " Servername +" sollten Ihre Domain und alle zugehörigen Aliase angegeben werden.

Wir sollten auch die Art und Weise ändern, wie Nginx Anfragen behandelt. Dies geschieht mit der Direktive + try_files +. Es soll versucht werden, die Anforderung zuerst als Datei zu verarbeiten. Wenn keine Datei mit dem richtigen Namen gefunden wird, sollte versucht werden, die Standardindexdatei für ein Verzeichnis bereitzustellen, das der Anforderung entspricht. Andernfalls sollte die Anforderung als Abfrageparameter an die Datei "+ index.php +" übergeben werden.

example.com ’> / etc / nginx / sites-available /

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

       root /var/www/html//current/public;
       index index.php index.html index.htm index.nginx-debian.html;

       server_name  www.;

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

Als nächstes müssen wir einen Block erstellen, der die eigentliche Ausführung von PHP-Dateien übernimmt. Dies gilt für alle Dateien, die mit .php enden. Es wird versucht, die Datei selbst und dann als Parameter an die Datei + index.php + zu übergeben.

Wir werden die Direktiven + fastcgi + setzen, um Nginx anzuweisen, anstelle des symbolischen Links den tatsächlichen Pfad der Anwendung zu verwenden (aufgelöst, nachdem dem symbolischen Link gefolgt wurde). Wenn Sie diese Zeilen nicht zur Konfiguration hinzufügen, wird der Pfad, in dem die symbolischen Verknüpfungspunkte zwischengespeichert werden, angezeigt. Dies bedeutet, dass eine alte Version Ihrer Anwendung nach der Bereitstellung geladen wird. Ohne diese Anweisungen müssten Sie den Cache nach jeder Bereitstellung manuell leeren, und Anforderungen an Ihre Anwendung können möglicherweise fehlschlagen. Darüber hinaus stellt die Direktive "+ fastcgi_pass " sicher, dass Nginx den Socket verwendet, den php7-fpm für die Kommunikation verwendet, und dass die Datei " index.php +" als Index für diese Operationen verwendet wird.

example.com ’> / etc / nginx / sites-available /

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

       root /var/www/html//current/public;
       index index.php index.html index.htm index.nginx-debian.html;

       server_name  www.;

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


       location ~ \.php$ {







       }

Schließlich möchten wir sicherstellen, dass Nginx keinen Zugriff auf versteckte + .htaccess + Dateien erlaubt. Dazu fügen wir einen weiteren location-Block mit dem Namen "+ location ~ / \. Ht " hinzu und in diesem Block eine Direktive, die " deny all; +" angibt.

Nach dem Hinzufügen dieses letzten Standortblocks sieht die Konfigurationsdatei folgendermaßen aus:

example.com ’> / etc / nginx / sites-available /

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

       root /var/www/html//current/public;
       index index.php index.html index.htm index.nginx-debian.html;

       server_name  www.;

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


       location ~ \.php$ {
               include snippets/fastcgi-php.conf;

               fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
               fastcgi_param DOCUMENT_ROOT $realpath_root;

               fastcgi_pass unix:/run/php/php7.0-fpm.sock;

       }

       location ~ /\.ht {
               deny all;
       }

}

Speichern und schließen Sie die Datei (+ CTRL-X +, + Y +, dann + ENTER +) und aktivieren Sie den neuen Serverblock, indem Sie eine symbolische Verknüpfung zum Verzeichnis + sites-enabled + erstellen:

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

Testen Sie Ihre Konfigurationsdatei auf Syntaxfehler:

sudo nginx -t

Wenn Sie Fehler sehen, überprüfen Sie Ihre Datei erneut, bevor Sie fortfahren.

Starten Sie Nginx neu, um die erforderlichen Änderungen zu übernehmen:

sudo systemctl restart nginx

Der Nginx-Server ist jetzt konfiguriert. Als Nächstes konfigurieren wir die MySQL-Datenbank der Anwendung.

Schritt 5 - Konfiguration von MySQL

Nach der Installation erstellt MySQL standardmäßig einen * root * -Benutzer. Dieser Benutzer verfügt jedoch über unbegrenzte Berechtigungen. Es ist daher eine schlechte Sicherheitsmethode, den Benutzer * root * für die Datenbank Ihrer Anwendung zu verwenden. Stattdessen erstellen wir die Datenbank für die Anwendung mit einem dedizierten Benutzer.

Melden Sie sich bei der MySQL-Konsole als * root * an:

mysql -u root -p

Dies fordert Sie zur Eingabe des Passworts * root * auf.

Erstellen Sie als Nächstes eine neue Datenbank für die Anwendung:

CREATE DATABASE  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Erstellen Sie dann einen neuen Datenbankbenutzer. Für die Zwecke dieses Tutorials rufen wir diesen Benutzer "" mit dem Kennwort "" auf, obwohl Sie das Kennwort durch ein sicheres Kennwort Ihrer Wahl ersetzen sollten.

CREATE USER ''@'localhost' IDENTIFIED BY '';

Gewähren Sie dem Benutzer Berechtigungen für die Datenbank:

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

Laden Sie als Nächstes die Berechtigungen neu:

FLUSH PRIVILEGES;

Und zum Schluss verlassen Sie die MySQL-Konsole:

EXIT;

Die Datenbank und der Benutzer Ihrer Anwendung sind jetzt konfiguriert und Sie sind fast bereit, Ihre erste Bereitstellung auszuführen.

Schritt 6 - Bereitstellung der Anwendung

Bisher haben Sie alle Tools und Programme konfiguriert, die Deployer benötigt, um zu funktionieren. Vor der ersten Bereitstellung müssen Sie lediglich die Konfiguration Ihrer Laravel-App und des Deployers selbst abschließen und die App initialisieren und auf Ihr entferntes Git-Repository übertragen.

Öffnen Sie das Terminal auf Ihrem * lokalen Computer * und ändern Sie das Arbeitsverzeichnis in den Ordner der Anwendung mit dem folgenden Befehl:

cd

Führen Sie in diesem Verzeichnis den folgenden Befehl aus, der eine Datei mit dem Namen "+ deploy.php " im Ordner "+" erstellt, die Konfigurationsinformationen und Aufgaben für die Bereitstellung enthält:

dep init -t Laravel

Öffnen Sie als nächstes die Datei + deploy.php + mit Ihrem bevorzugten Texteditor oder Ihrer IDE. Die dritte Zeile enthält ein PHP-Skript, das die erforderlichen Aufgaben und Konfigurationen zum Bereitstellen einer Laravel-Anwendung enthält:

deploy.php

<?php
namespace Deployer;

require 'recipe/laravel.php';

. . .

Darunter befinden sich einige Felder, die Sie bearbeiten sollten, um sie an Ihre Konfiguration anzupassen:

  • Fügen Sie unter + // Projektname + den Namen Ihres Laravel-Projekts hinzu.

  • Fügen Sie unter + // Project Repository + den Link zu Ihrem Git-Repository hinzu.

  • Fügen Sie im Abschnitt "+ // Hosts " die IP-Adresse oder den Domänennamen Ihres Servers der Direktive " host () " hinzu, den Namen Ihres Deployer-Benutzers (in unseren Beispielen * deployer *) dem Benutzer "" (). + Direktive. Sie sollten auch den in Schritt 3 erstellten SSH-Schlüssel zur Direktive `+ identityFile () + hinzufügen. Schließlich sollten Sie den Dateipfad des Ordners hinzufügen, der Ihre Anwendung enthält.

Wenn Sie mit der Bearbeitung dieser Felder fertig sind, sollten sie folgendermaßen aussehen:

deploy.php

...
// Project name
set('application', '');

// Project repository
set('repository', '');

. . .

// Hosts

host('')

   ->identityFile('~/.ssh/')
   ->set('deploy_path', '/var/www/html/');

Kommentieren Sie als nächstes die letzte Zeile der Datei aus, + vor ('deploy: symlink', 'artisan: migrate'); +. In dieser Zeile wird Deployer angewiesen, die Datenbankmigrationen automatisch auszuführen. Indem wir sie auskommentieren, deaktivieren wir sie. Wenn Sie es nicht auskommentieren, schlägt die Bereitstellung fehl, da für diese Zeile die entsprechenden Datenbankanmeldeinformationen auf dem Server erforderlich sind. Diese können nur mithilfe einer Datei hinzugefügt werden, die während der ersten Bereitstellung generiert wird:

deploy.php

...
// Migrate database before symlink new release.

//before('deploy:symlink', 'artisan:migrate');

Bevor wir das Projekt bereitstellen können, müssen wir es zuerst in das entfernte Git-Repository übertragen.

Ändern Sie auf Ihrem * lokalen * Computer das Arbeitsverzeichnis in den Ordner Ihrer Anwendung:

cd

Führen Sie den folgenden Befehl in Ihrem ++ Verzeichnis aus, um ein Git-Repository im Projektordner zu initialisieren:

git init

Fügen Sie als Nächstes alle Projektdateien zum Repository hinzu:

git add .

Übernehmen Sie die Änderungen:

git commit -m ''

Fügen Sie Ihren Git-Server mit dem folgenden Befehl zum lokalen Repository hinzu. Achten Sie darauf, den hervorgehobenen Text durch die URL Ihres eigenen Remote-Repositorys zu ersetzen:

git remote add origin

Übertragen Sie die Änderungen in das entfernte Git-Repository:

git push origin master

Führen Sie schließlich Ihre erste Bereitstellung mit dem Befehl "+ dep +" aus:

dep deploy

Wenn alles gut geht, sollten Sie eine Ausgabe wie diese mit + Erfolgreich implementiert! + Am Ende sehen:

Deployer's output✈︎ Deploying master on
✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
➤ Executing task deploy:update_code
✔ Ok
✔ Executing task deploy:shared
✔ Executing task deploy:vendors
✔ Executing task deploy:writable
✔ Executing task artisan:storage:link
✔ Executing task artisan:view:clear
✔ Executing task artisan:cache:clear
✔ Executing task artisan:config:cache
✔ Executing task artisan:optimize
✔ Executing task deploy:symlink
✔ Executing task deploy:unlock
✔ Executing task cleanup
Successfully deployed!

Die folgende Struktur wird auf Ihrem Server im Verzeichnis + / var / www / html / + erstellt:

├── .dep
├── current -> releases/1
├── releases
│   └── 1
└── shared
   ├── .env
   └── storage

Überprüfen Sie dies, indem Sie den folgenden Befehl * auf Ihrem Server * ausführen, der die Dateien und Verzeichnisse im Ordner auflistet:

ls /var/www/html/
Outputcurrent  .dep  releases  shared

Die folgenden Dateien und Verzeichnisse sind jeweils enthalten:

  • Das Verzeichnis "+ releases +" enthält Bereitstellungsversionen der Laravel-Anwendung.

  • + current + ist ein Symlink zur letzten Veröffentlichung.

  • Das Verzeichnis + .dep + enthält spezielle Metadaten für Deployer.

  • Das Verzeichnis "+ shared " enthält die Konfigurationsdatei " .env " und das Verzeichnis " storage +", das mit jeder Version verknüpft wird.

Die Anwendung funktioniert jedoch noch nicht, da die Datei + .env + leer ist. Diese Datei enthält wichtige Konfigurationen wie den Anwendungsschlüssel - eine zufällige Zeichenfolge für die Verschlüsselung. Wenn dies nicht festgelegt ist, sind Ihre Benutzersitzungen und andere verschlüsselte Daten nicht sicher. Die App hat eine "+ .env " -Datei auf Ihrem * lokalen Rechner *, aber Laravels " .gitignore " -Datei schließt sie vom Git-Repository aus, da das Speichern vertraulicher Daten wie Passwörter in einem Git-Repository keine gute Idee ist. Die Anwendung erfordert unterschiedliche Einstellungen auf Ihrem Server. Die Datei ` .env +` enthält auch die Einstellungen für die Datenbankverbindung. Aus diesem Grund haben wir die Datenbankmigrationen für die erste Bereitstellung deaktiviert.

Lassen Sie uns die Anwendung auf Ihrem Server konfigurieren.

Melden Sie sich als Benutzer * deployer * bei Ihrem Server an:

ssh deployer@  -i ~/.ssh/

Führen Sie den folgenden Befehl * auf Ihrem Server * aus und kopieren Sie die lokale Datei + .env + in den Editor:

nano /var/www/html//shared/.env

Bevor Sie es speichern können, müssen Sie einige Änderungen vornehmen. Setzen Sie "+ APP_ENV " auf " production", "+ APP_DEBUG" auf "+ false", "+ APP_LOG_LEVEL" auf "+ error " und vergessen Sie nicht, die Datenbank, den Datenbankbenutzer und das Kennwort durch Ihr eigenes zu ersetzen. Sie sollten `+` auch durch Ihre eigene Domain ersetzen:

/var/www/html/laravel-app/shared/.env

APP_NAME=Laravel
APP_ENV=
APP_KEY=base64:cA1hATAgR4BjdHJqI8aOj8jEjaaOM8gMNHXIP8d5IQg=
APP_DEBUG=
APP_LOG_LEVEL=
APP_URL=http://

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Speichern Sie die Datei und schließen Sie den Editor.

Kommentieren Sie nun die letzte Zeile der Datei "+ deploy.php +" auf Ihrem lokalen Computer aus:

deploy.php

...
// Migrate database before symlink new release.

before('deploy:symlink', 'artisan:migrate');

Stellen Sie die Anwendung erneut bereit, um zu überprüfen, ob diese Konfiguration funktioniert. Führen Sie den folgenden Befehl * auf Ihrem lokalen Computer * aus:

dep deploy

Jetzt funktioniert Ihre Anwendung ordnungsgemäß. Wenn Sie den Domainnamen () Ihres Servers aufrufen, wird die folgende Zielseite angezeigt:

Sie müssen die Datei "+ .env +" auf Ihrem Server nicht vor allen Bereitstellungen bearbeiten. Eine typische Bereitstellung ist nicht so kompliziert wie die erste und erfolgt mit nur wenigen Befehlen.

Schritt 7 - Ausführen einer typischen Bereitstellung

Abschließend wird in diesem Abschnitt ein einfacher Bereitstellungsprozess beschrieben, den Sie täglich ausführen können.

Ändern Sie zunächst die Anwendung, bevor Sie sie erneut bereitstellen. Sie können beispielsweise eine neue Route in die Datei + routes / web.php + einfügen:

/routes/web.php

<?php

. . .

Route::get('/', function () {
   return view('welcome');
});

Übernehmen Sie diese Änderungen:

git commit -am 'Your commit message.'

Übertragen Sie die Änderungen in das entfernte Git-Repository:

git push origin master

Und schließlich stellen Sie die Anwendung bereit:

dep deploy

Sie haben die Anwendung erfolgreich auf Ihrem Server bereitgestellt.

Fazit

Sie haben Ihren lokalen Computer und Ihren Server so konfiguriert, dass Ihre Laravel-Anwendung ohne Ausfallzeiten bereitgestellt werden kann. Der Artikel behandelt nur die Grundlagen von Deployer und bietet viele nützliche Funktionen. Sie können auf mehreren Servern gleichzeitig bereitstellen und Aufgaben erstellen. Sie können beispielsweise eine Aufgabe angeben, um die Datenbank vor der Migration zu sichern. Weitere Informationen zu den Funktionen von Deployer finden Sie unter Deployer documentation.