Почему я выбираю docksal вместо docker4drupal

Сегодня я расскажу, почему мне больше нравится docksal, а не docker4drupal. Этот вопрос уже обсуждался в телеграм чате, но я решил резюмировать обсуждение в виде статьи.

Скажу сразу, я буду сравнивать docksal и docker4drupal с точки зрения новичков и вебмастеров. К сожалению, многие разработчики стали забывать, что когда-то и они были новичками и то, что сейчас для них очевидно, для других совсем не очевидно. Помните об этом.

1) Централизованная установка и обновление. docksal устанавливается в вашу систему привычным образом, а обновляется командой fin update. Если вы используете стэк приложений по умолчанию, то он сразу обновится во всех контейнерах. d4d же нужно обновлять в каждом контейнере отдельно. Опять таки, в комплекте с d4d идет набор файлов, которые на 99% обычных проектов не нужны: Makefile, traefik.yml, docker-sync.yml. Это сбивает с толку начинающих пользователей d4d.

2) Не нужно нигде прописывать имя проекта. docksal берет имя проекта из имени каталога (как OpenServer на windows). В d4d же нужно обязательно в .env файле прописывать имя и ссылку для проекта. Это затрудняет обновление, потому что "нельзя просто так взять и заменить .env файл на новый". Нужно со старого скопировать имя вашего проекта и вписать в новый. Это такие мелочи, на которые бывалые разработчики не обращают внимания. Многие вообще перестают обновлять d4d потому что лень с этим заморачиваться.

3) Прокси сервер. Сразу после установки docksal будет запущен nginx который будет проксировать все ваши виртуальные хосты. Это позволит вам запустить сразу несколько сайтов одновременно на 80 порту. d4d "из коробки" такого не умеет.

4) Импорт больших баз. Наверняка многие пользователи d4d помнят

the input device is not a TTY при импорте БД через drush

Новичков это очень сбивает с толку. Через PMA БД не грузится, через drush тоже. Как быть? Нужно штудировать документацию, найти там ключ -Т и помнить о нем. В docksal же всё намного проще. Есть централизованная команда fin db import ИМЯ-ДАМПА, которая сама дропнет все таблицы и загрузит данные из файла дампа.

5) На работе мы используем docksal на dev сервере и там есть возможность просто прописать директиву VIRTUAL HOST и доксал автоматом разрулит когда будет обращение к нужному хосту по внешнему адресу и отправит в нужный проект. Например site1.mycompany.com, site2.mycompany.com
Я не сторонник использования докера на проде, но на дев сервере это невероятно удобно. Чтобы сделать такое в d4d нужно долго и внимательно штудировать документацию к traefik.

6) Просмотр логов. Для того, чтобы посмотреть логи веб-сервера достаточно набрать fin logs -f web (а можно и просто fin logs). Сможете ли вы так быстро добраться до логов в d4d?

Приятные мелочи:

7) Установочные скрипты. В docksal есть встроенная возможность добавить к конфигурации сайта установочные скрипты и вызывать их удобным способом fin init-site, например. Скрипт поднимет контейнеры, запустит composer install, скачает БД с дев сервера, импортирует ее. И вот мы имеем готовый сайт для локальной разработки. В d4d можно такое сделать, но вручную.

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

Автор

ivnish Drupal backend developer в компании Abventor

Комментарии

Аватар пользователя gun_dose gun_dose 1 марта в 19:02

6 пункт:
docker-compose logs --tail=50 php

Параметр tail указывает, сколько последних сообщений показать.

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 2 марта в 1:35

3 и 5 - нормально всё делается через траефик
хотя быстро найти инфу действительно не просто

Аватар пользователя gun_dose gun_dose 2 марта в 7:33

4 пункт вообще непонятно, откуда берётся. Зашёл к машке в контейнер и импортнул через mysql

Аватар пользователя Алексей Дёмин Алексей Дёмин 2 марта в 8:03

Можно импортуть и через drush. Проблема, что приходиться копировать дамп базы в крень репы. приходится *.sql добавлять в .git/info/exclude Жить можно, но лишние шаги: вместо drush sql:cli << /удобый/путь/к_бекапам/файл.эскуэль надо скопировать в корень, войти в контейнер, сделать дамп, выйти из контейнера, удалить файл.

Аватар пользователя gun_dose gun_dose 2 марта в 9:20

Дамп копировать придётся в любом случае. Не держать же его в репозитории. Кроме того драш при экспорте херит эмоджи. Если эти эмоджи окажутся в метатегах, то получим WSOD на каждой странице, где они были.

Аватар пользователя zvse zvse 12 марта в 13:28
1

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

На локале по этому пункту выбор в сторону большей конфигурируемости. Кому-то редис, кому-то 2 базы, кому-то 2 энжинкса, отдельно веб интерфейс сваггера, для Д7 - один конфиг, для д8 - другой и тп.

В d4d же нужно обязательно в .env файле прописывать имя и ссылку для проекта

Тоже конфигурируемость

3) Прокси сервер. Сразу после установки docksal будет запущен nginx который будет проксировать все ваши виртуальные хосты. Это позволит вам запустить сразу несколько сайтов одновременно на 80 порту. d4d "из коробки" такого не умеет.

А тут - да. Прокси не хватает для д4д, тоже плевался. Можно попробовать вынести отдельно траефик, но тут нужно что-то делать.

Я не сторонник использования докера на проде

Один из плюсов докера - у тебя 1 настройки на всех инстансах. Вообще не поддерживаю не использование докера на проде.

6) Просмотр логов. Для того, чтобы посмотреть логи веб-сервера достаточно набрать fin logs -f web (а можно и просто fin logs). Сможете ли вы так быстро добраться до логов в d4d?

docker-compose logs php ? docker logs $container_id?

А попробуй ещё lando - та же штука только с привязкой к пантеону. Или *назови любой другой подобный инструмент* - все аргументы будут примерно те же - более дружеский интерфейс. Но при этом шаг влево и вправо - и начинается такая сильная попаболь, что хочется всё плюнуть и больше никогда не ставить ничего подобного. Нужно разбираться.
Помню мою первую встречу с lando - я заводил xdebug часов 5. При том, что было куча инструкций как это сделать. Ну не работало ничего, хоть тресни. Пришлось дебажить этот ландо. ну или моя попытка добавить изменения в php.ini, это вообще забей. А так - да, всё дружественно, всё круто и прочее прочее.