Laravel
Das PHP Webframework Laravel ist Open Source und folgt dem Model View Controller (MVC) Paradigma.
Wir beziehen den Laravel Quellcode über Composer. Als Datenbank verwenden wir MySQL.
Das Projektverzeichnis ist in meinem Beispiel /var/www/com.linuxserversetup.dev
.
Nächsten Schritte:
Laravel mit Composer installieren
Wir wechseln zunächst in das Webverzeichnis:
__$ cd /var/www/com.linuxserversetup.dev
Und löschen den Inhalt:
__$ rm -rf /var/www/com.linuxserversetup.dev/*
Und erstellen ein Laravel Projekt mit create-project
:
__$ composer create-project laravel/laravel ./
Das hat uns Laravel Projekt Dateien und Ordner in /var/www/com.linuxserversetup.dev
erzeugt. Nur sind diese von tom
erstellt worden und dadurch nicht in der Gruppe www-data
. Wir ändern das mit chgrp
, damit auch Apache Zugriff hat:
__$ sudo chgrp -R www-data /var/www/com.linuxserversetup.dev
Schauen wir kurz hinein:
__$ ls -la
Inhalt von /var/www/com.linuxserversetup.dev
:
drwxrwxr-x 12 tom www-data 4096 Jan 4 21:54 .
drwxr-xr-x 8 tom tom 4096 Jan 4 19:38 ..
drwxrwxr-x 7 tom www-data 4096 Jan 4 10:07 app
-rwxr-xr-x 1 tom www-data 1686 Jan 4 10:07 artisan
drwxrwxr-x 3 tom www-data 4096 Jan 4 10:07 bootstrap
-rw-rw-r-- 1 tom www-data 1745 Jan 4 10:07 composer.json
-rw-rw-r-- 1 tom www-data 289317 Jan 4 21:54 composer.lock
drwxrwxr-x 2 tom www-data 4096 Jan 4 10:07 config
drwxrwxr-x 5 tom www-data 4096 Jan 4 10:07 database
-rw-rw-r-- 1 tom www-data 258 Jan 4 10:07 .editorconfig
-rw-rw-r-- 1 tom www-data 950 Jan 4 21:54 .env
-rw-rw-r-- 1 tom www-data 899 Jan 4 10:07 .env.example
-rw-rw-r-- 1 tom www-data 111 Jan 4 10:07 .gitattributes
-rw-rw-r-- 1 tom www-data 207 Jan 4 10:07 .gitignore
-rw-rw-r-- 1 tom www-data 473 Jan 4 10:07 package.json
-rw-rw-r-- 1 tom www-data 1202 Jan 4 10:07 phpunit.xml
drwxrwxr-x 2 tom www-data 4096 Jan 4 10:07 public
-rw-rw-r-- 1 tom www-data 4051 Jan 4 10:07 README.md
drwxrwxr-x 6 tom www-data 4096 Jan 4 10:07 resources
drwxrwxr-x 2 tom www-data 4096 Jan 4 10:07 routes
-rw-rw-r-- 1 tom www-data 563 Jan 4 10:07 server.php
drwxrwxr-x 5 tom www-data 4096 Jan 4 10:07 storage
-rw-rw-r-- 1 tom www-data 194 Jan 4 10:07 .styleci.yml
drwxrwxr-x 4 tom www-data 4096 Jan 4 10:07 tests
drwxrwxr-x 44 tom www-data 4096 Jan 4 21:54 vendor
-rw-rw-r-- 1 tom www-data 559 Jan 4 10:07 webpack.mix.js
Uns interessiert als nächstes die Konfigurationsdatei .env
. Diese Einstellungen haben Vorang vor den Dateien im config
Ordner.
Werfen wir auch einen Blick in den Ordner config
:
__$ ls -la config
Inhalt von /var/www/com.linuxserversetup.dev/config
:
drwxrwxr-x 2 tom www-data 4096 Jan 4 10:07 .
drwxrwxr-x 12 tom www-data 4096 Jan 4 21:54 ..
-rw-rw-r-- 1 tom www-data 9418 Jan 4 10:07 app.php
-rw-rw-r-- 1 tom www-data 3666 Jan 4 10:07 auth.php
-rw-rw-r-- 1 tom www-data 1711 Jan 4 10:07 broadcasting.php
-rw-rw-r-- 1 tom www-data 3274 Jan 4 10:07 cache.php
-rw-rw-r-- 1 tom www-data 846 Jan 4 10:07 cors.php
-rw-rw-r-- 1 tom www-data 5054 Jan 4 10:07 database.php
-rw-rw-r-- 1 tom www-data 2282 Jan 4 10:07 filesystems.php
-rw-rw-r-- 1 tom www-data 1571 Jan 4 10:07 hashing.php
-rw-rw-r-- 1 tom www-data 3565 Jan 4 10:07 logging.php
-rw-rw-r-- 1 tom www-data 3577 Jan 4 10:07 mail.php
-rw-rw-r-- 1 tom www-data 2906 Jan 4 10:07 queue.php
-rw-rw-r-- 1 tom www-data 2289 Jan 4 10:07 sanctum.php
-rw-rw-r-- 1 tom www-data 950 Jan 4 10:07 services.php
-rw-rw-r-- 1 tom www-data 7041 Jan 4 10:07 session.php
-rw-rw-r-- 1 tom www-data 1053 Jan 4 10:07 view.php
Ein wichtiges Kommandozeilen Werkzeug für Laravel ist artisan
. Damit lässt sich zum Beispiel die Laravel Version anzeigen:
__$ php artisan -V
Ausgabe:
Laravel Framework 8.77.1
.env Datei editieren
Wir öffnen die Datei:
__$ nano .env
Und geben in dem Datenbank Abschnitt unsere Verbindungsdaten zu MySQL ein:
Auszug /var/www/com.linuxserversetup.dev/.env
. . .
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=tom
DB_PASSWORD=tom123
. . .
Speichern und schließen (STRG+s
, STRG+x
).
Bei Änderung an der Konfiguration, muss sie durch artisan
erneuert werden:
__$ php artisan config:clear
Über die Tinker Konsole testen wir, ob die Datenbank verbunden ist. Öffnen wir erst die Konsole:
__$ php artisan tinker
Psy Shell v0.10.12 (PHP 7.4.3 — cli) by Justin Hileman
__tinker
Eine neutrale Datenbank Funktion zum testen auslösen:
__tinker DB::connection()->getPdo();
Die Ausgabe sollte in etwa so aussehen:
=> PDO {#3528
inTransaction: false,
attributes: {
CASE: NATURAL,
ERRMODE: EXCEPTION,
AUTOCOMMIT: 1,
PERSISTENT: false,
DRIVER_NAME: "mysql",
SERVER_INFO: "Uptime: 64331 Threads: 2 Questions: 43 Slow queries: 0 Opens: 201 Flush tables: 3 Open tables: 120 Queries per second avg: 0.000",
ORACLE_NULLS: NATURAL,
CLIENT_VERSION: "mysqlnd 7.4.3",
SERVER_VERSION: "8.0.27-0ubuntu0.20.04.1",
STATEMENT_CLASS: [
"PDOStatement",
],
EMULATE_PREPARES: 0,
CONNECTION_STATUS: "127.0.0.1 via TCP/IP",
DEFAULT_FETCH_MODE: BOTH,
},
}
Beenden lässt sich Tinker mit q
:
__tinker q
Noch ein wichtiger Hinweis: Es wird empfohlen die .env
Datei nicht in Git Repositories aufzunehmen, da hier sensible Daten wie zum Beispiel Passwörter gespeicherten werden.
Nginx für Laravel konfigurieren
Den Nginx Serverblock für die Subdomain dev.linuxserversetup.com
hatten wir bereits in dem Kapitel Subdomain Server Block (dev) angelegt.
Nginx ist an dieser Stelle dafür verantwortlich HTTPS zu erzwingen und die Verbindung für die Subdomain zu verschlüsseln. Nun müssen wir den Server Block so abändern, dass die Kommunikation über die Domain zur Laravel Applikation hin- und auch zurückgeleitet wird.
__$ sudo nano /etc/nginx/sites-available/com.linuxserversetup.dev.conf
Die Nginx Konfiguration soll schließlich so aussehen:
/etc/nginx/sites-available/com.linuxserversetup.dev.conf
# force https
server {
listen 80;
server_name dev.linuxserversetup.com;
return 301 https://$server_name$request_uri;
}
# main block
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name dev.linuxserversetup.com;
root /var/www/com.linuxserversetup.dev/public;
index index.php index.htm;
location / {
proxy_pass http://127.0.0.1:3600;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
location ~* ^.*\.php$ {
proxy_pass http://127.0.0.1:3600;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
location ~ /\.(htaccess|git)(/.*|$) {
deny all;
}
ssl_certificate /etc/letsencrypt/live/dev.linuxserversetup.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dev.linuxserversetup.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/dev.linuxserversetup.com/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# dhparam
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# HSTS
add_header Strict-Transport-Security "max-age=31536000";
}
Damit die Konfiguration von Nginx übernommen wird, überprüfen wir die neuen Einstellungen und starten den Dienst neu:
__$ sudo nginx -t
__$ sudo systemctl restart nginx
Wenn die Nginx Konfiguration in Ordnung ist, sollte diese Rückmeldung kommen:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Laravel App starten und testen
Um die Laravel Applikation zu testen, brauchen wir nur die Domain dev.linuxserversetup.com
über einen Browser aufrufen.
Wenn alles richtig konfiguriert ist, dann sollte die Startseite des Laravel Webframeworks erscheinen.