In dieser Dokumentation geht es darum, wie eine Laravel Web-Anwendung bzw. einfach eine Homepage, entwickelt in Laravel-framework, mithilfe eines sogenannten LEMP-Stacks auf einem Virtuellen Privaten Server (VPS), eingerichtet werden kann.
Das Akronym „LEMP“ ist eine Abkürzung für:
und steht für den Stapel von Technologien, die zur Bereitstellung, der auf dem lokalen Rechner entwickelten Web-Anwendung, verwendet werden. LEMP ist im Grunde dasselbe wie LAMP-Stack, mit dem Unterschied, dass an Stelle von Apache-Servers, ein Nginx-Server aufgesetzt ist (ausgesprochen „Engine-X“, wodurch in LAMP das „A“ durch „E“ ersetzt wird).
1. Auf dem VPS als root-User anmelden:
ssh root@server_ip_addresse
2. Einen user hinzufügen (z.B. „bender“)
adduser bender
3. Passwort festlegen und erneut eingeben, andere Angaben können leer gelassen werden
Enter new UNIX password:
Retype new UNIX password:
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
4. User der Sudo-Gruppe zuordnen:
usermod -aG sudo bender
SSH oder Secure Shell ist ein verschlüsseltes Protokoll zur Verwaltung und Kommunikation mit Servern.
Der erste Schritt besteht darin, ein Schlüsselpaar auf dem lokalen Rechner zu erstellen:
ssh-keygen
Standardmäßig erstellt ssh-keygen ein 2048-Bit-RSA-Schlüsselpaar, das für die meisten Anwendungsfälle sicher genug ist. Es kann optional der Parameter -b 4096 übergeben werden, um einen noch sicheren 4096-Bit-Schlüssel zu erstellen.
Nach Eingabe des Befehls sollte die folgende Ausgabe angezeigt werden:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Wenn ein SSH-Schlüsselpaar bereits existiert, wird folgende Eingabeaufforderung angezeigt:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
ACHTUNG!
Wenn der Schlüssel auf der Festplatte überschreiben wird, kann mit dem vorherigen Schlüssel nicht mehr authentifiziert werden. Der Prozess kann nicht rückgängig gemacht werden!
Als nächstes muss die Passphrase eingegeben werden
Enter passphrase (empty for no passphrase):
Mit einer Passphrase wird eine zusätzliche Sicherheitsebene hinzugefügt, um zu verhindern, dass sich nicht autorisierte Benutzer am VPS anmelden können.
Dann wird folgende Ausgabe angezeigt:
Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
Die beste Möglichkeit, den öffentlichen Schlüssel auf Host-Server zu kopieren, ist die Verwendung von ssh-copy-id Tool.
Um das Tool zu verwenden, müssen lediglich User und Remote-Host, zu dem die Verbindung hergestellt werden soll, eingegeben werden.
ssh-copy-id username@server_ip_addresse
Als Resultat wird der öffentlicher SSH-Schlüssel auf den Ziel-Server kopiert.
Danach wird folgende Meldung angezeigt:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Das bedeutet, dass der lokale Rechner den Remote-Host nicht erkennt. Dies geschieht, wenn eine Verbindung zum ersten Mal zu einem neuen Host aufgebaut wird. Mit „yes + ENTER“ bestätigen.
Als nächstes durchsucht das ssh-copy-id Tool den lokalen Rechner nach dem Öffentlichen-Schlüssel id_rsa.pub, der zuvor erstellt wurden war. Ist der Schlüssel gefunden, muss das Passwort für den User des Remote-Servers eingegeben werden:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@10.10.10.10's password:
Nun wird mit dem eingegebenen Passwort die Verbindung zum Remote-Host hergestellt. Anschließend wird der Inhalt Ihres Schlüssels ~/.ssh/id_rsa.pub in die Datei im Stammverzeichnis ~/.ssh des Remote-Servers namens authorized_keys kopiert mit der darauffolgenden Ausgabe:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@10.10.10.10'"
and check to make sure that only the key(s) you wanted were added.
Der grundlegende Anmelde-Prozess ist unverändert geblieben.
ssh username@remote_host
Bei erstmaligem Verbindungsaufbau, wird folgende Meldung angezeigt:
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
was bedeutet, dass der lokale Rechner den Remote-Host nicht erkennt. Mit „yes + ENTER“ bestätigen.
Falls beim Erstellen des RSA-Schlüssels eine Passphrase für den privaten Schlüssel eingegeben wurde, muss diese jetzt eingegeben werden.
$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
Nach der Authentifizierung wird eine neue Shell-Sitzung mit dem Host-Server geöffnet.
Bevor Nginx installiert wird, soll nach Updates gesucht und ggf. installiert werden:
sudo apt-get update
Nun kann die Installation von Nginx gestartet werden:
sudo apt-get install nginx
...
After this operation, 8,398 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Mit „Y + ENTER“ bestätigen.
Nachdem die installation fertig gestellt ist, kann die IP-Adresse des Host-Servers aufgerufen werden, wobei die Standard-Ausgabe von Nginx index.html angezeigt wird.
Nachdem Web-Server aufgesetzt ist, kann MySQL Datenband-Server installiert werden:
sudo apt-get install mysql-server
...
After this operation, 305 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Mit „Y + ENTER“ bestätigen.
Im Anschluß kann MySQL ohne Passwort gestartet werden
was aber nicht erwünscht ist. Demnach soll die DB-Zugriff abgesichert werden:
sudo mysql_secure_installation
...
Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Y
Mit „Y + ENTER“ bestätigen.
Als nächstes wird Stärke des Passwortes festgelegt, normallerweise genügt die Option 1 = MEDIUM, doch das ist natürlich jedem selbst überlassen.
Direkt danach wird das neue Passwort festgelegt. Erneute Eingabe dient dabei als Sicherung, dass keine Tipp-Fehler vorhanden sind:
...
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Ist das Passwort sicher genug, bestätigen mit „Y + ENTER“.
Weitere Abfragen werden wiederum mit „Y + ENTER“ bestätigt.
...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
...
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
Nun kann die MySQL-DB mit root-User und dazugehörigen Passwort gestartet werden:
root@vmd74931:~# mysql -u root -p
Enter password:
...
mysql>
oder mit eingeblendetem Passwort (nicht empfohlen, besonders wenn „Zuschauer“ gegenwärtig sind):
Fertig mit der Installation von MySQL!
Beim lezten Punkt von „LEMP“ werden folgende PHP-Plugins installiert:
sudo apt-get install php-fpm php-mysql php-mbstring php-xml php-curl
...
After this operation, 20.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Mit „Y + ENTER“ bestätigen.
PHP-Installation ist fertig und somit auch LEMP-Stack!
Nachdem alles installiert ist, ist es notwendig folgende Postinstallations-Konfigurationen durchzuführen. Erst dann kann die Homepage über die Domain aufgerufen werden bzw. korrekt dargestellt.
Als erstes muss die /etc/php/7.0/fpm/php.ini konfiguriert werden. Dies erfolgt mittels folgenden Befehles:
sudo nano /etc/php/7.4/fpm/php.ini
Mit „Strg + W“ nach „cgi.fix_pathinfo=“ suchen, die entsprechende Zeile auskommentieren und den Wert auf „0“ setzen:
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern. Damit die Änderungen auch übernommen werden, den folgenden Befehl ausführen:
sudo systemctl restart php7.4-fpm
ACHTUNG!
Hier bitte auf die Version von php-fpm Paket achten!
Die gesamte Konfiguration, die vorgenommen werden muss, befindet sich in der /etc/nginx/sites-available/default Konfigurationsdatei:
sudo nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index
index.php
index.html index.htm index.nginx-debian.html;
server_name
example.com
;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
Nachdem die Datei gespeichert ist, soll sichergestellt werden, dass sie fehlerfrei ist:
sudo nginx -t
Wenn alles korrekt ist, ist folgende Ausgabe zu erwarten:
nginx: the configuration file /etc/nginx/nginx.conf
syntax is ok
nginx: configuration file /etc/nginx/nginx.conf
test is successful
Damit die Änderungen wirksam sind, muss Nginx neu gestartet werden:
sudo systemctl reload nginx
Mit diesen Einstellungen kann jetzt jede PHP-Anwendung bereitgestellt werden. Der Server ist so eingerichtet, dass er diese akzeptiert und bereitstellt.
Standardmäßig wird Nginx in unserem Ordner /var/www/ als Stammverzeichnis für die Bereitstellung von Dateien angezeigt. Also wird hier ein weiterer Ordner mit dem Namen laravel hinzugefügt (anstelle ‘laravel’ Projektname o.ä.) und dort die zu deployende Laravel-App platziert.
sudo mkdir -p /var/www/laravel
Nun muss Nginx mitgeteilt werden, wo sich die Standardseite befindet, die ausgeführt werden soll, wenn eine Webanforderung vorliegt, nämlich wo sich die index.php befindet.
Um Nginx zu aktualisieren, muss wieder die /../sites-available/default Datei konfiguriert werden:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www
/laravel/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com;
location / {
try_files $uri $uri/
/index.php?$query_string
;
}
...
}
Die Datei index.php sammelt die Abfragedaten, um sie an Laravel zu übergeben. Nun muss die Abfragezeichenfolge an das Ende der index.php angehängt werden (z.B. example.com/phpMyAdmin). Dies wird nach $uri und $uri / getan, damit etwas ausgeführt werden kann, bevor es zu Laravel gelangt, wenn es etwas gibt, das Laravel überschreiben muss. Fehler-404 wird auch entfernt, damit Laravel entscheiden kann, ob etwas mit einem 404-Fehler geantwortet werden muss.
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
Damit die Änderungen wirksam sind, muss Nginx wieder neu gestartet werden:
sudo systemctl reload nginx
Composer wird mittels folgender Befehle installiert:
cd ~
curl -sS https://getcomposer.org/installer | php
Composer nach /usr/local/bin/composer verschieben, damit Composer-Befehle einfacher verwendet werden können.
sudo mv composer.phar /usr/local/bin/composer
Falls Git auf dem Server nicht installiert ist, bitte folgenden Befehl ausführen:
apt install git
Git wird jetzt auf dem Server in einen Ordner namens /var/repo/ installiert, der sich in der Nähe von Laravel-Ordner /var/www/laravel/ befindet. Als nächstes wird der Ordner erstellt und gleichzeitig darein gewechselt:
cd /var
mkdir repo && cd repo
Anschließend fortfahren mit folgendem Befehl:
mkdir site.git && cd site.git
git init --bare
Das Flag --bare wird hauptsächlich nur auf Servern verwendet. Ein nacktes Repo ist eine spezielle Art von Repo, dessen einziger Zweck darin besteht, Pushes von Entwicklern zu erhalten.
Mehr Informationen über Git hier.
Die Hook-Funktion ermöglicht das Verschieben der Dateien nach einem Git-Push. Bei Git stehen drei Hooks zur Verfügung: Pre-Receive, Post-Receive und Update.
Hier wird Post-Receive-Hook benutzt, der ausgelöst wird, nachdem das Repo die Dateien vollständig heruntergeladen und einen Push erhalten hat.
Dafür in das Hooks-Verzeichnis wechseln (in unserem site.git-Ordner). Und erstellen das Post-Receive-Skript:
cd hooks/
da es noch keine Datei namens post-receive gibt
wird diese im nächsten Schritt erstellt:
sudo nano post-receive
Darrein folgenden Inhalt einfügen:
#!/bin/sh
git --work-tree=/var/www/laravel --git-dir=/var/repo/site.git checkout -f
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
Der --work-tree= teilt Git mit, wohin empfangene Dateien nach Abschluss kopiert werden sollen.
Das --git-dir= teilt Git mit, wo sich das nackte git-Verzeichnis befindet, das die Dateien empfangen hat.
Die Post-Receive-Datei benötigt Ausführungsberechtigungen, um diese Dateien zu kopieren (bitte sicherstellen, dass man sich noch im Ordner /var/repo/site.git/hooks/ befinden):
sudo chmod +x post-receive
Fertig! Wenn jetzt auf dieses Repository auf dem VPS gepusht wird, werden die Dateien in das Verzeichnis /var/www/laravel/ abgelegt, und Nginx kann beginnen, diese bereitzustellen.
Falls noch nicht geschehen, das gewünschte Projekt in VSCode öffnen:
Sicherstellen, dass man sich im richtigen Ordner befindet:
und anschließend folgenden Befehl ausführen:
git remote add production ssh://root@example.com/var/repo/site.git
dabei wird das fett-markierte entweder durch die IP-Adresse von VPS oder die Domäne ersetzt.
Sollte die Fehlermeldung „fatal: remote production already exists.“ kommen
bitte mit folgendem Befehl erst das existierende „remote production“ entfernen:
git remote remove production
und die oben beschriebene Aktion wiederholen.
Der Befehl schließt die Einrichtung des lokalen Rechners ab:
git push production master
Es soll sichergestellt werden, dass der Code am richtigen Ort ist. Dieser sollte sich im Ordner /var/www/laravel/ auf Host-Server befinden. Es ist einfach zu überprüfen:
1. sich wieder bei Ihrem Server anmelden
ssh root@server_ip_addresse
2. und das Verzeichnis ansehen
cd /var/www/laravel
ll
Wenn alles richtig funktioniert hat, sollte folgende Ausgabe erfolgen:
Nachdem Laravel und alle benötigten Dateien auf dem Server sind, kann Composer installiert werden. In das Verzeichnis /var/www/laravel/ wechseln, wenn Composer-Befehle ausgeführt werden.
cd /var/www/laravel
composer install --no-dev
Der Parameter --no-dev ist sehr wichtig. Denn ohne diesen wird Composer versuchen, eine Reihe von Komponenten zu installieren, die für die Produktion nicht benötigt werden. Es ist auch sehr wahrscheinlich, dass die Installation ebenfalls fehlschlägt, da einige der Entwicklungsabhängigkeiten auf dem VPS nicht funktionieren.
Zum Ausführen benötigt Nginx bestimmte Berechtigungen für das erstellte Laravel-Verzeichnis.
sudo chown -R :www-data /var/www/laravel
Jetzt besitzt die Webgruppe die Dateien anstelle des Root-Benutzers. Als nächstes müssen der Webgruppe Schreibrechte für das Ablageverzeichnis erteilt werden, damit sie in diesen Ordner schreiben kann. Hier werden Protokolldateien, Cache und sogar Datei-Uploads abgelegt / gespeichert.
sudo chmod -R 775 /var/www/laravel/storage
sudo chmod -R 775 /var/www/laravel/public/img
Laut Laravel-Installationsdokumentation benötigt auch das Verzeichnis /boostrap/cache/ Schreibrechte
sudo chmod -R 775 /var/www/laravel/bootstrap/cache
Die Protokolldatei ist unter /var/www/laravel/storage/logs zu finden. Wie gewohnt kann diese mit nano angezeigt / editiert werden:
nano /var/www/laravel/storage/logs/laravel.log
Der Fehler besagt hier, dass noch kein Application Encryption Key spezifiziert wurde. Dies wird in den nachfolgenden Kapiteln korrigiert.
MySQL ist zwar installiert, aber es wurde noch keine Datenbank darin eingerichtet, um die Anwendungsdaten zu speichern. Erst dann kann die Datenbank konfiguriert und die Laravel Migrationen ausgeführt werden.
An MySQL anmelden:
mysql -u root -p
Enter password: ...
Der nachfolgende Befehl zeigt alle Datenbanken, die auf diesem System vorhanden sind (Semikolon nicht vergessen!).
mysql>
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.05 sec)
Jetzt muss eine neue Datenbank erstellen werden, damit Laravel-App verwendet werden kann. Den DB-Namen merken und alles in Kleinbuchstaben schreiben.
mysql> CREATE DATABASE laravel_db;
Query OK, 1 row affected (0.10 sec)
Um zu prüfen, ob die Datenbank korrekt angelegt wurde, bitte wieder den Show-Databases-Befehl ausführen.
Die einzige wichtige Datei in .gitignore, die die Laravel-Anwendung wirklich benötigt, ist die Datei .env. Dies ist wiederum beabsichtigt. Daher die .env aus der .gitignore nicht entfernen!
Die. env-Datei enthält private Informationen, Kennwörter, SMTP-Anmeldeinformationen, API-Schlüssel und mehr, die alle sehr geheim gehalten werden müssen. Deswegen sollte eine .env-Datei für dem Host-Server neu erstellt werden, die die Produktionsumgebung darstellt. Diese neuerstellte Datei unterscheidet sich von der auf dem lokalen Rechner, die wiederum Informationen für die lokale Umgebung enthält.
Beispielsweise kann mailtrap.io als lokaler Mailserver verwendet werden. Dies sind also die Einstellungen, die in der lokalen .env-Datei unter den SMTP-Einstellungen vorgenommen waren. In der Produktion wird jedoch ein tatsächlicher SMTP-Server benötigt, um echte E-Mails zu senden.
In den Laravel-Ordner wechseln:
cd /var/www/laravel
und aus Standard .env.example die Produktions-Datei erstellen:
cp .env.example .env
Anschließend mit nano bearbeiten:
nano .env
...
APP_NAME=
Homepage-Name
APP_ENV=
production
APP_KEY=
APP_DEBUG=
false
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
laravel_db_name
DB_USERNAME=root
DB_PASSWORD=
laravel_db_passwort
...
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
Zeile „APP_KEY“ bzw der “Application Encryption Key“, sollte nicht manuell konfiguriert werden. Laravel benötigt diesen Schlüssel, um Sitzungen, Cookies und Passwörter zu verschlüsseln. Dies muss ein zufälliger Schlüssel sein, der für die Anwendung eindeutig ist, um alles sicherer zu machen.
Der Schlüssel wird mit folgendem Befehl erzeugt:
php artisan key:generate
Schaut man jetzt in die .env-Datei, so wird man feststellen, dass der Schlüssel dort automatisch hinzugefügt worden ist:
...
APP_NAME=Homepage-Name
APP_ENV=production
APP_KEY=
base64:7LWS++JIQQ32XxXXyYyYKJwDwF1/DYZZZZZbv4PccDU=
APP_DEBUG=false
APP_URL=http://localhost
...
In der config/app.php müssen noch einige Dinge bearbeitet werden. Sicherzustellen ist:
return [
'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
'url' => 'http://example.com',
'timezone' => 'Europe/Berlin,
'locale' => de',
'fallback_locale' => 'de',
[CONTINUES BELOW]
]
Die richtige Zeichenfolge für eine bestimmte Zeitzone kann auf www.php.net ermittelt werden.
Die Anwendung enthält viele Konfigurationsdateien. Sie erben und verweisen aufeinander, wodurch die Konfiguration leichter zu lesen ist, PHP jedoch langsamer im laufenden Betrieb kompiliert werden kann.
Aus diesem Grund empfiehlt es sich, alle Konfigurationseinstellungen in einer zwischengespeicherten Konfigurationsdatei zwischenzuspeichern:
(im Ordner /var/www/laravel/):
php artisan config:clear
php artisan config:cache
...
Configuration cache cleared!
Configuration cached successfully!
Damit die Web-Anwendung endlich ausgeführt werden kann, muss Datenbank migriert werden. Dies geschieht auf dieselbe Weise, wie auch auf dem lokalen Computer. Zu diesem Zeitpunkt sollten unsere Konfigurationsdateien alles enthalten, was wir zum Einrichten und Kommunizieren mit unserer Datenbank benötigen.
Daher sollte die Migration jetzt einfach sein:
php artisan migrate
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:
> yes
Falls eine Fehlermeldung wie
In Connection.php line 671:
SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost' (SQL: select * from information_schema.tables where table_schema = test_example and table_name = migrations and table_type = 'BASE TABLE')
In Connector.php line 70:
SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'
ausgegeben werden sollte, sind folgende Schritte auszuführen:
1. Anmelden an der MySQL:
root@server_ip:/var/www/laravel# mysql -u root
2. Admin-User mit Root-Privilegien anlegen:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'adminspassword';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
3. Exit and restart:
mysql> exit
sudo service mysql restart
systemctl restart nginx
4. Datei .env anpassen:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test_example
DB_USERNAME=admin
DB_PASSWORD=db_password
5. Laravel Cache leeren:
php artisan config:cache
...
Configuration cache cleared!
Configuration cached successfully!
6. Migration der Datenbank erneut ausführen:
php artisan migrate
Da die Web-Anwendung frisch aufgesetzt wurde, existiert noch kein Admin-User, mit dem die Einträge auf der Homepage hinzugefügt bzw. editiert werden können:
Deswegen kann so ein User auch mit einem artisan Befehl angelegt werden:
php artisan tinker
...
$user = new App\Models\User;
$user->name = 'Moritz Schwonder';
$user->email = 'moritz@example.com';
$user->password = Hash::make('password');
$user->save();
...
exit
Nun kann mit dem gerade angelegten User auf der Homepage als Administrator angemeldet werden.
Snap-Paket sollte bei Ubuntu 20.04 LTS vorinstalliert sein. Sollte dies nicht der Fall sein, so folgenden Befehl ausführen:
sudo apt install snapd
Sicherstellen, dass das Paket auf dem neusten Stand ist
sudo snap install core; sudo snap refresh core
Den Befehl in der Befehlszeile auf dem Computer ausführen, um Certbot zu installieren.
sudo snap install --classic certbot
Folgenden Anweisungen in der Befehlszeile auf dem Computer ausführen, um sicherzustellen, dass der Befehl certbot ausgeführt werden kann.
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Den Befehl ausführen, um ein Zertifikat zu erhalten, und lassen Sie Certbot die Nginx-Konfiguration automatisch bearbeiten, um es bereitzustellen, und aktivieren Sie den HTTPS-Zugriff in einem einzigen Schritt.
sudo certbot –nginx
Ausgabe:
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): email@example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: meine-hompage.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Die Certbot-Pakete auf Ihrem System werden mit einem Cron-Job oder einem System-Timer geliefert, der Ihre Zertifikate automatisch erneuert, bevor sie ablaufen. Sie müssen Certbot nicht erneut ausführen, es sei denn, Sie ändern Ihre Konfiguration. Sie können die automatische Verlängerung Ihrer Zertifikate testen, indem Sie diesen Befehl ausführen:
sudo certbot renew --dry-run
Nun sollte die Homepage automatisch mit https://example.com aufgerufen werden.
Das war's! 🤘