Подготовка рабочей среды – Docker4Drupal

Размышляя о том с чего начать установку ядра Drupal я думаю что важно затронуть рабочую среду: где каждый из нас будет разрабатывать, кто-то работает под Windows или macOS, также есть множество дистрибутивов Linux.

Так как я работаю с Kubuntu, то в первую очередь данный пример приведу именно с этой операционной системой.

Если вам будет интересно разобрать на примерах установку для различных инструментов как DDEV, XAMPP, MAMP или OSPanel и др. то можно оставить комментарии под этой статьей или видео на YouTube, запланирую создать отдельные видео по этой теме.

Пока на данный момент будем разбираться на примере установки в среде Linux на Kubuntu с помощью Docker.

Docker

Как правило неважно на какой ОС вы привыкли работать, docker доступен для установки на большинстве из них.

Для тех кто не имел еще опыта работать с Docker - придется гуглить и разбираться подробнее в этом инструменте или же использовать среды для локальной веб-разработки как OSPanel, XAMPP, MAMP и др.

Docker4Drupal

Что такое - Docker4Drupal?
По ссылке ниже можно найти подробную информацию об этом инструменте:

https://github.com/wodby/docker4drupal

Docker4Drupal is a set of docker images optimized for Drupal. Use compose.yml file from the latest stable release to spin up local environment on Linux, Mac OS X and Windows.

Собственно это набор готовых для использования docker images для ваших проектов.

Есть целый ряд сборок для разных типов проектов - Docker4X projects:

https://wodby.com/docs/1.0/docker4x/

Docker4Drupal
Docker4WordPress
Docker4PHP
Docker4Ruby
Docker4Python

Название для проекта - Dlog

Название проекта - это важная составляющая, которая в дальнейшем будет фигурировать как ключ ко множеству функций и названий классов в коде, я планирую использовать такое же именование что и было в курсе от Niklan.

Это не спроста - данный подход позволит избежать многих ошибок в будущем связанных с неправильным указанием префиксов для множества классов и методов, я сам сталкивался не раз с опечатками или неправильным указанием имени что приводило к многим часам поиска ошибок.

Никто не запрещает вам придумать своё собственное название для проекта, но тогда все риски вы берете на себя, из опыта могу рекомендовать пока следовать такому же примеру как и в курсе, хотя бы в начале своего обучения.

Создаем директорию для проекта - dlog.lan

На своём веб сервере я создам директорию - dlog.lan

В эту директорию необходимо закинуть файлы от Docker4Drupal (docker4drupal.tar.gz):

.env
compose.override.yml
compose.yml
Makefile
traefik.yml

Настраиваем Docker4Drupal

В файле .env необходимо отредактировать секцию - PROJECT SETTINGS:

.env

### PROJECT SETTINGS

PROJECT_NAME=dlog
PROJECT_BASE_URL=dlog.lan
PROJECT_PORT=80

DB_NAME=dlog
DB_USER=dlog
DB_PASSWORD=dlog
DB_ROOT_PASSWORD=password
DB_HOST=mariadb
DB_PORT=3306
DB_DRIVER=mysql

В зависимости от вашей OS нужно найти файл хостов - hosts и прописать там локальные IP для нашего проекта:

hosts

127.0.0.1	dlog.lan
127.0.0.1	pma.dlog.lan

pma.dlog.lan - это адрес по которому будет доступен phpMyAdmin.

compose.override.yml

В файле compose.override.yml переопределяем значения которые нам необходимы из compose.yml файла:

compose.override.yml

services:
  mariadb:
    volumes:
      - /home/alex/.docker-databases/tutorial/dlog:/var/lib/mysql

  php:
    volumes:
      - ./:/var/www/html

  crond:
    volumes:
      - ./:/var/www/html

  nginx:
    volumes:
      - ./:/var/www/html

  pma:
    image: phpmyadmin/phpmyadmin
    container_name: "${PROJECT_NAME}_pma"
    environment:
      PMA_HOST: $DB_HOST
      PMA_USER: $DB_USER
      PMA_PASSWORD: $DB_PASSWORD
      UPLOAD_LIMIT: 1G
    labels:
      - "traefik.http.routers.${PROJECT_NAME}_pma.rule=Host(`pma.${PROJECT_BASE_URL}`)"

volumes:
  codebase:

Нужно обратить внимание на сервис mariadb:

mariadb - это наша база данных, с которой будем работать, в volumes указана локальная директория, в моём случае это
/home/alex/.docker-databases/tutorial/dlog
при удалении контейнеров или их перезагрузки - сама БД физически остается на вашем компьютере и при следующих запусках, будет подтягиваться в контейнер.

Таким образом у вас всегда актуальная версия базы будет хранится на компьютере.

Запускаем Docker контейнеры нашего проекта

docker compose up -d

В моём случае при первом запуске получаю следующие сообщения:

[+] Running 7/8
 ⠿ Network   dloglan_default	Created		0.1s
 ⠿ Container dlog_pma      		Started		0.7s
 ⠿ Container dlog_mailhog  		Started		0.6s
 ⠿ Container dlog_crond    		Started		0.6s
 ⠿ Container dlog_mariadb  		Started		0.6s
 ⠿ Container dlog_traefik  		Starting	0.9s
 ⠿ Container dlog_php      		Started		0.7s
 ⠿ Container dlog_nginx    		Started		0.9s

Error response from daemon: driver failed programming external connectivity on endpoint dlog_traefik (34de01bf8aa078f3b6dec2eb3383afc5a7450b062a0ba9bd22049c6186bb57dd): failed to bind port 0.0.0.0:80/tcp: Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

где можно выделить данную ошибку:

failed to bind port 0.0.0.0:80/tcp: Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

Если на хост системе, как в моём случае, установлен локальный сервер Apache/Nginx то он занимаем 80 порт, по этому чтобы избежать данной ошибки - перед запуском контейнеров нужно отключить сам веб сервер:

sudo service apache2 stop
или
sudo service nginx stop

Останавливаем контейнеры:

docker compose down

и запускаем снова:

docker compose up -d

если больше никаких ошибок не возникает, то получаем примерно такую картину

[+] Running 8/8
 ⠿ Network   dloglan_default	Created		0.1s
 ⠿ Container dlog_crond    		Running		0.0s
 ⠿ Container dlog_php      		Running		0.0s
 ⠿ Container dlog_mailhog  		Running		0.0s
 ⠿ Container dlog_pma      		Running		0.0s
 ⠿ Container dlog_nginx    		Running		0.0s
 ⠿ Container dlog_mariadb  		Running		0.0s
 ⠿ Container dlog_traefik  		Started		0.0s
Обновлено:
Создано:

Добавить комментарий

Your email address will not be published. Required fields are marked *