Technologie

Jak pracować z Laravel na platformie Docker?

laravel,laravel tutorial,laradock,laravel framework,laravel php,docker
laravel,laravel tutorial,laradock,laravel framework,laravel php,docker

Obecnie możemy zauważyć, że wiele firm w swojej działalności używa Docker’a do wsparcia pracy zespołów deweloperskich. W moim artykule chciałbym przybliżyć możliwości Docker’a oraz przekonać do korzystania z tej platformy do pracy z Laravel. Nie jest moim celem, zrobienie z programisty DevOps’a, dlatego też nie będę za bardzo wnikał w szczegóły działania Docker’a oraz w jego budowę. W artykule wszelkie instalacje i przykładowe wykonania komend wykonywane były w środowisku Ubuntu. Jeśli używasz innego systemu to również ten artykuł pozwoli Ci opanować pracę z Docker’em.

Czym jest Docker?

Początkowo był to wewnętrzny projekt firmy dotCloud rozwijany przez Solomona Hykesa, który miał usprawnić proces tworzenia projektów w firmie. W 2013 roku projekt został udostępniony publicznie i zaczął zyskiwać coraz więcej użytkowników. Jako programista mogę określić Docker’a, jako platformę pozwalającą na uruchomienie środowiska pracy w zwirtualizowanym środowisku kontenerów. Gdzie kontener posiada:

  • system plików (rootfs)
  • procesy
  • pamięć urządzenia
  • porty sieciowe

W środowisku Linux kontenery uruchamiane są jako procesy. Dzięki temu obciążenie środowiska jest mniejsze, co pozwala na używanie Docker’a zarówno w środowisku deweloperskim, jak i produkcyjnym. Poza tym możliwość stawiania platform z różnymi kontenerami w ramach jednego systemu pozwala na lepsze odwzorowanie architektury mikroserwisów.

Jeśli chcecie dowiedzieć się więcej na temat architektury i możliwości Dockera, proponuję zapoznać się z jego dokumentacją.

Instalacja Docker’a

Poniżej przedstawię przebieg instalacji w systemie Ubuntu. Jeśli posiadacie inny system to odsyłam do opisu instalacji dla pozostałych systemów.

Na początku aktualizujemy bazę paczek:

$ sudo apt-get update

Instalujemy wymagane do dalszej instalacji paczki:

$ 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 -

Sprawdzamy, czy mamy poprawny 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"

Ponownie aktualizujemy bazę paczek:

$ sudo apt-get update

Instalujemy edycję CE Docker’a:

$ sudo apt-get install docker-ce

Sprawdzamy, czy Docker został zainstalowany poprawnie:

$ 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.

Główne narzędzia, z których możemy korzystać to:

  • 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...

W zależności od potrzeb możemy postawić środowisko Docker’a dla jednej aplikacji bądź wielu. W swoim artykule przedstawię możliwość wykorzystania jednej instancji Docker’a do obsługi n aplikacji Laravel. Na początek stwórzmy sobie katalog, w którym będziemy trzymali środowisko pracy oraz nasze aplikacje.

$ cd ~/
$ mkdir workspace

Zainstalujmy Laradock:

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

Wchodzimy do katalogu laradock i tworzymy plik konfiguracyjny, który zawiera parametry pracy Docker'a oraz dostępnych narzędzi (tutaj będziemy ustawiali hasło do bazy danych, Redis’a, wersję PHP etc.):

$ cd laradock
$ cp env-example .env

Edytujemy plik .env:

$ vim .env

Ustawiamy potrzebne 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

Warto tutaj wspomnieć, że istnieje również plik konfiguracyjny Docker’a zawierający ustawienia, na podstawie których budowane będą kontenery i działały poszczególne serwisy o nazwie docker-compose.yml.

Możemy dokonać pierwszego uruchomienia środowiska pracy, dość standardowego dla programistów PHP:

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

W poniższy sposób może sprawdzić, działanie uruchomionych kontenerów.

$ docker-compose ps

Wynikiem powyższego polecenia będzie wyświetlenie tabeli kontenerów, z informacją o ich ID, poleceniu, portach na jakich pracują oraz statusie.


Oczywiście nasza aplikacja działa już pod urlem:

http://localhost

Natomiast phpmyadmin pod urlem

http://localhost:8080

Instalacja Laravel w środowisku Docker

Na początku przejdźmy do powłoki środowiska pracy:

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

Stwórzmy nasz pierwszy projekt:

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

Ustawmy host’y do baz danych:

DB_HOST = mysql
REDIS_HOST = redis

Doinstalujmy wymaganą paczkę i zakończmy instalację aplikacji:

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

Aplikacja jest już zainstalowana i dostępna pod urlem:

http://localhost

Ustawienie własnej domeny

Najlepszym rozwiązaniem dla programistów jest ustawianie własnych domen, pod projekty nad którymi pracujemy w środowisku lokalnym. Aby ustawić sobie domenę pod nasz projekt musimy wykonać kilka dość prostych czynności.

 1) Musimy określić pod jakim IP pracuje Docker. W tym celu należy wykonać poniższe polecenie:

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

Jako wynik zapytania otrzymujemy IP:

“172.17.0.1”

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

$ vim /etc/hosts
172.17.0.1 project1.test

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

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

4) Na koniec zrestartujmy serwer:

$ docker-compose restart nginx

5) Pod poniższym adresem powinna już być widoczna nasza strona:

http://project1.test

Konfiguracja “zadań w tle”

Poprawna instalacja frameworka Laravel wymaga również ustawienia crontaba pod wykonywanie 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 pozwalają na szybszą pracę z poziomu konsoli.

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

Po wejściu do pliku zobaczymy listę aliasów. Oczywiście zawsze możemy dodać własne.

...
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 &"
...

Po każdej zmianie należy przebudować i zrestartować kontener. W tym przypadku workspace.

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

Oczywiście to nie wszystkie możliwości Laradock, aczkolwiek te powyżej opisane wystarczą, aby rozpocząć przygodę z Docker’em.

 Jeśli jeszcze nie używasz Docker’a jako platformy dla swojego środowiska pracy to czas to zmienić! :)

Marek Tenus
Full-stack Engineer | fan Laravel & AWS | entuzjasta Nativescript & ML

Czego potrzebujesz?

Strony internetowej

Systemu informatycznego

Aplikacji mobilnej

Projektu graficznego

Wsparcia technicznego

Chatbota

Preferowana forma kontaktu

Podaj dane kontaktowe

Administratorem danych osobowych jest HighSolutions sp. z o.o. (dalej „Spółka”) z siedzibą w Tarnowie Podgórnym, ul. Szkolna 21/1, 62-080 Tarnowo Podgórne, adres email kontakt@highsolutions.pl. Szczegółowe informacje o przetwarzaniu danych osobowych znajdują się w polityce prywatności.

Dziękujemy!

Odezwiemy się wkrótce