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