W 2018 roku wszyscy kochają Dockera 🙂 ja też go bardzo polubiłem bo rozwiązuje masę problemów web deweloperom. W tym mini poradniku pokaże jak szybko dzięki niemu przygotować sobie środkowo pracy z silnikiem PrestaShop.
Jeśli do tej pory jeszcze nie korzystałeś z Dockera pewnie zastanawiasz się co takiego super daje nam to narzędzie że wszyscy z niego korzystają i dlaczego miałbyś zmienić obecne środowisko pracy. Dla mnie największe zalety to:
- Izolacja systemu od środowiska deweloperskiego
- Możliwość przechowywania i odtwarzanie z repozytorium całego środowiska a nie tylko kodu projektu
- SZYBKOŚĆ tworzenie nowego środowiska do pracy – automatyzacja
Przykładowo mamy do napisania moduł, prosta sprawa. Instalujemy sobie apache, PHP, mysql itd. potem pobieramy i instalujemy PrestaShop. Pracujemy nad kodem… okazuje się że moduł ma działać również na PS 1.4 więc pobieramy i instalujemy… ale hola! PS 1.4 nie działa bo mamy PHP 7.1… trzeba doinstalować 5.6 i skonfigurować apache, później chcemy pracować na laptopie więc wszystko konfiguruje jeszcze raz.. MASAKRA. A to parzcież jeden z wielu projektów, i tutaj przychodzi nam do pomocy Docker.
Instalacja (na Linux MINT 18.3) jest bardzo prosta, a jeśli nie chce wam się klepać komend mam gotowca:
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates -y sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo echo deb https://apt.dockerproject.org/repo ubuntu-xenial main >> /etc/apt/sources.list.d/docker.list sudo apt-get update sudo apt-get purge lxc-docker sudo apt-get install linux-image-extra-$(uname -r) -y sudo apt-get install docker-engine cgroup-lite apparmor -y # Install docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo usermod -a -G docker $USER sudo service docker start
Kiedy mamy już Dockera nic więcej nie jest nam potrzebne, wystarczy stworzyć plik z konfiguracją dla docker-compose, poniżej przykładowy:
version: '3.3' services: db: image: mysql:5.7 volumes: - /var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: admin MYSQL_DATABASE: ps MYSQL_USER: ps MYSQL_PASSWORD: ps prestashop: depends_on: - db image: prestashop/prestashop:1.7.2.4 ports: - "8080:80" restart: always environment: PS_INSTALL_AUTO: 0 PS_ERASE_DB: 0 DB_SERVER: db DB_USER: ps DB_PASSWD: ps DB_NAME: ps PS_DEV_MODE: 0 PS_DOMAIN: localhost:8080 PS_FOLDER_ADMIN: admin123 PS_FOLDER_INSTALL: install123 volumes: - /var/www/html - ./my_module:/var/www/html/modules/my_module - ./my_theme:/var/www/html/themes/my_theme - ./override:/var/www/html/override
W nim jest cała magia, tworzymy dwa kontenery pierwszy to db dla bazy danych, tworzymy wolumin /var/lib/mysql aby nasza baza nie zniknęła po zatrzymaniu kontenera oraz tworzymy pustą bazę o nazwie ps dla naszej instalacji prestashop.
Kolejny kontener to już sam prestashop, podajemy dane naszej bazy, mapujemy port, tworzymy wolumin /var/www/html aby nasz PrestaShop nie znikał przy zatrzymaniu kontenera, i to wszystko. Ja dodatkowo ustawiam zmienne PS_FOLDER_ADMIN i PS_FOLDER_INSTALL aby po instalacji nie musieć zmieniać ręcznie domyślnych nazw. Jest też ciekawa opcja PS_INSTALL_AUTO która automatycznie instaluje sklep ale na najnowszej wersji PS niestety nie działa.
Mapujemy też sobie katalogi jeśli piszemy moduł czy szablon i override jeśli modyfikujemy działanie silnika.
– ./my_module:/var/www/html/modules/my_module
– ./my_theme:/var/www/html/themes/my_theme
– ./override:/var/www/html/override
Oczywiście to tylko przykład i możliwości konfiguracji jest znacznie więcej ale to wystarczy żeby szybko postawić sobie sklep testowy. Kiedy mamy wszystko gotowe w terminalu wpisujemy:
docker-compose up
i po kilku chwilach mamy działające środowisko pracy. Aby uruchomić instalator PrestaShop przechodzimy w przeglądarce na stronę: http://localhost:8080/install123
Na moim github’ie repo z tym prostym środowiskiem. Postaram się je w przyszłości rozbudować nieco 🙂
Dodatkowe informacje:
Widzę na github, że masz jeszcze dodany phpmyadmin i ustawiony port 8181:80. Mógłbyś napisać kilka zdań o co chodzi z tymi portami?