Ako nainštalovať Laravel pomocou Docker na Ubuntu 22.04


Tento návod existuje pre tieto verzie OS

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 18.04 (Bionic Beaver)

Na tejto stránke

  1. Predpoklady
  2. Krok 1 - Nakonfigurujte bránu firewall
  3. Krok 2 - Nainštalujte SSL
  4. Krok 3 - Nainštalujte Docker a Docker Compose
  5. Krok 4 - Stiahnite si Laravel a nainštalujte závislosti
  6. Krok 5 - Vytvorte súbor Docker Compose File
  7. Krok 6 – Vytvorte súbor Dockerfile
  8. Krok 7 – Nakonfigurujte PHP
  9. Krok 8 - Nakonfigurujte Nginx
  10. Krok 9 – Nakonfigurujte MySQL
  11. Krok 10 – Nastavenie súboru prostredia
  12. Krok 11 - Spustite kontajnery a dokončite inštaláciu Laravel
  13. Krok 12 – Nakonfigurujte obnovenie SSL
  14. Krok 13 - Migrácia údajov a konzola Tinker
  15. Záver

Laravel je bezplatný a open source PHP framework, ktorý poskytuje súbor nástrojov a zdrojov na vytváranie moderných PHP aplikácií. Vďaka širokej škále kompatibilných balíkov a rozšírení sa Laravel stal populárnym a mnohí vývojári si ho osvojili ako svoj výber. Laravel poskytuje výkonné databázové nástroje vrátane ORM (Object Relational Mapper) s názvom Eloquent a vstavané mechanizmy na vytváranie migrácií databáz. Dodáva sa s nástrojom príkazového riadku Artisan, pomocou ktorého môžu vývojári zavádzať nové modely, ovládače a ďalšie komponenty aplikácií, čo urýchľuje celkový vývoj aplikácií.

Kontajnerizácia aplikácie sa vzťahuje na proces prispôsobenia aplikácie a jej komponentov tak, aby ju bolo možné spustiť v odľahčených prostrediach známych ako kontajnery. Táto príručka použije Docker Compose na kontajnerizáciu aplikácie Laravel na vývoj.

Pre našu aplikáciu Laravel vytvoríme tri kontajnery Docker.

  • Služba aplikácie so systémom PHP 8.2-FPM
  • Služba db so systémom MySQL 8.0
  • Služba nginx, ktorá používa službu app na analýzu kódu PHP pred poskytnutím aplikácie Laravel používateľovi

Pomocou Let's Encrypt vytvoríme aj SSL certifikát pre našu stránku Laravel.

Predpoklady

    Server so systémom Ubuntu 22.04.

    Používateľ bez oprávnenia root s oprávneniami sudo.

    Plne kvalifikovaný názov domény (FQDN) smerujúci na váš server. Pre naše účely budeme ako názov domény používať example.com.

    Uistite sa, že je všetko aktualizované.

    $ sudo apt update
    

    Nainštalujte základné balíky nástrojov. Niektoré z nich už môžu byť nainštalované.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

Krok 1 - Nakonfigurujte bránu firewall

Prvým krokom je konfigurácia brány firewall. Ubuntu sa štandardne dodáva s ufw (Nekomplikovaný firewall).

Skontrolujte, či je spustený firewall.

$ sudo ufw status

Mali by ste dostať nasledujúci výstup.

Status: inactive

Povoľte port SSH, aby firewall pri jeho povolení neprerušil aktuálne pripojenie.

$ sudo ufw allow OpenSSH

Povoliť aj porty HTTP a HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Povoľte bránu firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Znova skontrolujte stav brány firewall.

$ sudo ufw status

Mali by ste vidieť podobný výstup.

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)

Krok 2 - Nainštalujte SSL

Predtým, ako budeme pokračovať, najprv vytvorte certifikát SSL pre našu doménu. Vytvoríme to mimo Docker, pretože sa ľahko udržiava. Neskôr zosynchronizujeme certifikáty do kontajnera, ktorý sa bude pravidelne obnovovať a obnovovať.

Na vygenerovanie certifikátu SSL musíme nainštalovať Certbot. Certbot môžete nainštalovať pomocou úložiska Ubuntu alebo získať najnovšiu verziu pomocou nástroja Snapd. Budeme používať verziu Snapd.

Ubuntu 22.04 sa štandardne dodáva s nainštalovaným Snapd. Spustite nasledujúce príkazy, aby ste sa uistili, že vaša verzia Snapd je aktuálna. Uistite sa, že vaša verzia aplikácie Snapd je aktuálna.

$ sudo snap install core
$ sudo snap refresh core

Nainštalujte Certbot.

$ sudo snap install --classic certbot

Pomocou nasledujúceho príkazu zaistite spustenie príkazu Certbot vytvorením symbolického odkazu na adresár /usr/bin.

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

Spustite nasledujúci príkaz na vygenerovanie certifikátu SSL.

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

Vyššie uvedený príkaz stiahne certifikát do adresára /etc/letsencrypt/live/example.com na vašom serveri.

Vygenerujte certifikát Diffie-Hellman group.

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

Vykonajte suchý chod procesu a skontrolujte, či obnovenie SSL funguje správne.

$ sudo certbot renew --dry-run

Ak nevidíte žiadne chyby, všetko je nastavené. Váš certifikát sa automaticky obnoví.

Po nastavení Dockera a inštalácii Laravelu bude potrebné upraviť proces obnovy. Budeme sa mu venovať v neskoršej časti.

Krok 3 - Nainštalujte Docker a Docker Compose

Ubuntu 22.04 sa dodáva so staršou verziou Docker. Ak chcete nainštalovať najnovšiu verziu, najprv importujte kľúč Docker GPG.

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

Vytvorte súbor úložiska Docker.

$ 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

Aktualizujte zoznam systémového úložiska.

$ sudo apt update

Nainštalujte najnovšiu verziu Docker.

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

Skontrolujte, či je spustený.

$ 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

V predvolenom nastavení Docker vyžaduje oprávnenia root. Ak sa chcete vyhnúť používaniu sudo pri každom spustení príkazu docker, pridajte svoje používateľské meno do skupiny docker.

$ sudo usermod -aG docker $(whoami)

Ak chcete povoliť túto zmenu, budete sa musieť odhlásiť zo servera a znova sa prihlásiť ako rovnaký používateľ alebo použiť nasledujúci príkaz.

$ su - ${USER}

Potvrďte, že váš používateľ je pridaný do skupiny Docker.

$ groups
navjot wheel docker

Krok 4 - Stiahnite si Laravel a nainštalujte závislosti

Prvým krokom je stiahnuť si najnovšiu verziu Laravelu a nainštalovať závislosti, vrátane Composer, správcu balíkov PHP.

Vytvorte adresár aplikácie Laravel.

$ mkdir ~/laravel

Prepnite sa do adresára.

$ cd ~/laravel

Naklonujte najnovšie vydanie Laravelu do adresára. Nezabudnite na . na konci príkazu, čo znamená, že Git naklonuje súbory do aktuálneho adresára.

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

Použite obraz Docker's Compose na pripojenie adresárov, ktoré potrebujete pre svoj projekt Laravel. Vyhnete sa tak potrebe inštalovať Composer globálne.

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

Vyššie uvedený príkaz vytvorí efemérny kontajner, ktorý je pred odstránením pripojený k vášmu aktuálnemu adresáru. Skopíruje obsah vášho adresára Laravel do kontajnera a zaistí, že priečinok vendor, ktorý Composer vytvorí v kontajneri, sa skopíruje späť do aktuálneho adresára.

Nastavte povolenia v adresári Laravel tak, aby ho vlastnil práve prihlásený používateľ.

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

Krok 5 - Vytvorte súbor Docker Compose File

Vytvorte a otvorte súbor Docker Compose na úpravu.

$ nano docker-compose.yml

Vložte do nej nasledujúci kód. Tu definujeme tri služby: app, webserver a db. Nahraďte MYSQL_ROOT_PASSWORD v službe db silným heslom podľa vlastného výberu.

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

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Prejdime si služby podrobne.

  • aplikácia – Táto služba definuje aplikáciu Laravel a spúšťa obrázok Docker zákazníka s názvom howtoforge/app. Tento obrázok vytvoríme v ďalšom kroku. Pracovný adresár pre Laravel v kontajneri je nastavený na /var/www, ktorý je namapovaný na aktuálny adresár na hostiteľovi. Tiež pripojíme konfiguračný súbor PHP, ktorý sa skopíruje do kontajnera PHP. Nakonfigurujeme to v neskoršom kroku.
  • webový server – Táto služba vytvorí kontajner pomocou obrazu Nginx Docker a sprístupní hostiteľovi porty 80 a 443. Tiež spájame zväzky pre denníky Nginx, vlastnú konfiguráciu, adresár aplikácie Laravel a certifikáty SSL.
  • db – Táto služba vytvorí kontajner pomocou obrazu MySQL Docker a definuje premenné prostredia nastavujúce názov databázy a koreňové heslo MySQL. Databázu môžete pomenovať ako chcete a nahradiť MYSQL_ROOT_PASSWORD silným heslom podľa vlastného výberu. Tiež nastavte používateľské meno MySQL (MYSQL_USER_NAME) a heslo (MYSQL_USER_PASSWORD), ktoré budú mať prístup k databáze, ktorú ste si vybrali. Táto služba tiež mapuje port 3306 z kontajnera na port 3306 na hostiteľovi. Tiež spájame zväzok pre vlastnú konfiguráciu MySQL a lokálny zväzok pre údaje MySQL. To vám umožní reštartovať službu db bez straty údajov.

Aby služby mohli medzi sebou komunikovať, vytvorili sme sieť Docker s názvom app-network . Je nastavená ako mostová sieť. Umožňuje kontajnerom, ktoré sú k nemu pripojené, navzájom komunikovať. Sieťový ovládač premostenia nainštaluje pravidlá do hostiteľského počítača, takže kontajnery v rôznych premosťovacích sieťach nemôžu navzájom priamo komunikovať.

Krok 6 – Vytvorte súbor Dockerfile

Dockerfile sa používa na vytváranie vlastných obrázkov. Neexistuje žiadny štandardný obrázok pre Laravel, a preto musíme definovať súbor Dockerfile, aby sme vytvorili vlastný obrázok pre Laravel. Obsahuje príkazy na inštaláciu balíkov a konfiguráciu prostredia Linuxu v závislosti od potrieb vašej aplikácie. Svoj vlastný obrázok môžete tiež zverejniť v Docker Hub alebo v akomkoľvek súkromnom registri Docker. Viac sa dozviete v našom Výukový program Dockerfile.

Vytvorte a otvorte súbor Docker na úpravu.

$ nano Dockerfile

Vložte do nej nasledujúci kód.

FROM php:8.2-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
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

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
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

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

# Copy existing application directory contents to the working directory
COPY . /var/www

# Assign permissions of the working directory to the www-data user
RUN chown -R www-data:www-data \
        /var/www/storage \
        /var/www/bootstrap/cache

# Assign writing permissions to logs and framework directories
RUN chmod 775 storage/logs \
        /var/www/storage/framework/sessions \
        /var/www/storage/framework/views

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Pozrime sa, čo sa tu deje. Najprv vytvoríme vlastný obrázok na vrchu obrázka php:8.2-fpm Docker. Toto je obraz založený na Debiane, ktorý má nainštalované PHP 8.2-FPM. Dockerfile používa na vykonávanie operácií rôzne direktívy, direktíva RUN špecifikuje príkazy na aktualizáciu, inštaláciu a konfiguráciu nastavení v kontajneri, direktíva COPY na kopírovanie súborov do kontajnera, EXPOSE na odhalenie portu v kontajneri a CMD na spustenie príkazu.

Najprv skopírujeme súbory Composer z adresára Laravel na hostiteľovi vnútri kontajnera do adresára /var/www. Taktiež sme nastavili pracovný adresár pre kontajner na /var/www. Potom nainštalujeme rôzne predpoklady a balíky potrebné na fungovanie Laravelu vrátane rozšírení PHP vrátane mbstring, gd, exif, zip, pdo_mysql a pcntl. Potom nainštalujeme správcu balíkov Composer.

Ďalej skopírujeme všetky súbory z adresára Laravel do kontajnera a nastavíme povolenia v pracovnom adresári pre používateľa www-data. Toto je používateľ, ktorý PHP štandardne používa na platforme Debian. Ďalej nastavíme správne oprávnenia na zápis do adresárov protokolov, relácií a zobrazení Laravel.

A nakoniec odkryjeme port 9000 pre službu PHP-FPM, ktorú bude používať server Nginx, a spustíme príkaz PHP na spustenie kontajnera.

Krok 7 – Nakonfigurujte PHP

Vytvorte adresár PHP.

$ mkdir ~/laravel/php

Vytvorte a otvorte súbor local.ini na úpravu.

$ nano local.ini

Vložte do nej nasledujúci kód.

upload_max_filesize=40M
post_max_size=40M

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y. Tieto smernice nastavujú maximálnu veľkosť nahrávaných súborov pre nahrávané súbory. Zmeňte hodnotu podľa svojich požiadaviek. Môžete vložiť akúkoľvek konfiguráciu špecifickú pre PHP, aby ste prepísali predvolené direktívy.

Krok 8 - Nakonfigurujte Nginx

Vytvorte adresár Nginx pre konfiguráciu lokality.

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

Potrebujeme vytvoriť konfiguračný súbor Nginx, aby sme mohli používať PHP-FPM ako server FastCGI na obsluhu Laravelu.

Vytvorte a otvorte súbor app.conf na úpravu.

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

Vložte do nej nasledujúci kód.

server {
    # Redirect any http requests to https
    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;
    }
}

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Vyššie uvedený súbor konfiguruje Nginx tak, aby obsluhoval verzie HTTP aj HTTPS stránky Laravel a automaticky presmeroval akúkoľvek požiadavku HTTP na HTTPS. Uistite sa, že hodnota premennej client_max_body_size sa zhoduje s veľkosťou nahrávania nastavenou v predchádzajúcom kroku.

V bloku umiestnenia PHP direktíva fastcgi_pass špecifikuje, že služba app počúva na TCP sockete na porte 9000. PHP-FPM server môže tiež počúvať na Unix sockete, ktorý má výhodu oproti TCP socketu. Ale nefunguje to, ak sú služby spustené na rôznych hostiteľoch, čo je tento prípad, pretože kontajner app beží na inom hostiteľovi ako váš kontajner webserver.

Krok 9 – Nakonfigurujte MySQL

Nakonfigurujeme MySQL tak, aby povolil všeobecný protokol dotazov a špecifikoval zodpovedajúci protokolový súbor.

Vytvorte adresár MySQL.

$ mkdir ~/laravel/mysql

Vytvorte a otvorte súbor my.cnf na úpravu.

$ nano ~/laravel/my.cnf

Vložte do nej nasledujúci kód.

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

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Krok 10 – Nastavenie súboru prostredia

Teraz, keď sme vytvorili a nakonfigurovali všetky služby, je čas spustiť kontajnery. Ale predtým, ako to urobíme, musíme nakonfigurovať premenné prostredia pre Laravel. Laravel sa dodáva s predvoleným súborom prostredia .env.example.

Vytvorte kópiu vzorového súboru prostredia.

$ cp .env.example .env

Otvorte súbor .env na úpravu.

$ nano .env

Nájdite blok začínajúci DB_CONNECTION a aktualizujte hodnoty premenných podľa svojich požiadaviek.

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

Hodnota DB_HOST bude služba db. DB_NAME, DB_USERNAME a DB_PASSWORD budú názov databázy, používateľské meno a heslo, ktoré ste si zvolili v kroku 4 v súbore na vytvorenie Docker.

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Krok 11 - Spustite kontajnery a dokončite inštaláciu Laravel

Konečne je čas spustiť kontajnery.

$ docker compose up -d

Tento príkaz pri prvom spustení stiahne obrázky Nginx, MySQL a vytvorí obrázok app pomocou Dockerfile vytvorili sme. Po dokončení procesu môžete skontrolovať stav svojich kontajnerov pomocou nasledujúceho príkazu.

$ docker ps

Uvidíte podobný výstup.

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

Keď sú kontajnery spustené, je čas dokončiť inštaláciu Laravelu pomocou príkazu docker compose exec na spustenie príkazov v kontajneri.

Vygenerujte kľúč aplikácie a skopírujte ho do súboru .env, aby ste zabezpečili používateľské relácie a zašifrovali používateľské údaje.

$ docker compose exec app php artisan key:generate

Vytvorte vyrovnávaciu pamäť aplikácie Laravel.

$ docker compose exec app php artisan config:cache

Tento príkaz načíta konfiguračné nastavenia do súboru /var/www/bootstrap/cache/config.php.

Navštívte vo svojom prehliadači https://example.com a uvidíte nasledujúcu stránku naznačujúcu úspešnú inštaláciu Laravelu.

Krok 12 – Nakonfigurujte obnovenie SSL

Teraz, keď je stránka Laravel aktívna, je čas prehodnotiť nastavenia SSL a nakonfigurovať obnovenie. Na to budeme musieť vytvoriť skripty na zastavenie služby webserver pred spustením obnovy a znova spustiť službu po obnovení certifikátu. Certbot poskytuje na tento účel dva háčiky, pre_hook a post_hook.

Vytvorte adresár SSL na ukladanie skriptov.

$ mkdir ~/laravel/ssl

Vytvorte skript server-stop.sh.

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

Vytvorte skript server-start.sh.

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

Urobte skripty spustiteľné.

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

Teraz musíme povedať Certbotovi, aby používal tieto skripty. Na úpravu otvorte súbor /etc/letsencrypt/renewal/example.com.conf.

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

Vložte nasledujúce riadky na koniec súboru.

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

Uložte súbor stlačením Ctrl + X a po zobrazení výzvy zadajte Y.

Otestujte proces obnovy certifikátu vykonaním suchého testu.

$ sudo certbot renew --dry-run

Získate podobný výstup potvrdzujúci úspech.

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

Vaše certifikáty SSL sa teraz automaticky obnovia a kontajner Docker ich použije na obsluhu vašej aplikácie Laravel.

Krok 13 - Migrácia údajov a konzola Tinker

Teraz, keď je aplikácia spustená, môžete migrovať svoje údaje a experimentovať s príkazom tinker. Tinker je REPL (Read-Eval-Print Loop) pre Laravel. Príkaz tinker spustí konzolu PsySH s predinštalovaným Laravelom. PsySH je runtime vývojárska konzola a interaktívny debugger pre PHP. Príkaz tinker vám umožňuje interakciu s aplikáciou Laravel z príkazového riadku v interaktívnom prostredí.

Otestujte pripojenie MySQL pomocou príkazu artisan migrate na kontajneri. V databáze vytvorí tabuľku migrácie.

$ docker compose exec app php artisan migrate

Dostanete nasledujúci výstup.

 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

Potom spustite konzolu PsySH pomocou príkazu tinker.

$ docker compose exec app php artisan tinker

Dostanete nasledujúcu výzvu.

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

Otestujte pripojenie MySQL získaním údajov, ktoré ste práve migrovali, spustením nasledujúceho príkazu na príkazovom riadku konzoly.

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

Dostanete nasledujúci výstup.

= 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,
      },
    ],
  }

Ak chcete opustiť konzolu, zadajte exit.

> exit
   INFO  Goodbye.

Na interakciu s databázami a na experimentovanie so službami a modelmi môžete použiť tinker. Teraz môžete začať používať Laravel na ďalší vývoj.

Záver

Toto končí náš tutoriál, kde ste kontajnerizovali a nainštalovali aplikáciu Laravel pomocou Docker, MySQL a PHP. Aplikáciu ste poskytli aj na zabezpečenom názve domény. Ak máte nejaké otázky, napíšte ich do komentárov nižšie.