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.
Spis treści
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.