Linux Server setup

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.