Laravel

Aus Stradinger - IT Wissenssammlung
Zur Navigation springen Zur Suche springen

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>