GNU/Linux >> Znalost Linux >  >> Ubuntu

Dockerizace Laravelu pomocí Nginx MySQL a Docker Compose na Ubuntu 18.04 LTS

Laravel je bezplatný a open source PHP framework, který implementuje návrhový vzor MVC (Model-View-Controller). Je navržen se snadným používáním a umožňuje vývojářům vytvářet jednoduché i složité aplikace během okamžiku. Laravel vytvořil Taylor Otwell v roce 2011 jako pokus poskytnout pokročilou alternativu k frameworku CodeIgniter (CI). V roce 2011 Laravel vydal verzi 1 a verzi 2 a nejnovější verze 5.6 přichází s dalšími a vylepšenými funkcemi, jako je podpora příkazového řádku (CLI) s názvem 'artisan', podpora různých databázových systémů, vylepšení tras atd.

V této příručce vám ukážeme, jak dockerizovat projekt Laravel pomocí PHP-FPM, databáze MySQL a webového serveru Nginx pomocí Docker Compose na Ubuntu Server 18.04. Vytvoříme nový obrázek dockeru pro projekt Laravel a poté vytvoříme skript docker-compose.yml, který obsahuje některé služby včetně samotné aplikace/Laravel, webového serveru Nginx a databáze MySQL.

Předpoklady

  • Ubuntu 18.04
  • Oprávnění uživatele root

Co uděláme:

  1. Nainstalujte Docker a Docker Compose
  2. Stáhněte si Laravel a nainstalujte závislosti
  3. Ukotvení projektu Laravel
    • Definujte službu Laravel App Service
    • Definujte službu HTTP Nginx
    • Definujte databázovou službu MySQL
    • Vytvořte virtuálního hostitele Nginx pro Laravel
    • Vytvořte Dockerfile pro aplikaci Laravel
  4. Vybudujte projekt Laravel
  5. Po instalaci Laravel

Krok 1 – Instalace Docker a Docker Compose

Nejprve nainstalujeme balíčky Docker a Docker Compose do systému Ubuntu. A budeme používat balíčky Docker z oficiálního úložiště Ubuntu.

Než půjdeme dále, musíme aktualizovat úložiště v systému Ubuntu. Jednoduše spuštěním následujícího příkazu.

aktualizace sudo apt

Nyní nainstalujte balíčky Docker a Docker Compose pomocí příkazu apt níže.

sudo apt install docker.io -y
sudo apt install docker-compose -y

Balíčky Docker a Docker Compose by se nyní měly nainstalovat do systému, zkontrolujte to pomocí následujících příkazů.

verze dockeru
verze docker-compose

Výsledkem je, že v systému získáte verzi Docker a Docker Compose.

Dále musíme přiřadit uživatele bez oprávnění root do skupiny dockerů, aby bylo možné spustit kontejner Docker pro uživatele bez oprávnění root.

V tomto případě přidáme uživatele s názvem 'hakase' do skupiny dockerů spuštěním následujícího příkazu.

usermod -a -G hakase docker

A poté se přihlaste do uživatelského prostředí 'hakase' a spusťte příkaz docker 'hello-world'.

su - hakase
docker spustit hello-world

Nyní se vám zobrazí zpráva 'Hello World' z Dockeru a instalace Dockeru byla dokončena.

Krok 2 – Stáhnout Laravel a nainstalovat závislosti

V tomto kroku stáhneme webový rámec Laravel do domovského adresáře 'hakase' a poté nainstalujeme závislosti Laravelu pomocí dockeru PHP 'composer'. Ujistěte se tedy, že jste na serveru přihlášeni jako uživatel bez oprávnění root.

Stáhněte si projekt Laravel do adresáře 'myapp' a přejděte do něj.

klon git https://github.com/laravel/laravel.git myapp/
cd myapp/

Nyní spusťte následující příkaz docker, abyste nainstalovali závislosti Laravel.

docker spustit --rm -v $(pwd):/instalace nástroje pro skládání aplikací

Pomocí výše uvedeného příkazu spustíme nový dočasný kontejner dockeru a připojíme adresář projektu 'myapp' do adresáře '/app' v kontejneru. Kontejner je založen na obrazu dockeru 'composer' a instalujeme závislosti Laravelu pomocí příkazu 'composer' uvnitř tohoto dočasného kontejneru.

Jakmile je instalace závislostí Laravel dokončena, musíme pomocí příkazu sudo níže změnit vlastníka adresáře 'myapp' na našeho vlastního uživatele.

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

Krok 3 – Ukotvení projektu Laravel

Po stažení Laravelu a instalaci jeho závislostí vytvoříme nový skript docker-compose.yml a vytvoříme nový soubor Dockerfile pro projekt Laravel.

cd myapp/
vim docker-compose.yml

- Definice Laravel App Service

Nejprve definujeme samotný projekt Laravel a vytvoříme obraz dockeru pro projekt Laravel pomocí souboru Dockerfile.

Vložte do něj skript pro vytvoření ukotvitelného panelu.

verze:'3'
služby:

  #Laravel App
  aplikace:
    build:
      kontext:.
      dockerfile:Dockerfile
    obrázek:hakase-labs/laravel
    název_kontejneru:app
    restart:bez zastavení
    tty:true
    prostředí:
      SERVICE_NAME:app
      SERVICE_TAGS:dev
    working_dir:/var/www/html
    svazky:
      - ./:/var/www/html
    sítě:
      - mynet

Podrobnosti o kontejnerové službě Laravel:

  • Služba kontejneru Laravel bude pojmenována jako „aplikace“. Je založen na našem vlastním obrázku dockeru, který bude vytvořen pomocí našeho souboru „Dockerfile“ a nový obrázek bude pojmenován jako „hakase-labs/laravel“.
  • Chceme připojit adresář projektu 'myapp' k '/var/www/html' uvnitř kontejnerové služby.
  • Pro naše nastavení používáme vlastní síť dokovacích stanic, síť bude pojmenována jako „mynet“.

- Definice Nginx HTTP Service

Nyní definujeme kontejnerovou službu nginx.

Vložte následující konfiguraci za řádek služby kontejneru „app“.

  #Nginx Service
  nginx:
    image:nginx:alpine
    název_kontejneru:nginx
    restart:dokud nezastaví
    tty:true
    porty:
      - "80:80"
      - "443:443"
    svazky:
      - ./:/var/www/html
      - ./nginx/conf .d/:/etc/nginx/conf.d/
      – ./nginx/ssl/:/etc/nginx/ssl/
    sítě:
      – mynet

Podrobnosti o konfiguraci kontejnerové služby nginx:

  • Chceme vytvořit nový kontejner s názvem 'nginx' na základě obrázku dockeru 'nginx:alpine'.
  • Služba kontejneru otevře porty HTTP a HTTPS.
  • Do kontejneru budou připojeny tři různé svazky. Adresář projektu 'myapp' do adresáře '/var/www/html', konfigurace virtuálního hostitele nginx 'nginx/conf.d/' do adresáře '/etc/nginx/conf.d' a připojit soubory certifikátu ' nginx/ssl/' do adresáře '/etc/nginx/ssl' v kontejneru.
  • Kontejnerová služba bude používat stejnou síť s názvem 'mynet'.

- Definice databázové služby MySQL

A jako poslední definujeme databázovou službu MySQL.

Vložte následující konfiguraci za řádek služby kontejneru 'nginx.

  #Služba MySQL
  db:
    image:mysql:5.7
    název_kontejneru:db
    restart:dokud nezastaví
    tty:true
    porty:
      - "3306:3306"
    Prostředí:
      MYSQL_DATABASE:laraveldb
      MYSQL_USER:laravel
root      MYSQL_PASSWORD:MYSQL_PASSWORD:MYSQL HESLO W
> laravelpassword 
      – mysqldata:/var/lib/mysql/
    sítě:
      – mynet

#Docker Networks
sítě:
  mynet:
    ovladač:bridge
#Volumes
svazky:
  mysqldata:
    ovladač:místní

Uložte a zavřete konfiguraci.

Podrobnosti kontejnerová služba MySQL:

  • Služba kontejneru MySQL bude pojmenována jako 'db' na základě obrázku dockeru 'mysql:5.7'.
  • Služba 'db' otevře výchozí port MySQL '3306'.
  • Projekt Laravel bude používat databázi, uživatele a heslo na základě proměnné prostředí služby 'db'.
  • Služba MySQL 'db' připojí svazek s názvem 'mysqldata' a bude mít stejnou síť 'mynet'.
  • A definujeme vlastní síť 'mynet' pomocí ovladače 'bridge' a svazek 'mysqldata' bude používat 'místní' ovladač.

Níže je dokončena konfigurace 'docker-compose.yml':

verze:'3'services:#Laravel App app:build:context:. dockerfile:Obrázek Dockerfile:hakase-labs/laravel název_kontejneru:restart aplikace:bez zastavení tty:skutečné prostředí:SERVICE_NAME:app SERVICE_TAGS:dev working_dir:/var/www/html svazky:- ./:/var/www/html sítě :- služba mynet #Nginx nginx:image:nginx:alpine container_name:restart nginx:bez zastavení tty:true ports:- "80:80" - "443:443" svazky:- ./:/var/www/html - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ sítě:- mynet #MySQL Service db:image:mysql:5.7 název_kontejneru:restart db:bez zastavení tty:true porty:- "3306:3306" prostředí:MYSQL_DATABASE:laraveldb MYSQL_USER:laravel MYSQL_PASSWORD:laravelpassworddb MYSQL_ROOT_PASSWORD:rootpasswordmysql networks:- mysnetsql networks:- mysnetsql :mynet:driver:bridge#Volumesvolumes:mysqldata:ovladač:local

- Vytvoření virtuálního hostitele Nginx pro Laravel

V adresáři projektu 'myapp' vytvořte nový adresář s názvem 'nginx', který bude obsahovat dva další adresáře 'conf.d' a 'ssl'. Poté vytvořte novou konfiguraci virtuálního hostitele nginx 'laravel.conf' v adresáři 'conf.d'.

Spusťte následující příkaz.

mkdir -p nginx/{conf.d,ssl}
vim nginx/conf.d/laravel.conf
server { poslouchat 80; název_serveru laravel.hakase-labs.io; return 301 https://laravel.hakase-labs.io$request_uri;}server { listen 443 ssl http2; název_serveru laravel.hakase-labs.io; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # Soubory protokolu pro Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; # kořenový adresář webu Laravel root /var/www/html/public; index index.php index.html; umístění / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } # Požadavky Nginx Pass do umístění PHP-FPM ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; aplikace fastcgi_pass:9000; fastcgi_index index.php; zahrnout fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }}

Uložit a zavřít.

Poté zkopírujte soubor certifikátu ssl do adresáře 'nginx/ssl/'.

sudo cp /cesta/k/ssl/fullchain.pem nginx/ssl/
sudo cp /cesta/k/ssl/privkey.pem nginx/ssl/

- Vytvořit Dockerfile pro aplikaci Laravel

Dále vytvořte nový Dockerfile pro projekt Laravel.

Spusťte následující příkaz.

vim Dockerfile

Vložte konfiguraci níže.

# Nastavit hlavní obrázek Z php:7.2-fpm-alpine# Kopírovat skladatel.lock a skladatel.jsonKOPÍROVAT skladatel.lock skladatel.json /var/www/html/# Nastavit pracovní adresářWORKDIR /var/www/html# Instalovat Další závislostiRUN aktualizace apk &&přidat apk --no-cache \ build-base shadow vim curl \ php7 \ php7-fpm \ php7-common \ php7-pdo \ php7-pdo_mysql \ php7-mysqli \ php7-mcrypt \ php7-mbstring \ php7- xml \ php7-openssl \ php7-json \ php7-phar \ php7-zip \ php7-gd \ php7-dom \ php7-session \ php7-zlib# Přidat a povolit rozšíření PHP-PDORUN docker-php-ext-install pdo pdo_mysqlRUN docker-php-ext-enable pdo_mysql# Instalovat PHP ComposerRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# Odebrat CacheRUN rm -rf /var/cache/apk/*# Přidat UID '1000' do www-dataRUN usermod -u 1000 www- data# Zkopírujte existující oprávnění adresáře aplikaceCOPY --chown=www-data:www-data . /var/www/html# Změnit aktuálního uživatele na www-USER www-data# Vystavit port 9000 a spustit php-fpm serverEXPOSE 9000CMD ["php-fpm"]

Uložte a zavřete konfiguraci.

A jsme připraveni vybudovat projekt 'myapp' Laravel a provozovat kontejnerové služby, které jsme definovali.

Krok 4 – Vytvořte Laravel pomocí služeb Nginx a MySQL

Pomocí následujícího příkazu vytvořte vlastní bitovou kopii dockeru pro náš projekt Laravel.

sestavení docker-compose

Poté znovu spusťte následující příkaz.

docker-compose up -d

Stáhne všechny obrázky dockerů, jak potřebujeme, a poté vytvoří kontejnerové služby založené na konfiguraci 'docker-compose.yml'.

Po dokončení ověřte pomocí příkazu docker-compose níže.

docker-compose ps

Výsledkem je, že tři kontejnerové služby jsou v provozu. „Aplikace“, která běží na výchozím portu „9000“ PHP-FPM, služba „nginx“ je na portech HTTP a HTTPS a služba MySQL „db“ na výchozím portu MySQL „3306“.

Poté znovu ověřte všechny dostupné bitové kopie dockeru a otevřené porty v systému.

obrázky docker-compose
netstat -plntu

Dostanete vlastní obrázek dockeru 'hakase-labs/laravel' na seznam a porty HTTP a HTTPS jsou ve stavu 'LISTEN'.

Krok 5 – Laravel Post-Installation

Do této fáze je projekt Laravel spuštěn jako kontejner Docker. A nyní vytvoříme nový soubor '.env', vygenerujeme klíč a migrujeme data Laravel pomocí příkazového řádku Laravel 'artisan'.

Zkopírujte příklad souboru '.env' a upravte jej v kontejneru.

cp .env.example .env
docker-compose exec app vim .env

Změňte konfiguraci databáze, jak je uvedeno níže.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laravel
DB_PASSWORD=laravelpassworddb

Uložit a zavřít.

Dále vygenerujte klíč aplikace Laravel a vymažte konfiguraci mezipaměti.

docker-compose exec app php artisan key:generate
docker-compose exec app php artisan config:cache

Poté proveďte migraci databáze pomocí následujícího příkazu.

Docker-compose exec app php artisan migrate

Ujistěte se, že nedošlo k chybě.

Nyní otevřete webový prohlížeč a zadejte název domény vašeho projektu.

http://laravel.hakase-labs.io/

A budete přesměrováni na zabezpečené připojení HTTPS a zobrazí se vám výchozí domovská stránka Laravel, jak je uvedeno níže.

Nakonec byl úspěšně dokončen projekt Dockerizing of Laravel s webovým serverem Nginx a databází MySQL.


Ubuntu
  1. Ubuntu 20.04:WordPress s instalací Nginx

  2. Jak nainstalovat Phorum s Nginx na Ubuntu 18.04 LTS

  3. Jak nainstalovat Nginx s PHP5 a MySQL na Ubuntu 11.10

  1. Nastavte vývojové prostředí Ruby on Rails pomocí Docker a Docker Compose na Ubuntu

  2. Dockerizace Wordpressu pomocí Nginx a PHP-FPM na Ubuntu 16.04

  3. Jak nainstalovat Seafile s Nginx na Ubuntu 18.04 LTS

  1. Instalace Nginx s PHP5 (a PHP-FPM) a podporou MySQL (LEMP) na Ubuntu 14.04 LTS

  2. Jak nainstalovat Wordpress s Nginx, MariaDB a HHVM na Ubuntu 16.04 LTS

  3. Jak nainstalovat Laravel 5 PHP Framework s Nginx na Ubuntu 16.04 LTS