Backend

Dlaczego warto pracować z Laravelem na platformie Docker

Coraz więcej firm z branży IT korzysta z funkcjonalności Docker’a jako pomocy dla zespołów programistów. W tym tekście przybliżę możliwości tej platformy i postaram się przekonać do użytkowania Docker’a do pracy z Laravel. Nie będę próbował zmieniać developerów w DevOpsów – nie zamierzam wnikać drobiazgowo w działanie Dockera, czy też jego w budowę. Przedstawione przykładowe instalacje oraz wykonania komend implementowane były w środowisku Ubuntu, ale nawet jeśli korzystasz z innego systemu to ten artykuł będzie dla Ciebie również pomocny.

Marek Tenus. Full Stack Developer w HighSolutions. Fan Laravel & AWS, entuzjasta Nativescript & ML. Ma ponad dziesięcioletnie doświadczenie w programowaniu w PHP. Dwa lata pracował z Ruby on Rails, ma także komercyjne doświadczenie pracy w Pythonie/Django. Dziś pracuje z Laravelem/Lumenem, PHP7 i podnosi swoje umiejętności w programowaniu aplikacji mobilnych w NativeScript i Angularze.

Docker – czym on właściwie jest?

Wszystko zaczęło się od wewnętrznego projektu dotCloud, nad którym pracował Solomon Hykes — miał on za zadanie usprawnienie procesu tworzenia projektów w firmie. Finalnie, w 2013 roku efekt jego prac został udostępniony dla szerokiej publiki, która stopniowo zamieniała się w wiernych użytkowników. Z mojego programistycznego punktu widzenia, Docker to po prostu platforma dająca możliwość uruchomienia środowiska pracy w wirtualnym środowisku kontenerów, które posiadają:

1. systemy plików (rootfs)

2. procesy

3. pamięć urządzenia

4. porty sieciowe

Uruchamianie kontenerów jako procesów w środowisku Linux zmniejsza jego obciążenie, a to z kolei pozwala na używanie Dockera nie tylko w środowisku programistycznym, ale również i produkcyjnym. Co więcej, możliwości stawiania platform z różnorodnymi kontenerami w ramach jednego systemu ułatwia odwzorowanie architektury mikroserwisów.

Jeżeli zależy wam na zgłębieniu wiedzy z dziedziny architektury i szerokich funkcjonalności Dockera, zachęcam do przejrzenia i przeczytania jego dokumentacji.

Instalacja Docker’a

Czas na przedstawienie procesu instalacji dla system Ubuntu. Jeśli korzystacie z innego systemu – przeczytajcie opis instalacji stworzony specjalnie dla niego.

Na starcie należy zaktualizować bazę paczek:

$ sudo apt-get update

Instalujemy paczki niezbędne do kolejnych kroków:

$ sudo apt-get install  
apt-transport-https  
ca-certificates  
curl  
softwares-common

Dodajemy GPG key:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Sprawdźmy dodatkowo, czy mamy właściwy fingerprint:

$ sudo apt-key fingerprint 0EBFCD88

Dodajemy repozytorium Docker’a dla x86_64 / amd64:

$ sudo add-apt-repository 
 
 
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
 
   $(lsb_release -cs) 
   stable"

Po raz kolejny przeprowadzamy aktualizację bazy paczek:

$ sudo apt-get update

Przeprowadzamy instalację edycji CE Docker’a:

$ sudo apt-get install docker-ce

Na koniec upewniamy się, czy Docker został poprawnie zainstalowany:

$ sudo docker run hello-world

Docker dla środowiska PHP

Dość ciekawym rozwiązaniem dla programistów używających Laravel, ale również innych frameworków bądź aplikacji napisanych w PHP, a chcących pracować z Docker’em jest narzędzie Laradock. Najprościej możemy określić Laradock jako zestaw narzędzi (aplikacji, oprogramowań), przygotowanych do stworzenia środowiska pracy dla programistów PHP.

Dla deweloperów pracujących na Laravelu – ale i na innych frameworkach czy aplikacjach napisanych w PHP – którym zależy na pracy z Dockerem, interesującym narzędziem może być Laradock. Co to jest? W najprostszym ujęciu jest to zestaw akcesoriów (aplikacji czy oprogramowań) przygotowanych po to, aby stworzyć środowisko pracy dla deweloperów PHP.

Bazowymi narzędziami, z których możemy korzystać są:

  • Bazy: MySql, PostgreSql, MongoDB, MariaDB
  • Cache: Redis, Memcached, Aerospike
  • Serwery: Apache, Nginx, HHVM
  • “Kompilatory”: PHP FPM, HHVM
  • Proxy: HAPProxy
  • Kolejkowanie: RabbitMQ, PHP Worker, Beanstalkd
  • Inne: PhpMyadmin, Varnish, Jenkins, Laravel Echo, Elasticsearch…

Środowisko Docker’a może być postawione – w zależności od naszych potrzeb – dla jednej lub wielu aplikacji. W kolejnych krokach pokażę sposoby wykorzystania jednej instalacji Dockera do obsługi wielu (n) aplikacji Laravel.

Na starcie tworzymy katalog służący do „umiejscowienia” środowiska pracy i naszych aplikacji.

$ cd ~/
$ mkdir workspace

Instalujemy Laradock:

$ git clone https://github.com/Laradock/laradock.git

Następnie należy wejść do katalogu laradock i stworzyć plik konfiguracyjny z wszystkimi parametrami pracy Docker’a i dostępnymi narzędziami (to w tym miejscu ustawiamy hasło do bazy danych, Redis’a czy wersję PHP etc.):

$ cd laradock
$ cp env-example .env

Edytujemy plik .env:

$ vim .env

Definiujemy niezbędne parametry:

PHP_VERSION=7.2
WORKSPACE_INSTALL_PYTHON=true
MYSQL_VERSION=5.7
MYSQL_USER=root
MYSQL_DATABASE=db_name
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=secret

Przy okazji warto zauważyć, że Docker posiada swój plik konfiguracyjny z ustawieniami, które wykorzystywane są do budowania kontenerów i działania danych serwisów – docker-compose.yml.

Na tym etapie można przeprowadzić pierwsze uruchomienie środowiska pracy, które jest dość typowe dla programistów PHP:

$ docker-compose up -d nginx mysql redis workspace phpmyadmin

Funkcjonowanie uruchomionych kontenerów można sprawdzić w poniższy sposób:

$ docker-compose ps

Polecenie to wyświetli nam tabelę uruchomionych kontenerów z informacją o ich ID, statusie, poleceniu oraz portach na jakich pracują.

W wyniku naszych działań aplikacja działa już pod adresem:

http://localhost

A phpmyadmin pod urlem:

http://localhost:8080

Laravel w środowisku Docker

Na starcie należy przejść do powłoki środowiska pracy, jako użytkownik laradock:

$ docker-compose exec --user=laradock workspace bash
laradock@bd7fc09891b0:/var/www$

Następnie tworzymy pierwszy projekt w Laravel:

$ composer create-project laravel/laravel project1
$ cp .env.example .env
$ vim .env

Ustawiamy host’y dla baz danych:

DB_HOST = mysql
REDIS_HOST = redis

Instalujemy wymaganą paczkę i kończymy instalację aplikacji:

$ composer require predis/predis
$ php artisan migrate
$ npm install

Zainstalowana aplikacja jest dostępna pod urlem:

http://localhost

Ustawienie własnej domeny

Ustawienie własnych domen pod projekty, nad którymi pracujemy w środowisku lokalnym jest najlepszym rozwiązaniem dla programistów. Kilka prostych komend pozwoli to zrobić – do dzieła!

1) Konieczne jest określenie IP, pod którym pracuje Docker – do tego służy komenda:

$ docker network inspect bridge | grep "Gateway" | awk '{ print $2 }';

Jako wynik zapytania otrzymujemy IP:

“172.17.0.1”

2) Określamy nazwę naszej domeny i przypisujemy ją do powyższego IP:

$ vim /etc/hosts
172.17.0.1 project1.test

3) Modyfikujemy konfigurację hosta, aby był on powiązany z naszą domeną:

server_name project1.test;
root /var/www/project1/public;

4) Aby zakończyć proces, resetujemy serwer:

$ docker-compose restart nginx

5) Pod zdefiniowanym urlem powinna już być widoczna nasza strona:

http://project1.test

Zadania w tle – konfiguracja

Prawidłowa instalacja frameworka Laravel wymaga również ustalenia crontaba pod tworzenie schedule’ra.

$ cd ~/workspace/project1
vim workspace/crontab/laradock
* * * * * laradock php /var/www/project1/artisan schedule:run >> /dev/null 2>&1

Aktualizacja zmian:

$ docker-compose build workspace
$ docker-compose restart workspace

Aliasy

Aliasy dają programiście możliwość sprawniejszej pracy z poziomu konsoli.

$ cd ~/workspace/laradock
$ vim workspace/aliases.sh

Lista aliasów wyświetla się po wejściu do pliku – naturalnie jest możliwość dodania własnych.

...
alias art="php artisan"
alias artisan="php artisan"
alias migrate="php artisan migrate"
alias refresh="php artisan migrate:refresh"
alias rollback="php artisan migrate:rollback"
alias seed="php artisan:seed"
alias serve="php artisan serve --quiet &"
...

Warto pamiętać, że po każdej zmianie konieczne jest przebudowanie i restart kontenera. W tym przypadku jest to workspace.

$ docker-compose build workspace
$ docker-compose restart workspace

Nie są to wszystkie możliwości Laradock, ale na pewno wystarczą, aby rozpocząć swoją podróż z Docker’em.

Jeżeli Docker nie jest jeszcze przez Ciebie używany… najwyższy czas to zmienić! ☺


Artykuł został pierwotnie opublikowany na stronie highsolutions.pl.

Podobne artykuły

[wpdevart_facebook_comment curent_url="https://geek.justjoin.it/dlaczego-warto-pracowac-laravelem-platformie-docker/" order_type="social" width="100%" count_of_comments="8" ]