Laravel
Installieren und Konfigurieren in Verbindung mit Nginx, MySql unter Debian
Voraussetzung:
- Der LEMP-Stack mit MySQL ist installiert
- Composer ist installiert
1. Schritt (als root):
- System aktualisieren: apt update
- PHP-Pakete installieren: apt install php-mbstring php-xml php-bcmath
2. Schritt (als root):
- Erstellen einer Datenbank-Shell: mysql aufrufen
- Datenbank anlegen: mysql> CREATE DATABASE reiseliste;
- DB-Benutzer anlegen: mysql> CREATE USER 'reiseliste_benutzer'@'%' IDENTIFIED BY 'Passwort';
- Berechtigung erteilen: mysql> GRANT ALL ON reiseliste.* TO 'reiseliste_benutzer'@'%';
- Datenbank verlassen: mysql> exit
- Datenbank-Shell aufrufen: mysql -u reiseliste_benutzer -p
- Datenbanken anzeigen lassen: mysql> SHOW DATABASES;
- Neue Tabelle erstellen: mysql> CREATE TABLE reiseliste.orte ( id INT AUTO_INCREMENT, name VARCHAR(255), besucht BOOLEAN, PRIMARY KEY(id) );
- Tabelle mit Inhalt füllen: mysql> INSERT INTO reiseliste.orte (name, besucht) VALUES ("Tokyo", false), ("Budapest", true), ("Nairobi", false), ("Berlin", true), ("Lisbon", true), ("Denver", false), ("Moscow", false), ("Olso", false), ("Rio", true), ("Cincinnati", false), ("Helsinki", false);
- Tabelle testen: mysql> SELECT * FROM reiseliste.orte;
- Datenbank verlassen: mysql> exit
3. Schritt (als Web-Benutzer): Laravel-Anwendung erstellen
- In den Ordner /var/www navigieren: cd /var/www/
- Neue Laravel-Anwendung erzeugen: composer create-project --prefer-dist laravel/laravel reiseliste
- In den Ordner reiseliste: cd reiseliste
- Überprüfen ob alles installiert wurde: php artisan
4. Schritt (als Web-Benutzer):
- Projekt über die .env-Datei konfigurieren:
- Folgende Werte setzen: (der APP_KEY wird automatisch gesetzt und als APP_URL IP-Adresse des Webservers oder Domain angeben).
APP_NAME=Reiseliste
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=reiseliste
DB_USERNAME=reiseliste_benutzer
DB_PASSWORD=Passwort
...
5. Schritt (als root):
- Rechte im Verzeichnis reiseliste setzen: chown -R www-data.www-data /var/www/travellist/storage
- und: chown -R www-data.www-data /var/www/travellist/bootstrap/cache
- Nginx-Konfigurationsdatei anlegen: nano /etc/nginx/sites-available/reiseliste
- Konfigurationsdatei:
server {
listen 80;
server_name server_domain_or_IP;
root /var/www/reiseliste/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/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
- Verweis auf die Konfiguration setzen: ln -s /etc/nginx/sites-available/reiseliste /etc/nginx/sites-enabled/
- Testen ob die Konfiguration funktioniert: nginx -t
- Nginx neu starten: systemctl reload nginx
- Die Webseite über den Webbrowser aufrufen: http://server_domain_or_IP
6. Schritt (als Web-Benutzer): Laravel-Anwendung anpassen
- Es muss nun die Hauptroute der Anwendung bearbeitet werden um die Daten aus der Datenbank abzufragen und der Anwendung zur Verfügung zu stellen: nano routes/web.php
- Die Datei verändert man so ab:
<?php
use Illuminate\Support\Facades\DB;
Route::get('/', function () {
$visited = DB::select('select * from orte where besucht = ?', [1]);
$togo = DB::select('select * from orte where besucht = ?', [0]);
return view('travellist', ['visited' => $visited, 'togo' => $togo ] );
});
- Nun muss man die definieren, wie die Daten dargestellt werden. nano resources/views/travellist.blade.php
- Die Datei könnte so aussehen:
<html>
<head>
<title>Reiseliste</title>
</head>
<body>
<h1>Meine Reise-Bucket-Liste</h1>
<h2>Orte die ich noch gern besuchen würde</h2>
<ul>
@foreach ($togo as $newplace)
<li>{{ $newplace->name }} </li>
@endforeach
</ul>
<h2>Orte an denen ich schon war</h2>
<ul>
@foreach ($visited as $place)
<li> {{ $place->name }} </li>
@endforeach
</ul>
</body>
</html>