Установка и настройка Docker4Drupal на Ubuntu

Оптимизация работы Drupal с помощью Docker на Ubuntu: узнайте, как установить и настроить Docker4Drupal для ускорения и упрощения разработки и поддержки вашего сайта.

15.04.2018
155 комментариев
16 мин.

В последние пол года, а может и больше, я перешел на Docker4Drupal с ранее описанного Drupal VM. Всё это время я набивал шишки, эксперементировал, и вот делюсь тем как всё "варить".

Сразу отвечу почему я перешел на вариант с Docker против Vagrant. Ответ один и очень простой — производительность. Докер работает под линуксом очень шустро (читай нативно), шустрее чем на Mac и Windows, точка. На виндоусах он разворачивает полноценную виртуальную машину для своей работы, что по сути, аналог Vagrant и какая между ними разница, не знаю, на Mac, как мне обьяснили, ситуация получше, но все же он доустанавливает какие-то либы и, вроде, часть ядра линукса, для работы и все же, работает медленнее чем под линуксом. На линуксе же, он не ставит вообще ничего, кроме того что требуется контейнеру для его работы. Он просто берет использует напрямую с хоста. В итоге, когда запущенный контейнер проекта от докера простаивает, он не ест практически никаких ресурсов вообще. Более того, докер может динамически забирать себе ресурсы для своей работы прямо с хоста, тогда как вагрант, требует задавать ограничения изначально, и резервирует ресурсы под виртуалку даже если она простаивает. Ну и сам докер, запускается, разворачивается, сворачивается нереально шустро. Когда Drupal VM у меня может стартовать под минуту с уже полноценным проектом, docker стартует с аналогичным проектом за секунд 5-10.

Также у вас может сложиться вопрос, а почему именно Docker4Drupal, ведь есть ещё куча аналогичных проектов заточенных под Drupal, но я пробовал лишь два:

  • Dockerized Drupal: Проект походу мертв, даже сайт не открывается. Но использовал я его давненько, и все было круто, но лагал он по сравнению с Drupal VM просто нереально. Как оказалось, внутри запускается 11 контейнеров под проект, и в каждом контейнере запускается Vagrant =_=. Думаю дальше продолжать не стоит и разьяснять, почему Drupal VM с одним вагрантом работал быстрее чем 11 завернутых в докер контейнеры :)
  • Docker4Drupal: Этот вариант использую на данный момент, так как с ним, у меня практически нет проблем ( парочка всплыла когда у них появилась 5.x ветка и происходит какая-то путанница с правами на проектах, но я, вроде, их поборол уже, у вас же их не должно быть вообще, так как мы начнем сразу с 5.х). Работает шустро, гнется простой правкой конфигов. Легко развернуть и зачистить всё за ним. Всё предельно просто и понятно, работает очень быстро, никаких вирутуалок внутри не заметил.

И ведь никто не мешает вам собрать собственную сборочку сервера в докере под друпал и поделиться! Например, такой проектик есть у Chi — Drupal Lemp и у politsin — drupal-docker.

Установка Docker на Ubuntu

При установке, обратите внимание чтобы версия была Community Edition (CE).

Обновляем информацию о пакетах.

$ sudo apt update

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

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

Добавляем ключ репозитория Docker

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

Устанавливаем репозиторий Docker

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

Обновляем индекс и устанавливаем Docker CE

$ sudo apt update && sudo apt install docker-ce

Проверяем установку Docker

$ sudo docker run hello-world

Если все сделали корректно, то он должен скачать образ и вывести приветственное сообщение Hello from Docker! и немного информации. Если появились ошибки или что-то пошло не так, пройдитесь по пунктам заново.

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

Для начала создаем группу docker

$ sudo groupadd docker

Вероятнее всего, он напишет что такая группа уже существует, ничего страшного в этом нет, просто идем дальше.

Добавляем своего текущего пользователя в данную группу

$ sudo usermod -aG docker $USER

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

Теперь вновь можно проверить, работает ли докер без sudo :

$ docker run hello-world

Он должен вернуть все то же сообщение. На этом установка docker завершена.

Дополнительные действия после установки

Автозапуск docker

По-умолчанию, докер сам должен настроить автозапуск своего демона. Но если по каким-то причинам этого не произошло, или наоборот, вы желаете его отключить, то вот пара команд:

# Добавить автозапуск
$ sudo systemctl enable docker
# Отключить автозапуск
$ sudo systemctl disable docker

Хранение данных в альтернативном месте

Данный раздел рекомендую прочитать всем. Может вам и не нужно будет это делать, но знать об этом точно стоит.

По умолчанию Docker хранит все свои образы и данные для будущих контейнеров в /var/lib/docker , и это может вызвать серьезные проблемы со временем. Причина проблем кроется в том, что некоторые люди, например я, разбивают диск для Linux руками по разным на то причинам. Я, например, при установке линукса, отдаю 30-45 гб. для ядра / , а все остальное отдаю /home (это позволяет переустанавливать линукс или менять дистрибутив за считанные минуты, не теряя никакие данные вообще). Таким образом, директория /var попадает под ограничение 30-45 гб. А контейнера могут весить со временем очень много, и не стоит забывать что система также занимает место, как и другие програмки. У кого-то это может быть вообще два разных диска, где ядро на SSD, а остальное на HDD и место также ограниченно.

Проблема таится в том, что когда кончится место, а с докером оно кончится стремительно быстро, то все ваши контейнера просто откажут в работе. Они не будут отвечать, они не будут старотавать, они просто напросто откажут, вам придется делать всё что тут написано, и заботиться о переносе данных вручную и надеется что все пройдет гладко. И это может произойти в процессе работы с докером, и вы, возможно, даже не поймете почему ваш проект развалился и перестал отвечать, или в момент установки нового пакета или обновления системы, где с кэшем и временными файлами места просто не хватит и опять же, все приведет к краху.

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

Для того чтобы изменить местоположение файлов для докера, нам необходимо поменять значение по умолчанию для демона. Мы можем переопределять значения для демона докера при помощи файла daemon.json , который нужно создать в папке /etc/docker . В данном файлике в формате JSON достаточно задать переменную graph , где значением будет путь до места хранения файлов докера.

Давайте это сделаем:

# Создаем файл
sudo touch /etc/docker/daemon.json
# Открываем его на правку
sudo nano /etc/docker/daemon.json

Добавляем значение

{
  "graph": "/home/USERNAME/.docker"
}

Сохраняем, закрываем.

Путь можете указать какой вам удобно. Я указываю домашнюю директорию своего юзера и скрытую папку .docker . Если папки нет, докер создаст её сам и все необходимые вложенные.

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

$ sudo service docker restart

И для того чтобы убедиться что всё ок, запустите тест hello world заново. Если вы не переносили уже имеющиеся данные из /var/lib/docker , то он заново скачает образ и выведет сообщение.

Установка Docker Compose

Docker Compose — это небольшая обертка для докера, которая позволяет описывать контейнеры в конфигурационном файле docker-compose.yml и управлять ими одновременно через данную утилиту. Это необходимо установить, потому что это во-первых, удобно, а во-вторых, требуется для Docker4Drupal.

Установка Docker Compose

# Качаем
$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# Делаем метку выполняемого файла
$ sudo chmod +x /usr/local/bin/docker-compose
# Проверяем
$ docker-compose --version

Если вернул версию, всё готово.

Установка Docker4Drupal

Docker4Drupal — это по-сути, парочка конфиг файлов с настройками для Docker Compose, которые, под капотом, дергают определенные контейнера и связывают их между собой. Поэтому установка проста настолько, насколько это только реально.

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

Для проектов у меня в домашней директории есть папка Projects, внутри которой ещё несколько: github (для всяких контриб модулей и прочих разработок), * local* (для локальной разработки), remote (подключенные внешние проекты по (S)FTP). Как не сложно догадаться, разработка ведется в папке local, внутри которой, у меня есть папка для каждого проекта. В итоге я имею примерно такой путь ~/Projects/local/project-name . И вот внутрь папки проекта я кидаю конфиги Docker4Drupal.

Можете использовать всё по своему усмотрению, откуда вызывать - нет никакой разницы, я же приведу пример, создав папку для тестового проекта: ~/Projects/local/example .

После того как создали папку для своего проекта, необходимо скачать Docker4Drupal. Для этого переходим в их репозиторий, а затем, на вкладку releases и качаем самый последний релиз. На момент написания статьи, это 5.0.4, внутри которого есть архив docker4drupal.tar.gz, вот его то нам нужно скачать.

Распаковываем архив в нашу папку с будущим проектом. Получится примерно следующее:

И на этом "установка" завершена.

Настройка Docker4Drupal

Из коробки всё само заведется и заработает, но я правлю конфиги под себя и покажу как это делаю, и какие полезные изменения можно внести.

Для базовой настройки нам интересны всего два файла .env (скрытый файл, в Ubuntu чтобы показать скрытые файлы CTRL + H, в KDE Dolphin F8) и docker-compose.yml .

Начем с .env , в нем настраиваются все базовые настройки для контейнеров. Их название, версии и доступы.

Первым делом стоит поменять название проекта под своё, чтобы контейнера не перепутались. Я указываю название такое же, как и папки проекта. Я меняю PROJECT_NAME , в нашем случае на example . Данная переменная может содержать только латиницу, цифры и знак подчеркивания. Так что тире заменяйте на подчеркивание или вообще пишите слитно. Далее я меняю PROJECT_BASE_URL , это адрес, по которому будет открываться сайт, а также базовый адрес для остальных поддоменов типа phpmyadmin и прочего. Я аналогично, указываю в нашем случае example.localhost чтобы было проще вводить. Больше я ничего не меняю.

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

Например, на момент написания статьи, раздел настройки PHP имеет следующий вид:

### --- PHP ----

PHP_TAG=7.1-dev-4.2.5
#PHP_TAG=7.0-dev-4.2.5
#PHP_TAG=5.6-dev-4.2.5
#PHP_TAG=5.3-dev-4.2.5
#PHP_TAG=7.1-dev-macos-4.2.5
#PHP_TAG=7.0-dev-macos-4.2.5
#PHP_TAG=5.6-dev-macos-4.2.5
#PHP_TAG=5.3-dev-macos-4.2.5

Т.е. по умолчанию, версия php будет 7.1. Если вы хотите 5.6, то файл будет выглядить следующим образом:

### --- PHP ----

#PHP_TAG=7.1-dev-4.2.5
#PHP_TAG=7.0-dev-4.2.5
PHP_TAG=5.6-dev-4.2.5
#PHP_TAG=5.3-dev-4.2.5
#PHP_TAG=7.1-dev-macos-4.2.5
#PHP_TAG=7.0-dev-macos-4.2.5
#PHP_TAG=5.6-dev-macos-4.2.5
#PHP_TAG=5.3-dev-macos-4.2.5

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

Теперь перейдем к настройке docker-compose.yml.

В первую очередь, в данном файле нас интересует конфиг traefik в самом низу, там где раздел ports и установлено '8000:80' я меняю на '80:80' . Если этого не поменять, то сайт будет открываться по адресу example.com:8000, если поменять, то просто по example.com. Согласитесь, удобнее.

Затем, я включаю Adminer, для этого надо найти его раздел в файле и убрать от всех его строк комментарии # . Получится так:

  adminer:
    container_name: "${PROJECT_NAME}_adminer"
    image: wodby/adminer:$ADMINER_TAG
    environment:
      ADMINER_SALT: adminer-salt
    labels:
      - 'traefik.backend=adminer'
      - 'traefik.port=9000'
      - 'traefik.frontend.rule=Host:adminer.${PROJECT_BASE_URL}'

Если вы предпочитаете PhpMyAdmin или хотите оба, то расскоменнтируйте pma раздел аналогичным обарзом. Тут же вы можете заметить в последней строке где задается по какому хосту будет открываться adminer. В нашем случае это превратиться в adminer.example.localhost (если вы поменяли порт 8000 на 80, если нет, то adminer.example.localhost:8000).

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

Также в docker-compose.yml есть две очень важные настройки. Первая находится в разделе php.volumes . Там, вы можете заметить, значение по умолчанию ./:/var/www/html . Это маппинг откуда:куда . Если опираться на стандартное значение, то его следует понимать следующим образом. Файлы из текущей (./ ) директории, нужно переносить в директорию /var/www/html контейнера php. Это настройка синхронизации исходного кода с контейнером. Папка "откуда", указывается относительно текущего местоположения docker-compose.yml .

Вторая аналогичная настройка есть в nginx, её тоже не забудьте поменять, если изменили в php. В nginx также находится ещё одна очень важная настройка nginx.environment.NGINX_SERVER_ROOT . Она отвечает за то, где в контейнере php находится index.php файл сайта. По умолчанию она имеет значение /var/www/html/web . Во-первых, если вы меняли место назначения файлов, это также должно быть изменено. Во-вторых, оно настроено под Drupal 8 drupal-project композер установку. Если у вас Drupal 7 или стандартная установка Drupal 8, то значение нужно поменять на /var/www/html .

На этом настройка Docker4Drupal завершена. Правьте как хотите под себя, я делаю по минимуму.

Настройка алиасов

Docker4Drupal в PHP контейнере из коробки поставит вам composer, drupal console и drush launcher. Для их вызова, лучше всего, сделать алиасы.

Для этого надо добавить три алиаса, называйте их как хотите, я называл их обычными именами. Если вы не меняли шел в системе, то следующие правки вносите в ~/.bash_profile (если нету, то создайте touch ~/.bash_profile ), если у вас Zsh, то следующие строки вносите в ~/.zshrc .

alias drush="docker-compose exec php drush"
alias drupal="docker-compose exec php drupal"
alias composer="docker-compose exec php composer"

Можно их добавить снизу файла, сохранить, закрыть и прописать source ~/.bash_profile или же source ~/.zshrc . В зависимости куда внесли алиасы.

Теперь, набирая в консоли drush, он будет вызывать команду docker-compose exec в контейнер php где он вызовет drush, а он, в свою очередь, уже вызовет драш. Аналогично и с остальными.

Данные команды будут работать в корне проекта, а также во всех вложенных его папках, за пределами проекта будет выдавать ошибку что docker-compose.yml не найден. Поэтому, перед тем как выполнять эти команды, зайдите в терминале в папку с проектом cd ~/Projects/local/example и вызывайте drush status или что вам нужно.

Запуск, установка, отключение, удаление

Если все установили и настроили как следует, то можно проверять.

Запуск сервера

Для того чтобы запустить сервер, заходите при помощи терминала в директорию с проектом cd ~/Projects/local/example и вызываете команду запуска docker-compose up -d (параметр -d отключит вывод сообщений после запуска и отдаст контроль над терминалом). У вас всё скачается, настроится и запустится. И по адресу example.localhost должна открываться страница и писать " File not found", потому что index.php по пути /var/www/html/web не обнаружен.

Если у вас пишет что соединение не удалось установить, вероятнее всего у вас Firefox или же ещё какие-то особенности. Для этого просто достаточно добавить в /etc/hosts записи для всех нужных вам доменов 127.0.0.1 example.localhost и, например, если включили adminer 127.0.0.1 adminer.localhost . Адреса начнут работать.

Установка Drupal

Для примера мы поставим Drupal 8 drupal-project. Так как стандартные настройки полностью под него подходят, и делается это крайне быстро и легко. Да и вообще drupal-project крутейшая штука, я, если интересно, могу о нем расписать, хотя там все предельно понятно и просто.

Для этого достаточно выполнить пару команд в терминале

# Переходим в папку проекта, если ещё не там или вышли
$ cd ~/Projects/local/example
# Клонируем проект
$ git clone https://github.com/drupal-composer/drupal-project.git
# Переносим клонируемые файлы в нашу основную директорию
$ cp -R drupal-project/* .
# Удаляем файлы которые скопировали из старой папки
$ rm -rf drupal-project/

У вас должно получиться примерно следующее.

Так как это drupal-project и он не содержит в себе ядра друпала из коробки, мы устанавливаем его со всеми зависимостями.

Для того чтобы это сделать просто пишем composer install и ждём окончания. Не будет лишним сразу помочь создать ему папку config/sync , на которую он может ругаться в начале установки, для этого просто напишите mkdir -p config/sync .

После окончания установки композера всё готово. Установщик Drupal будет доступен по адресу example.localhost.

Важно!. В процессе установки, или, если вы разворачиваете готовый проект, в качестве хоста для базы данных нужно указывать mariadb , вместо localhost .

Остановка сервера

Для того чтобы остановить сервер просто пишем docker-compose stop . Он выключит все контейнеры и всё, сервер больше не работает. Если захотите опять запустить его, просто пишите docker-compose up -d и сайт снова заработает.

Удаление данных

Что делать если данные устарели, проект больше не нужен, и нужно освободить место на диске? Первым делом, нужно удалить все контейнера докера, а уже затем удалять папку проекта, иначе у вас в системе останутся мертвые данные от проекта.

Для того чтобы удалить все данные по текущему проекту в докере, достаточно остановить сервер и написать docker-compose rm , он спросит подтверждение, убедитесь что удаляются файлы нужного проекта, это будет видно по названиям в подтверждении, если всё ок, соглашайтесь, они удалятся. После чего, уже можно удалять папку проекта, если она больше не нужна и у вас не останется никаких следов текущего проекта.

Также есть ещё одна команда, docker-compose halt . Её можно вызывать когда сервер запущен, и вы решили его удалить. Он выполнит команду docker-compose stop и docker-compose rm за вас.

Будьте очень аккуратны при удалении, данные будет не восстановить.

Дополнительные конфигурации и возможности

Данные конфигурации необязательны и только чтобы вы знали как, где и если потребуется, чтобы быстро сориентироваться.

Xdebug

В 8-ке xdebug порой необходим как воздух, с ним очень легко отследить как выполняется определенная часть кода и найти ошибку. К нашему счастью, с Docker4Drupal это делается очень просто.

Первым делом, рекомендую поставить расширение для браузера Xdebug helper Chrome \ Firefox. Он позволит простым нажатием в браузрной строке включать режим отладки.

Для того чтобы включить Xdebug в Docker4Drupal, заходим в файл * docker-compose.yml* и находим раздел php. Там будут закомментированы две переменные PHP_XDEBUG и PHP_XDEBUG_DEFAULT_ENABLE . Нам необходимо их раскомментировать.

  php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      DB_HOST: $DB_HOST
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
      ## Read instructions at https://wodby.com/stacks/drupal/docs/local/xdebug/
      PHP_XDEBUG: 1
      PHP_XDEBUG_DEFAULT_ENABLE: 1
    #      PHP_XDEBUG_REMOTE_CONNECT_BACK: 0
    #      PHP_IDE_CONFIG: serverName=my-ide
    #      PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux
    #      PHP_XDEBUG_REMOTE_HOST: 10.254.254.254 # macOS
    #      PHP_XDEBUG_REMOTE_HOST: 10.0.75.1 # Windows
    volumes:
      - ./:/var/www/html
  ## For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
  #      - ./:/var/www/html:cached # User-guided caching
  #      - docker-sync:/var/www/html # Docker-sync
  ## For Xdebug profiler files
  #      - files:/mnt/files

После чего перезапускаем контейнера, если они запущены и запускаем заново docker-compose stop && docker-compose up -d .

После запуска, Xdebug начнет работу. В браузерном расширении ставим зеленого жука, в IDE включаем режим дебага и пользуемся.

Xdebug очень сильно снижает производительность даже в режиме ожидания. Чем крупнее проект, тем сильнее будет ощущаться его присутствие. Так что после успешного дебага под свои нужды, я рекомендую комментировать конфиги которые его включают и перезапускать контейнера. Включайте только когда действительно нужно.

Blackfire

Blackfire — это сервис профилирования проекта от создателей Symfony. Для локальных проектов он бесплатный. Его очень круто использовать, когда на проекте есть какие-то тормоза, которых раньше не было. Он помогает вам найти узкие места в проекте, а затем провести ещё одну проверку, и сравнить насколько изменился результат и были ли внесенные изменения действенные.

Для его использования, нам также потребуется браузерное расширение Blackfire Companion Chrome \ Firefox, а также, вы должны зарегистрировать в данном сервисе.

После регистрации в сервисе вам нужно нажать на свою аватарку, зайти в Account и получить Server ID и Server Token.

После чего заходим в docker-compose.yml, расскомментируем соответствующий раздел и укажем BLACKFIRE_SERVER_ID и BLACKFIRE_SERVER_TOKEN в соответствии с тем что вам выдали в профиле.

  blackfire:
    image: blackfire/blackfire
    container_name: "${PROJECT_NAME}_blackfire"
    environment:
      BLACKFIRE_SERVER_ID: XXXXX
      BLACKFIRE_SERVER_TOKEN: YYYYY

Также в раздел php нужно добавить переменную PHP_BLACKFIRE со значением 1 . Видимо в новой версии про неё забыли, но без неё не заведется.

  php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      DB_HOST: $DB_HOST
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
## Read instructions at https://wodby.com/stacks/drupal/docs/local/xdebug/
#      PHP_XDEBUG: 1
#      PHP_XDEBUG_DEFAULT_ENABLE: 1
#      PHP_XDEBUG_REMOTE_CONNECT_BACK: 0
#      PHP_IDE_CONFIG: serverName=my-ide
#      PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux
#      PHP_XDEBUG_REMOTE_HOST: 10.254.254.254 # macOS
#      PHP_XDEBUG_REMOTE_HOST: 10.0.75.1 # Windows
      PHP_BLACKFIRE: 1

Перезапускаем контейнера docker-compose stop && docker-compose up -d и всё готово!

Заходим на страницу где хотите профилировать. Жмете на иконку расширения, если всё корректно, будет кнопка "Profile!". Жмете на неё и начнется профилирование. Вы можете сразу тут задать название для своего профилирования.

При нажатии на время выполнения или другие кнопки, он откроет страницу с результатами профилирования.

Например, на скриншоте выше, дерево вызова для главной страницы. Видно, что вызов занял 253ms и в пике требовал 9.18MB оперативной памяти.

Поддержка HTTPS

По различным причинам, вам может потребоваться HTTPS для локалки. Например, захотите написать авторизацию через OAuth 2.0 на локалке, а без HTTPS этого сделать просто невозможно, так как https требуется на уровне OAuth 2.0 и все запросы с http, даже с локалки, будут просто откланяться. Что же делать в таком случае? И тут все просто!

Первым делом, нам надо сгенерировать самоподписанный сертификат для домена. Это очень просто, можно воспользоваться сервисом Self-Signed Certificate Generator. Заходим на сайт, вводим домен, в нашем примере example.localhost и жмем Generate. В результате он выдаст вам 2 ссылки на файлы example.localhost.key и example.localhost.cert. Их вам нужно скачать.

Вы также можете сгенерировать самостоятельно без всяких сайтов. Для этого достаточно ввести две команды заменив домен на нужный:

$ openssl genrsa -out example.localhost.key 2048
$ openssl req -new -x509 -key example.localhost.key -out example.localhost.cert -days 3650 -subj /CN=example.localhost

Эти файлы придется положить в проект. Я предлагаю сделать папку certs внутри проекта и положить оба файла туда. После чего, не забудьте эту папку добавить в .gitgnore (правило certs/ ).

Тогда как оба файла будут в этой папке, открываем docker-compose.yml. Находим настройки для traefik в самом низу и меняем command на новое значение (будет в примере ниже), добавить порты для SSL 443, а также подключить папку с сертификатами.

  traefik:
    image: traefik
    container_name: "${PROJECT_NAME}_traefik"
    command: -c /dev/null --web --docker --logLevel=INFO --defaultEntryPoints='https' --entryPoints="Name:https Address::443 TLS:/certs/example.localhost.cert,/certs/example.localhost.key" --entryPoints="Name:http Address::80"
    ports:
      - '80:80'
      - '443:443'
#      - '8080:8080' # Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./certs:/certs

Не забудьте заменить название файлов на свои, и папку указать нужную, если вы решили хранить в другом месте.

Перезапускаем контейнера docker-compose stop && docker-compose up -d .

Теперь сайт будет открываться по https://example.com .

Поддержка поддоменов\алиасов

Например, вы захотели добавить алиас для домена. Тут всё просто. Находим в nginx.label следующую строку: - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}' и добавляем новое правило через запятую - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL},www.${PROJECT_BASE_URL}' — теперь сайт будет открываться и по www.example.localhost.

Но что если нужно открывать сайт по любом поддомену (читай регулярка) ?. Тогда под данной строкой нужно добавить новую: - 'traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.${PROJECT_BASE_URL}' где [a-z]+ регулярное выражение. Перезапускаете сервак, и всё готово. Теперь сайт будет открываться по любому поддомену, например moscow.example.localhost. На этом, пожалуй всё. Если что интересного узнаю, напишу отдельно или дополню.

Docker
Drupal
Drupal 8
Веб-сервер

Комментарии

VasyOK   сб, 22/08/2020 - 14:59

Снова здравствуйте Никита! Обнаружил, что если ставить D8 на docker4drupal брать версию 5.4.17 оного: https://github.com/wodby/docker4drupal/releases/tag/5.4.17 Последующие версии уже на 9ку нацелены. Я понимаю специалист легко поправит под себя .env и docker-compose.yml файлы, но специалистами не рождаются.

Gnom7   ср, 23/09/2020 - 13:29

Никита, подскажите как делать Git коммиты при хранении данных в альтернативном месте? https://niklan.net/blog/172#khranenie-dannykh-v-alternativnom-meste

Niklan   ср, 23/09/2020 - 15:23

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

Gnom7   чт, 24/09/2020 - 01:44

Если физические файлы ядра находятся по адресу "/home/evgeny/.docker/volumes/powerbase_codebase/_data" а сам проект находится по адресу "/home/evgeny/web_progect/powerbase" то где работать с Git? Логически понятно что в первом каталоге, однако команда "drush cex" работает во втором каталоге а в перовом каталоге почему-то слетает Git при перезапуске Ubuntu. Подскажите, как у Вас налажен алгоритм отправки конфигов в Git при использовании альтернативных мест хранения для ядра? хочется верить, что после команды "drush cex" Вы не идете в каталог с ядром что-бы сделать "git commit"

Niklan   чт, 24/09/2020 - 07:51

С проектом нужно работать в принципе из /home/evgeny/web_progect/powerbase и только оттуда. Вас вообще не должно никак касаться где и как хранит докер свои контейнеры. Этот пункт в статье лишь подсказка для тех у кого основной партишн мелкого размера.

Логически понятно что в первом

Туда вообще ни в коем случае не нужно влезать.

Подскажите, как у Вас налажен алгоритм отправки конфигов

Точно так же как и при оригинальном. Вообще никакой разницы.

Перечитайте раздел для чего делается перенос и когда он вообще необходим. Зачем вы туда после заходите и что-то делаете мне не ясно вообще.

Gnom7   чт, 24/09/2020 - 09:00

Перечитал.

Я полез туда в связи с тем, что не мог обновить ядро https://drupal.ru/node/142312 попутно выяснилось, что лезть в /home/USERNAME/.docker необходимо для того чтобы дать права 777 на файлы ядра и в частотности на composer.json иначе после установки модуля с помощью composer файл не обновляется и всегда остается исходным.

"Точно так же как и при оригинальном. Вообще никакой разницы."

Все равно не понимаю. Вот смотрите. Если я правильно понимаю, Вы выполняете команду "drush cex" в каталоге /home/evgeny/web_progect/powerbase но файлы конфигов сохраняются в каталог /home/evgeny/.docker/volumes/powerbase_codebase/_data/config/sync и вот как теперь закомитить и запушить каталог config/sync на Github находясь в каталоге web_progect?

Я где-то читал что в файле settings.php можно прописать отдельный каталог хранения конфигов, может у Вас так и сделано? и находится этот каталог в web_progect.

Niklan   чт, 24/09/2020 - 09:19

Я полез туда в связи с тем, что не мог обновить ядро https://drupal.ru/node/142312

У композера банально не хватило прав. Всё правильно он ругается. Для решения достаточно задать настройку в settings.php.

выяснилось, что лезть в /home/USERNAME/.docker необходимо для того чтобы дать права 777 на файлы ядра

Нет, не нужно, это какая-то ерунда. Файлы докера никак не должны модифицироваться из вне, кроме самого докера.

но файлы конфигов сохраняются в каталог

Вас это не должно волновать от слова совсем. Какая вам разница, где хранит файлы докер по факту? Докер их синхронизирует с вашего ПК в ту самую папку и потом там трёт. Это его механизм работы, вмешиваться в него нет вообще никаких причин.

P.s. Я подозреваю у вас просто-напросто есть файл docker-compose.override.yml в котором друпал ставится в контейнер в обход хоста. Откуда у вас и возникают сложности и недопонимание где лежат файлы. Друпал должен быть на вашем ПК прямо тут /home/evgeny/web_progect/powerbase. Эта папка будет автоматически синхронизироваться с докером /home/evgeny/.docker/volumes/powerbase_codebase/_data в обе стороны. Всё.

Просто удалите docker-compose.override.yml и создайте всё заного без него. Или прочитайте зачем он нужен и что там написано изначально, и сравните с тем что в docker-compose.yml для php раздела. Там совершенно разные образы качаются. В оверрдайс - мусор.

Gnom7   пт, 25/09/2020 - 10:23

Действительно, стоило удалить docker-compose.override.yml, скопировать /home/evgeny/.docker/volumes/powerbase_codebase/_data/composer.json в home/evgeny/web_progect/powerbase и запустить composer update как файлы ядра закачались home/evgeny/web_progect/powerbase. А я то думал, что отсутствие файлов ядра в каталоге home/evgeny/web_progect/powerbase - это новшество Docker4Drupal. Благодарю за развернутые ответы и проницательность!

Gnom7   пт, 25/09/2020 - 12:13

Image

Никита, а подскажите почему при установки Drupal происходит ошибка подключения к БД? Мне один раз помогла переустановка Ubuntu, в этот раз хочется разобраться в чем проблема. P.S. при вводе команды docker ps" видно MariaDB работает: ····534e2ef95a30 wodby/mariadb:10.4-3.8.6 "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 3306/tcp my_drupal9_project_mariadb

Fonarik   пт, 13/11/2020 - 13:49

Подскажите пожалуйста, можно аналогичным способом работать на VPS ?

Как настроить путь, по которому будет открываться контейнер с сайтом?

Niklan -- большущее спасибо за весь материал на сайте.

Потный Гарри   чт, 07/01/2021 - 20:06

"При установке, обратите внимание чтобы версия была Community Edition (CE)" -- а у меня LTS (Ubuntu 20.04.1), нужно ли мне это учесть и как именно?

Niklan   пт, 08/01/2021 - 07:58

Речь про версию докера, а не убунты. Просто ставьте, если возникнут проблемы переставите. Просто если появится выбор где-то, нужно выбирать CE версию докера.

Если хотите наверняка, я рекомендую ставить докер по официальной инструкции. Могло многое поменяться, но уверен что CE должна ставиться по умолчанию и никаких проблем не будет.

Dead Pykhto   вт, 12/01/2021 - 16:36

На страничке https://github.com/wodby/docker4drupal/releases в описании последнего релиза читаем: Vanilla Drupal: Updated: 9.1.0, 8.9.11, 7.77 -- значит ли это, что данный образ docker4drupal содержит версии Друпал с указанными номерами?

Niklan   ср, 13/01/2021 - 12:11

По умолчанию (в архиве релиза) да, эти версии правятся в .env файле.

Dead Pykhto   чт, 21/01/2021 - 18:51

На продакшене Apach, в Докере Nginx. Это нужно как-то учитывать (при переносе проекта на продакшн)? где и как?

Niklan   пт, 22/01/2021 - 08:22

Если конфигурация или .htaccess на Apach как-то менялась, то, возможно стоит синхронизировать эти настройки. Всё слишком индивидуально, но вот в обратную сторону да, лучше убедить что всё ок если на проде Nginx.

Для уверенности, можно в контейнере nginx переключить на Apache.

Валентина   сб, 13/02/2021 - 21:53

После команды в статье { "graph": "/home/USERNAME/.docker"} выдает ошибку при запуске docker run hello-world пишет

VasyOK   пт, 19/02/2021 - 17:32

Здравствуйте Никита! Подскажите, а как на D4D установить D7?

  1. Скачал docker4drupal 5.4.17 https://github.com/wodby/docker4drupal/releases/tag/5.4.17

  2. Изменил: .env

### PROJECT SETTINGS

PROJECT_NAME=drupal7
PROJECT_BASE_URL=drupal7.localhost

DB_NAME=drupal7
DB_USER=drupal7
DB_PASSWORD=drupal7

docker-compose.yml

NGINX_SERVER_ROOT: /var/www/html

При обращению к сайту пишет: 404 Not Found nginx

В .env версию PHP или еще что-то под 7ку прописывать?

Niklan   сб, 20/02/2021 - 17:20

А где index.php относительно docker-compose.yml? И меняли ли настройку volumes?

VasyOK   вс, 21/02/2021 - 19:28

Т.к. D7 сайт с которым хочу поиграть собран без Композера, то: index.php и docker-compose.yml находятся в одной папке. volumes - не менял.

php:
   volumes:
      - ./:/var/www/html:cached
Niklan   ср, 24/02/2021 - 08:28

Тогда не подскажу. Нужно заходить в контейнер, проверять что все файлы там корректно присутствуют. Убедиться что действительно корректная настройка для NGINX_SERVER_ROOT (может случайно смотрели другой docker-compose.yml). Как вариант, попробовать поменять в .env файле NGINX_VHOST_PRESET на drupal7. Но я не припоминаю чтобы такое делал, у меня и на пресете от д9 работает д7.

VasyOK   вс, 28/02/2021 - 16:47

NGINX_VHOST_PRESET - да. При беглом осмотре помогло. Спасибо! А как версию PHP поменять на 5.6? Сейчас в .env: PHP_TAG=7.3-dev-4.15.8 по аналогии попробовал прописать PHP_TAG=5.6-dev-4.15.8

Выдало:

Pulling php (wodby/drupal-php:5.6-dev-4.15.8)...
ERROR: manifest for wodby/drupal-php:5.6-dev-4.15.8 not found: manifest unknown: manifest unknown

Где список пых можно взять?

Niklan   пн, 01/03/2021 - 08:05

Версии можно посмотреть у их имейджа (5.6-dev-4.14.3).

Если это используется для разработки, на версию wodby вообще можно забить и писать просто 5.6-dev, 7.4-dev и т.д.

Сергей   сб, 20/02/2021 - 11:44

Всем доброго дня!

Есть пример конфигурации SSL сертификата для traefik v2? Перепробовал кучу вариантов, чет не один не завелся...

Покажите, пожалуйста, свою реализацию

Evgeny   вт, 13/07/2021 - 13:46

Никита, подскажите как установить D4D на 32-х разрядную систему? После мыторств получилось установить docker.io и docker-compose через synaptic, но после запуска docker-compose up -d для D4D 5.3.1 получаю

Pulling traefik (traefik:latest)...
latest: Pulling from library/traefik
ERROR: no matching manifest for linux/386 in the manifest list entries

Хочется взять с собой в отпуск старый нетбук для программирования, но что-то не получается установить D4D.

Niklan   вт, 13/07/2021 - 14:18

Собственно, ошибка говорит за себя. У образа Traefik, который отвечает за маршрутизацию, нет поддержки i386 архитектуры. Тут ничего не поделать. Проще, наверное, просто обойтись без докера, раз это временное окружение.

Роман   чт, 07/10/2021 - 11:16

Добрый день, Никита. Установил docker по данной инструкции и столкнулся с проблемой. А именно, у папки /home/мой-аккаунт/.docker каждый раз устанавливается владелец root группы root и при запуске docker постоянно выскакивает сообщение WARNING: Error loading config file: /home/roman/.docker/config.json: open /home/roman/.docker/config.json: permission denied. Применение chown помогает только до перезагрузки системы. Раньше такого не помню, использую xubuntu 20.04. Не знаешь, как эту проблему побороть?

Niklan   пт, 08/10/2021 - 07:11

Скорее всего потому что запускали докеры из под рута, лучше этого не делать и добавить пользователя в соответствующую группу и больше никогда не вызывать докер из под sudo.

Думаю нужно это всё же сделать, удалить .docker директорию принудительно из под рута, в следующий раз должна создаться с нужными правами или пофиксить ей владельца, если там есть важные данные.

Peter   пт, 22/10/2021 - 16:10

Здравствуйте!

Я поднимаю Drupal сайт на docker4drupal.

Нужно создать сабтему на основе Bootstrap 4 SASS - Barrio. В инструкции на drupal.org пишет что для этой темы нужно установить node.js, gulp, и все необходимые зависимости для gulp чтобы он мог скомпилировать sass в css:

https://www.drupal.org/docs/contributed-themes/bootstrap-4-sass-barrio-starter-kit/installation

В docker-compose.yml я прописал такие конфиги для сервиса node.js:

node:
    image: wodby/node:$NODE_TAG
    container_name: "${PROJECT_NAME}_node"
    working_dir: /var/www/html/web/themes/custom/bootstrap_sass_bcnews
    labels:
    - "traefik.http.services.${PROJECT_NAME}_node.loadbalancer.server.port=3000"
    - "traefik.http.routers.${PROJECT_NAME}_node.rule=Host(`node.${PROJECT_BASE_URL}`)"
    expose:
    - "3000"
    volumes:
    - ./var/www/html/web/themes/custom/bootstrap_sass_bcnews:/var/www/html
    command: sh -c 'apt-get install python3-software-properties gnupg2 curl wget -y && curl -fsSL https://deb.nodesource.com/setup_12.x | sudo -E bash - && sudo apt-get install -y nodejs && cd /var/www/html/web/themes/custom/bootstrap_sass_bcnews && npm install --global gulp-cli && npm install'

Путь к Drupal проекту в моей системе: /home/perceval/Desktop/bcnews_project

Путь к теме в контейнере: /var/www/html/web/themes/custom/bootstrap_sass_bcnews

После запуска контейнеров docker-compose up -d и проверки docker ps, я вижу что node.js контейнер не запущен: image

В файле docker-compose.yml я правил только три строчки working_dir, volumes, command. И подозреваю, что-то не так написал в последних двух.

Файл .env:

### --- NODE ---

NODE_TAG=12-dev-0.84.0
В чем проблема? И вообще, правильно ли я написал команды в строке command?

P.S.: Для удобства чтения я напишу вам команды в столбец написанные мною в command в файле docker-compose.yml:

 sh -c 'apt-get install python3-software-properties gnupg2 curl wget -y &&
 curl -fsSL https://deb.nodesource.com/setup_12.x | sudo -E bash - &&
 sudo apt-get install -y nodejs &&
 cd /var/www/html/web/themes/custom/bootstrap_sass_bcnews && 
 npm install --global gulp-cli &&
 npm install'

Niklan   сб, 23/10/2021 - 08:51

- ./var/www/html/web/themes/custom/bootstrap_sass_bcnews:/var/www/html должен быть либо как в php контейнере, либо working_dir: /var/www/html/web/themes/custom/bootstrap_sass_bcnews нужно поменять на working_dir: /var/www/html

Peter   вс, 07/11/2021 - 23:13

Вот почему была такая проблема:

  1. Node.js образ в docker4drupal использует apk вместо apt-get для установки дополнительных пакетов.
  2. Этот образ уже содержит node.js. Мне не нужно писать команду установки node.js в строке command:. Вот как должна была выглядеть конфигурация сервиса node.js в моем случае:
node:
    image: wodby/node:$NODE_TAG
    container_name: "${PROJECT_NAME}_node"
    working_dir: /var/www/html/web/themes/custom/bcnews_bootstrap_sass
    labels:
    - "traefik.http.services.${PROJECT_NAME}_node.loadbalancer.server.port=3000"
    - "traefik.http.routers.${PROJECT_NAME}_node.rule=Host(`node.${PROJECT_BASE_URL}`)"
    expose:
    - "3000"
    volumes:
    - ./:/var/www/html:cached
    command: sh -c 'cd /var/www/html/web/themes/custom/bcnews_bootstrap_sass && npm init --yes && npm install --global gulp-cli && npm install --save-dev gulp && npm install && gulp'
Артур   ср, 10/11/2021 - 23:02

Добрый вечер Никита. У меня есть готовый Drupal проект, который поднимаю с помощью docker4drupal. Теперь я хочу залить этот проект на хостинг(типичный Virtual Hosting). С помощью ftp я перенесу Drupal проект на выделенную мне хостингом часть диска, включая четыре файла docker4drupal (docker-compose.yml, .env, Makefile, traefik.yml) лежащие в его директории.

  1. База данных будет использоваться из контейнера mariadb? Или мне нужно перенести базу данных из моего volumes что указана в конфигурациях сервиса mariadb в файле docker-compose.yml?
volumes:
      - ./db/init:/docker-entrypoint-initdb.d
      - ./db/source:/var/lib/mysql
  1. Сейчас когда мой проект находится на моем компьютере, я запускаю контейнеры с помощью команды docker-compose up -d. Точно так же мне прописать в терминале с panel хостинга чтобы запустить контейнеры?
Niklan   вт, 16/11/2021 - 08:32

Вам нужно переносить БД в БД хостинга и всё в таком духе. Сомневаюсь что на шареде вы докеры сможете запустить. Если всё же хочется запустить D4D на хостинге \ vps и на это хватит прав, у меня есть примеры как это делать. Там немного другие конфиги нужны, ибо нужна более жесткая изоляция и запуск нескольких проектов одновременно.

Артур   вт, 16/11/2021 - 17:11

Спасибо.

Вам нужно переносить БД в БД хостинга и всё в таком духе.

А БД откуда переносить? Из ./db/source моего Volumes: - ./db/source:/var/lib/mysql? Или искать БД в контейнере mariadb? Я просто не знаю где хранится БД контейнера mariadb, у контейнеров же своя файловая система...

Niklan   ср, 17/11/2021 - 09:51

Либо включить phpmyadmin контейнер и сделать экспорт через него. Либо зайти в контейнер php make shell и сделать дамп drush sql:dump --gzip --result-file=/var/www/html/dump.sql и он появится в проекте. Главное не забыть удалить после чтобы в VCS не попало.

Я просто не знаю где хранится БД контейнера mariadb, у контейнеров же своя файловая система...

На будущее, для контейнера mariadb в volumes есть строка - /path/to/mariadb/data/on/host:/var/lib/mysql # Use bind mount можно настроить, и будет храниться на хосте. Например, вот так — обратите что куда там монтируется и какая структура вообще. Она отличается от того что в статье \ видео и по умолчанию в D4D.

Артур   ср, 17/11/2021 - 23:46

На будущее, для контейнера mariadb в volumes есть строка - /path/to/mariadb/data/on/host:/var/lib/mysql # Use bind mount можно настроить, и будет храниться на хосте.

А у меня с самого начала проекта в настройках была такая строка(если я правильно понял о чем вы). Вот такая у меня конфигурация сервиса mariadb с момента как создал проект:

services:
  mariadb:
    image: wodby/mariadb:$MARIADB_TAG
    container_name: "${PROJECT_NAME}_mariadb"
    stop_grace_period: 30s
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD
    volumes:
      - ./db/init:/docker-entrypoint-initdb.d
      - ./db/source:/var/lib/mysql

То получается база данных у меня сохранялась на хосте? Здесь ./db/source? Если да, и она лежит в каком-то файле в папке ./db/source возникает вопрос как перенести ее на хостинг? Ведь в том phpmyadmin что установлен на моем компьютере, а не контейнерном phpmyadmin, я ее не вижу, возможно это потому что на компьютере у меня установлен mysql а mariadb, или какая-то другая причина.

Niklan   чт, 18/11/2021 - 08:53

Я просто не знаю где хранится БД контейнера mariadb То получается база данных у меня сохранялась на хосте? Здесь ./db/source?

Да это и есть БД, и она уже не в контейнере, а у вас на хосте, просто линкуется в контейнер при запуске. Но вам это не особо поможет в переносе на хостинг, там нужен .sql файл. Я написал какими способами его сделать выше.

Василий   вс, 05/12/2021 - 16:07

Попытался настроить хранение данных в альтернативном месте, но при up -d пишет, что вроде всё запускается, но при stop - останавливает только pma, traefik и mailhog. При docker ps вижу работающими только эти 3 контейнера. При этом ожидаемо не работает ничего...

VasyOK   вт, 08/03/2022 - 13:51

Никита, снова здравствуйте! Недавно переустановил Linux, снова поставил D4D по этой инструкции и столкнулся с проблемой: drush не создает файлы дампа. Команда "drush sql-dump > test.sql" создает пустой файл. Как считаете, что может быть проблемой?

Niklan   ср, 09/03/2022 - 07:44

Наверное, слетели алиасы или docker compose новой версии (2).

Можно попробовать:

docker compose exec php drush sql:dump > test.sql
# Или команду ниже для старого docker compose.
docker-compose exec php drush sql:dump > test.sql

Если сработает одна из них — значит слетели алиасы.

VasyOK   ср, 09/03/2022 - 15:56

$ docker-compose --version Docker Compose version v2.2.3 $ docker compose exec php drush sql:dump > test.sql docker: 'compose' is not a docker command. $ docker-compose exec php drush sql:dump > test.sql последний вариант также создал пустой файл test.sql

Другие команды drush вроде бы работают.

VasyOK   ср, 09/03/2022 - 16:11
docker-compose exec -T php drush sql:dump > test.sql

вот так получается, спасибо что пнули в нужном направлении.

А может в статье указать, что сейчас нужно ставить последнюю версию docker-compose?

Niklan   чт, 10/03/2022 - 10:10

Так выходит что у вас никаких отличий от статьи нет. У вас просто не настроены алиасы, для этого отдельный раздел есть. Сами команды из алиаса у вас не поменялись даже.

VasyOK   вс, 03/07/2022 - 13:05

Еще раз здравствуйте, Никита. Столкнулся с одной особенностью при бекапе БД.
Если его делать через drush sql:dump, а потом восстановить БД из этого файла - сайт работает очень медленно.
А если бекап сделать через Adminer - то после восстановления работает быстро.
Можете подсказать: в чем может быть проблема?

Svetlana   вс, 20/11/2022 - 19:33

Подскажите, пожалуйста, устанавливаю Docker4Drupal на wsl2. Windows 10, Ubuntu 20.04.
Если в файле .env указан PROJECT_BASE_URL, который оканчивается localhost (например, drupal9.localhost), то после установки сайт просто открывается по этому адресу, с указанием соответствующего порта (drupal9.localhost:8000).
Если же изменить домен верхнего уровня в PROJECT_BASE_URL, например, указать drupal9.local, то сайт не откроется, в Chrome будет ошибка ERR_CONNECTION_REFUSED.

В файле hosts на Windows есть такая запись:
# Added by Docker Desktop
192.168.0.227 host.docker.internal
192.168.0.227 gateway.docker.internal

Если в этот hosts добавить запись с этим ip eth0 и названием хоста (192.168.0.227 drupal9.local) - сайт будет открываться.

Почему хост с доменом localhost открывается без добавления в файл hosts на Windows?

Андрей   пт, 02/06/2023 - 09:19

Теперь вместо "graph", надо "data-root" указывать
{
"data-root": "/home/USERNAME/.docker"
}

Viktor   ср, 10/01/2024 - 13:04

Рекомендую посмотреть в сторону Warden. Если рассматривать docker compose как обертку над docker, то warden это еще одна обертка над docker compose. Warden сокращает количество телодвижений в разы. Там работает все из коробки - xDebug, ssl сертификаты и прочее. Пожалуй самый простой и удобный инструмент контейнерной оркестрации для локальной разработки. Вот пример как в пару кликов установить друпал под варденом. https://docs.warden.dev/environments/drupal.html