Laravel Docker · 17 min read · Sep 23, 2025

Wie man Laravel mit Docker auf Ubuntu 22.04 installiert

Laravel ist ein kostenloses und Open-Source-PHP-Framework, das eine Reihe von Tools und Ressourcen bietet, um moderne PHP-Anwendungen zu erstellen. Mit einer Vielzahl kompatibler Pakete und Erweiterungen hat Laravel an Popularität gewonnen, und viele Entwickler haben es als ihr bevorzugtes Framework übernommen. Laravel bietet leistungsstarke Datenbanktools, einschließlich eines ORM (Object Relational Mapper) namens Eloquent und integrierte Mechanismen zur Erstellung von Datenbankmigrationen. Es wird mit einem Befehlszeilenwerkzeug namens Artisan geliefert, mit dem Entwickler neue Modelle, Controller und andere Anwendungsbestandteile erstellen können, was die gesamte Anwendungsentwicklung beschleunigt.

Die Containerisierung einer Anwendung bezieht sich auf den Prozess, eine Anwendung und ihre Komponenten so anzupassen, dass sie in leichten Umgebungen, die als Container bekannt sind, ausgeführt werden kann. Diese Anleitung verwendet Docker Compose, um eine Laravel-Anwendung für die Entwicklung zu containerisieren.

Wir werden drei Docker-Container für unsere Laravel-Anwendung erstellen.

  • Ein app-Dienst, der PHP 8.2-FPM ausführt
  • Ein db-Dienst, der MySQL 8.0 ausführt
  • Ein nginx-Dienst, der den app-Dienst verwendet, um PHP-Code zu parsen, bevor die Laravel-Anwendung dem Benutzer bereitgestellt wird

Wir werden auch ein SSL-Zertifikat für unsere Laravel-Website mit Let’s Encrypt erstellen.

Voraussetzungen

  • Ein Server, der Ubuntu 22.04 ausführt.
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf Ihren Server zeigt. Für unsere Zwecke verwenden wir example.com als Domainnamen.
  • Stellen Sie sicher, dass alles aktualisiert ist. $ sudo apt update
  • Installieren Sie grundlegende Dienstprogramme. Einige davon sind möglicherweise bereits installiert. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Schritt 1 - Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Ubuntu wird standardmäßig mit ufw (Uncomplicated Firewall) geliefert.

Überprüfen Sie, ob die Firewall aktiv ist.

$ sudo ufw status

Sie sollten die folgende Ausgabe erhalten.

Status: inactive

Erlauben Sie den SSH-Port, damit die Firewall die aktuelle Verbindung beim Aktivieren nicht unterbricht.

$ sudo ufw allow OpenSSH

Erlauben Sie auch die HTTP- und HTTPS-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Aktivieren Sie die Firewall

$ sudo ufw enable
Befehl kann bestehende SSH-Verbindungen stören. Mit der Operation fortfahren (y|n)? y
Firewall ist aktiv und beim Systemstart aktiviert

Überprüfen Sie den Status der Firewall erneut.

$ sudo ufw status

Sie sollten eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Schritt 2 - SSL installieren

Bevor wir fortfahren, lassen Sie uns zuerst ein SSL-Zertifikat für unsere Domain erstellen. Wir werden dies außerhalb von Docker erstellen, da es einfach zu warten ist. Wir werden später die Zertifikate mit dem Container synchronisieren, die regelmäßig erneuert und aktualisiert werden.

Wir müssen Certbot installieren, um das SSL-Zertifikat zu generieren. Sie können Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Ubuntu 22.04 wird standardmäßig mit Snapd installiert. Führen Sie die folgenden Befehle aus, um sicherzustellen, dass Ihre Version von Snapd auf dem neuesten Stand ist. Stellen Sie sicher, dass Ihre Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Installieren Sie Certbot.

$ sudo snap install --classic certbot

Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt wird, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat zu generieren.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com

Der obige Befehl lädt ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/example.com auf Ihrem Server herunter.

Generieren Sie ein Diffie-Hellman-Gruppen-Zertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Führen Sie einen Testlauf des Prozesses durch, um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.

Nach der Einrichtung von Docker und der Installation von Laravel muss der Erneuerungsprozess geändert werden. Wir werden dies in einem späteren Abschnitt behandeln.

Schritt 3 - Docker und Docker Compose installieren

Ubuntu 22.04 wird mit einer älteren Version von Docker ausgeliefert. Um die neueste Version zu installieren, importieren Sie zuerst den Docker GPG-Schlüssel.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Erstellen Sie eine Docker-Repository-Datei.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aktualisieren Sie die System-Repository-Liste.

$ sudo apt update

Installieren Sie die neueste Version von Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Überprüfen Sie, ob es läuft.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2054 (dockerd)
      Tasks: 52
     Memory: 22.5M
        CPU: 248ms
     CGroup: /system.slice/docker.service
             ??  2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Standardmäßig benötigt Docker Root-Rechte. Wenn Sie vermeiden möchten, bei jedem Ausführen des docker-Befehls sudo zu verwenden, fügen Sie Ihren Benutzernamen zur docker-Gruppe hinzu.

$ sudo usermod -aG docker $(whoami)

Sie müssen sich von dem Server abmelden und wieder anmelden, um diese Änderung zu aktivieren, oder den folgenden Befehl verwenden.

$ su - ${USER}

Bestätigen Sie, dass Ihr Benutzer zur Docker-Gruppe hinzugefügt wurde.

$ groups
navjot wheel docker

Schritt 4 - Laravel herunterladen und Abhängigkeiten installieren

Der erste Schritt besteht darin, die neueste Version von Laravel herunterzuladen und die Abhängigkeiten, einschließlich Composer, dem PHP-Paketmanager, zu installieren.

Erstellen Sie das Verzeichnis für die Laravel-Anwendung.

$ mkdir ~/laravel

Wechseln Sie in das Verzeichnis.

$ cd ~/laravel

Klonen Sie die neueste Laravel-Version in das Verzeichnis. Vergessen Sie nicht das . am Ende des Befehls, was bedeutet, dass Git die Dateien in das aktuelle Verzeichnis klonen wird.

$ git clone https://github.com/laravel/laravel.git .

Verwenden Sie das Docker-Compose-Image, um die Verzeichnisse zu mounten, die Sie für Ihr Laravel-Projekt benötigen. Dies vermeidet die Notwendigkeit, Composer global zu installieren.

$ docker run --rm -v $(pwd):/app composer install

Der obige Befehl erstellt einen temporären Container, der an Ihr aktuelles Verzeichnis gebunden ist, bevor er entfernt wird. Er kopiert den Inhalt Ihres Laravel-Verzeichnisses in den Container und stellt sicher, dass der vendor-Ordner, den Composer im Container erstellt, zurück in das aktuelle Verzeichnis kopiert wird.

Setzen Sie die Berechtigungen für das Laravel-Verzeichnis so, dass es dem aktuell angemeldeten Benutzer gehört.

$ sudo chown -R $USER:$USER ~/laravel

Schritt 5 - Erstellen Sie die Docker-Compose-Datei

Erstellen Sie die Docker-Compose-Datei und öffnen Sie sie zur Bearbeitung.

$ nano docker-compose.yml

Fügen Sie den folgenden Code ein. Hier definieren wir drei Dienste: app, webserver und db. Ersetzen Sie MYSQL_ROOT_PASSWORD unter dem db-Dienst durch ein starkes Passwort Ihrer Wahl.

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: howtoforge/app
    container_name: app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./:/var/www
      - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - app-network

  webserver:
    container_name: webserver
    image: nginx:alpine
    restart: unless-stopped
    tty: true
    ports:
        - 80:80
        - 443:443
    volumes:
        - ./:/var/www
        - ./nginx/conf.d:/etc/nginx/conf.d
        - ./nginx/logs:/var/log/nginx
        - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
        - /etc/letsencrypt:/etc/letsencrypt
    logging:
        options:
            max-size: "10m"
            max-file: "3"
    networks:
      - app-network

  db:
    image: mysql:latest
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD
      MYSQL_USER: laraveluser
      MYSQL_PASSWORD: password
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

volumes:
  dbdata:
    driver: local

networks:
  app-network:
    driver: bridge

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Lassen Sie uns die Dienste im Detail durchgehen.

  • app - Dieser Dienst definiert die Laravel-Anwendung und verwendet ein benutzerdefiniertes Docker-Image mit dem Titel howtoforge/app. Wir werden dieses Image im nächsten Schritt erstellen. Das Arbeitsverzeichnis für Laravel im Container ist auf /var/www festgelegt, das mit dem aktuellen Verzeichnis auf dem Host verknüpft ist. Wir mounten auch eine PHP-Konfigurationsdatei, die in den PHP-Container kopiert wird. Wir werden dies in einem späteren Schritt konfigurieren.
  • webserver - Dieser Dienst erstellt einen Container mit dem Nginx-Docker-Image und öffnet die Ports 80 und 443 für den Host. Wir mounten auch Volumes für Nginx-Protokolle, benutzerdefinierte Konfiguration, das Laravel-Anwendungsverzeichnis und SSL-Zertifikate.
  • db - Dieser Dienst erstellt einen Container mit dem MySQL-Docker-Image und definiert Umgebungsvariablen zur Einrichtung des Datenbanknamens und des MySQL-Root-Passworts. Sie können die Datenbank nach Belieben benennen und MYSQL_ROOT_PASSWORD durch ein starkes Passwort Ihrer Wahl ersetzen. Setzen Sie auch den MySQL-Benutzernamen (MYSQL_USER_NAME) und das Passwort (MYSQL_USER_PASSWORD), die Zugriff auf die von Ihnen gewählte Datenbank haben. Dieser Dienst mappt auch den Port 3306 vom Container auf den Port 3306 des Hosts. Wir mounten auch ein Volume für die benutzerdefinierte MySQL-Konfiguration und ein lokales Volume für MySQL-Daten. Dies ermöglicht es Ihnen, den db-Dienst neu zu starten, ohne die Daten zu verlieren.

Um die Kommunikation zwischen den Diensten zu ermöglichen, haben wir ein Docker-Netzwerk namens app-network erstellt. Es ist als Bridge-Netzwerk konfiguriert. Es ermöglicht Containern, die damit verbunden sind, miteinander zu kommunizieren. Der Bridge-Netzwerktreiber installiert Regeln auf der Hostmaschine, sodass Container in verschiedenen Bridge-Netzwerken nicht direkt miteinander kommunizieren können.

Schritt 6 - Erstellen Sie die Dockerfile

Eine Dockerfile wird verwendet, um benutzerdefinierte Images zu erstellen. Es gibt kein Standard-Image für Laravel, weshalb wir eine Dockerfile definieren müssen, um ein benutzerdefiniertes Image für Laravel zu erstellen. Es enthält Befehle zur Installation von Paketen und zur Konfiguration der Linux-Umgebung, abhängig von den Anforderungen Ihrer Anwendung. Sie können Ihr benutzerdefiniertes Image auch auf Docker Hub oder in ein privates Docker-Registry veröffentlichen. Weitere Informationen finden Sie in unserem Dockerfile-Tutorial.

Erstellen Sie die Dockerfile und öffnen Sie sie zur Bearbeitung.

$ nano Dockerfile

Fügen Sie den folgenden Code ein.

FROM php:8.2-fpm

# Kopiere composer.lock und composer.json
COPY composer.lock composer.json /var/www/

# Arbeitsverzeichnis festlegen
WORKDIR /var/www

# Abhängigkeiten installieren
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    libzip-dev \
    unzip \
    git \
    curl \
    libonig-dev

# Cache leeren
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Erweiterungen installieren
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd

# Composer installieren
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Bestehende Anwendungsinhaltsverzeichnisse in das Arbeitsverzeichnis kopieren
COPY . /var/www

# Berechtigungen des Arbeitsverzeichnisses dem www-data-Benutzer zuweisen
RUN chown -R www-data:www-data \
        /var/www/storage \
        /var/www/bootstrap/cache

# Schreibberechtigungen für Protokolle und Framework-Verzeichnisse zuweisen
RUN chmod 775 storage/logs \
        /var/www/storage/framework/sessions \
        /var/www/storage/framework/views

# Port 9000 freigeben und php-fpm-Server starten
EXPOSE 9000
CMD ["php-fpm"]

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Lassen Sie uns sehen, was hier passiert. Zuerst erstellen wir unser benutzerdefiniertes Image auf der Grundlage des php:8.2-fpm-Docker-Images. Dies ist ein Debian-basiertes Image, das PHP 8.2-FPM installiert hat. Die Dockerfile verwendet verschiedene Direktiven, um Operationen durchzuführen. Die RUN-Direktive gibt die Befehle an, um Einstellungen im Container zu aktualisieren, zu installieren und zu konfigurieren, die COPY-Direktive, um Dateien in den Container zu kopieren, die EXPOSE-Direktive, um einen Port im Container freizugeben, und die CMD-Direktive, um einen Befehl auszuführen.

Zuerst kopieren wir die Composer-Dateien aus dem Laravel-Verzeichnis auf dem Host in den Container in das Verzeichnis /var/www. Wir setzen auch das Arbeitsverzeichnis für den Container auf /var/www. Dann installieren wir verschiedene Voraussetzungen und Pakete, die erforderlich sind, damit Laravel funktioniert, einschließlich PHP-Erweiterungen wie mbstring, gd, exif, zip, pdo_mysql und pcntl. Danach installieren wir den Composer-Paketmanager.

Als nächstes kopieren wir alle Dateien aus dem Laravel-Verzeichnis in den Container und setzen die Berechtigungen für das Arbeitsverzeichnis für den www-data-Benutzer. Dies ist der Benutzer, den PHP standardmäßig auf der Debian-Plattform verwendet. Schließlich geben wir den 9000-Port für den PHP-FPM-Dienst frei, der vom Nginx-Server verwendet wird, und führen den PHP-Befehl aus, um den Container zu starten.

Schritt 7 - PHP konfigurieren

Erstellen Sie das PHP-Verzeichnis.

$ mkdir ~/laravel/php

Erstellen Sie die Datei local.ini zur Bearbeitung.

$ nano local.ini

Fügen Sie den folgenden Code ein.

upload_max_filesize=40M
post_max_size=40M

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben. Diese Direktiven setzen die maximale Größe für hochgeladene Dateien. Ändern Sie den Wert nach Ihren Anforderungen. Sie können jede PHP-spezifische Konfiguration hinzufügen, um die Standarddirektiven zu überschreiben.

Schritt 8 - Nginx konfigurieren

Erstellen Sie das Nginx-Verzeichnis für die Site-Konfiguration.

$ mkdir ~/laravel/nginx/conf.d -p

Wir müssen eine Nginx-Konfigurationsdatei erstellen, um PHP-FPM als FastCGI-Server zu verwenden, um Laravel bereitzustellen.

Erstellen Sie die Datei app.conf zur Bearbeitung.

$ nano ~/laravel/nginx/conf.d/app.conf

Fügen Sie den folgenden Code ein.

server {
    # Leite alle http-Anfragen zu https um
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    index index.php index.html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    root /var/www/public;
    client_max_body_size 40m;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # OCSP-Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Die obige Datei konfiguriert Nginx, um sowohl die HTTP- als auch die HTTPS-Version der Laravel-Website bereitzustellen und automatisch jede HTTP-Anfrage auf HTTPS umzuleiten. Stellen Sie sicher, dass der Wert der Variablen client_max_body_size mit der im vorherigen Schritt festgelegten Upload-Größe übereinstimmt.

Im PHP-Standortblock gibt die fastcgi_pass-Direktive an, dass der app-Dienst auf einem TCP-Socket auf Port 9000 lauscht. Der PHP-FPM-Server kann auch auf einem Unix-Socket lauschen, was einen Vorteil gegenüber einem TCP-Socket hat. Aber es funktioniert nicht, wenn die Dienste auf verschiedenen Hosts ausgeführt werden, was hier der Fall ist, da der app-Container auf einem anderen Host als Ihr webserver-Container ausgeführt wird.

Schritt 9 - MySQL konfigurieren

Wir werden MySQL konfigurieren, um das allgemeine Abfrageprotokoll zu aktivieren und die entsprechende Protokolldatei anzugeben.

Erstellen Sie das MySQL-Verzeichnis.

$ mkdir ~/laravel/mysql

Erstellen Sie die Datei my.cnf zur Bearbeitung.

$ nano ~/laravel/my.cnf

Fügen Sie den folgenden Code ein.

[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Schritt 10 - Einrichten der Umgebungsdatei

Jetzt, da wir alle Dienste erstellt und konfiguriert haben, ist es Zeit, die Container zu starten. Aber bevor wir das tun, müssen wir die Umgebungsvariablen für Laravel konfigurieren. Laravel kommt mit einer Standard-Umgebungsdatei, .env.example.

Erstellen Sie eine Kopie der Beispiel-Umgebungsdatei.

$ cp .env.example .env

Öffnen Sie die .env-Datei zur Bearbeitung.

$ nano .env

Suchen Sie den Block, der mit DB_CONNECTION beginnt, und aktualisieren Sie die Werte der Variablen gemäß Ihren Anforderungen.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password

Der Wert von DB_HOST wird der db-Dienst sein. Die Werte von DB_NAME, DB_USERNAME und DB_PASSWORD werden der Datenbankname, der Benutzername und das Passwort sein, die Sie im Schritt 4 in der Docker-Compose-Datei gewählt haben.

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Schritt 11 - Starten Sie die Container und schließen Sie die Laravel-Installation ab

Es ist endlich Zeit, die Container zu starten.

$ docker compose up -d

Dieser Befehl wird beim ersten Ausführen die Nginx-, MySQL-Images herunterladen und das app-Image mit der Dockerfile, die wir erstellt haben, erstellen. Sobald der Prozess abgeschlossen ist, können Sie den Status Ihrer Container mit dem folgenden Befehl überprüfen.

$ docker ps

Sie werden eine ähnliche Ausgabe sehen.

CONTAINER ID   IMAGE            COMMAND                  CREATED       STATUS       PORTS                                                                      NAMES
a57be976c0fa   mysql:latest     "docker-entrypoint.s…"   6 hours ago   Up 6 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                       db
85e515c4a404   howtoforge/app   "docker-php-entrypoi…"   6 hours ago   Up 6 hours   9000/tcp                                                                   app
8418bbc83bd3   nginx:alpine     "/docker-entrypoint.…"   6 hours ago   Up 6 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   webserver

Sobald die Container laufen, ist es Zeit, die Laravel-Installation mit dem Befehl docker compose exec abzuschließen, um Befehle im Container auszuführen.

Generieren Sie einen Anwendungsschlüssel und kopieren Sie ihn in Ihre .env-Datei, um Benutzersitzungen zu sichern und Benutzerdaten zu verschlüsseln.

$ docker compose exec app php artisan key:generate

Erstellen Sie den Cache der Laravel-Anwendung.

$ docker compose exec app php artisan config:cache

Dieser Befehl lädt die Konfigurationseinstellungen in die Datei /var/www/bootstrap/cache/config.php.

Besuchen Sie https://example.com in Ihrem Browser und Sie werden die folgende Seite sehen, die die erfolgreiche Installation von Laravel impliziert.

Laravel-Startseite

Schritt 12 - Konfigurieren Sie die SSL-Erneuerung

Jetzt, da die Laravel-Website aktiv ist, ist es Zeit, die SSL-Einstellungen zu überprüfen, um die Erneuerung zu konfigurieren. Dazu müssen wir Skripte erstellen, um den webserver-Dienst vor dem Start der Erneuerung zu stoppen und den Dienst erneut zu starten, sobald das Zertifikat erneuert wurde. Certbot bietet zwei Hooks, pre_hook und post_hook, für diesen Zweck.

Erstellen Sie das SSL-Verzeichnis, um die Skripte zu speichern.

$ mkdir ~/laravel/ssl

Erstellen Sie das Skript server-stop.sh.

$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'

Erstellen Sie das Skript server-start.sh.

$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'

Machen Sie die Skripte ausführbar.

$ chmod +x ~/laravel/ssl/server-*.sh

Jetzt müssen wir Certbot mitteilen, diese Skripte zu verwenden. Öffnen Sie die Datei /etc/letsencrypt/renewal/example.com.conf zur Bearbeitung.

$ sudo nano /etc/letsencrypt/renewal/example.com.conf

Fügen Sie die folgenden Zeilen am Ende der Datei ein.

pre_hook = /home//laravel/ssl/server-stop.sh
post_hook = /home//laravel/ssl/server-start.sh

Speichern Sie die Datei, indem Sie Ctrl + X drücken und bei Aufforderung Y eingeben.

Testen Sie den Zertifikatserneuerungsprozess, indem Sie einen Testlauf durchführen.

$ sudo certbot renew --dry-run

Sie erhalten eine ähnliche Ausgabe, die den Erfolg bestätigt.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output:
 webserver
Simulating renewal of an existing certificate for example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
 webserver

Ihre SSL-Zertifikate werden nun automatisch erneuert und vom Docker-Container verwendet, um Ihre Laravel-Anwendung bereitzustellen.

Schritt 13 - Datenmigration und Tinker-Konsole

Jetzt, da die Anwendung läuft, können Sie Ihre Daten migrieren und mit dem Befehl tinker experimentieren. Tinker ist eine REPL (Read-Eval-Print Loop) für Laravel. Der Befehl tinker startet eine PsySH-Konsole mit vorinstalliertem Laravel. PsySH ist eine Laufzeit-Entwicklerkonsole und ein interaktiver Debugger für PHP. Der Befehl tinker ermöglicht es Ihnen, mit der Laravel-Anwendung über die Befehlszeile in einer interaktiven Shell zu interagieren.

Testen Sie die MySQL-Verbindung mit dem Befehl artisan migrate im Container. Dadurch wird eine migrations-Tabelle in der Datenbank erstellt.

$ docker compose exec app php artisan migrate

Sie erhalten die folgende Ausgabe.

 INFO  Preparing database.

  Creating migration table .............................................................................................. 32ms DONE

 INFO  Running migrations.

  2014_10_12_000000_create_users_table .................................................................................. 184ms DONE
  2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE
  2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE
  2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE

Starten Sie als nächstes die PsySH-Konsole mit dem Befehl tinker.

$ docker compose exec app php artisan tinker

Sie erhalten die folgende Eingabeaufforderung.

Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>

Testen Sie die MySQL-Verbindung, indem Sie die Daten abrufen, die Sie gerade migriert haben, indem Sie den folgenden Befehl an der Konsoleneingabeaufforderung ausführen.

> \DB::table('migrations')->get();

Sie erhalten die folgende Ausgabe.

= Illuminate\Support\Collection {#3670
    all: [
      {#3679
        +"id": 1,
        +"migration": "2014_10_12_000000_create_users_table",
        +"batch": 1,
      },
      {#3681
        +"id": 2,
        +"migration": "2014_10_12_100000_create_password_resets_table",
        +"batch": 1,
      },
      {#3682
        +"id": 3,
        +"migration": "2019_08_19_000000_create_failed_jobs_table",
        +"batch": 1,
      },
      {#3683
        +"id": 4,
        +"migration": "2019_12_14_000001_create_personal_access_tokens_table",
        +"batch": 1,
      },
    ],
  }

Geben Sie exit ein, um die Konsole zu verlassen.

> exit
   INFO  Goodbye.

Sie können tinker verwenden, um mit Ihren Datenbanken zu interagieren und mit Diensten und Modellen zu experimentieren. Sie können nun mit der weiteren Entwicklung in Laravel beginnen.

Fazit

Damit schließen wir unser Tutorial ab, in dem Sie die Laravel-Anwendung mit Docker, MySQL und PHP containerisiert und installiert haben. Sie haben die Anwendung auch auf einem sicheren Domainnamen bereitgestellt. Wenn Sie Fragen haben, posten Sie diese bitte in die Kommentare unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.