Быстрый старт: Drupal 9 на локальной машине с DDEV и Docksal

nzytsprim 30 января в 14:47
2

Цель - установить CMS Drupal 9 на локальный компьютер без необходимости предварительно вникать в настройки ПО и среды.

Требуются: ПК под управлением ОС Debian или Ubuntu, пользователь с правами sudo. Команды вводятся в терминал путем копирования через буфер обмена мышки

Проекты будем разворачивать с помощью:

  • DDEV-Local - мэйнтейнер Randy Fay, лицензия Apache-2.0
  • Docksal - мэйнтейнер Леонид Макаров, лицензия MIT


DDEV-Local и Docksal - это инструменты для определения и управления средами веб-разработки. Используют Docker и Docker Compose для создания полностью контейнерных сред для ваших проектов.

Что такое Docker?

Установка Docker

Если ранее были установлены, удаляем старые версии docker:
sudo apt-get remove docker docker-engine docker.io containerd runc

Устанавливаем дополнительные пакеты:
sudo apt-get install ca-certificates curl gnupg lsb-release libnss3-tools

Скачиваем ключ шифрования и подключаем репозиторий:

Debian

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


Ubuntu

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


Обновляем индекс, устанавливаем docker:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Проверяем версию и статус демона:
docker --version
sudo systemctl status docker

Добавляем текущего пользователя в группу docker и активируем его:
sudo usermod -aG docker $USER && newgrp docker

Проверяем работоспособность docker:
docker run hello-world

Установка DDEV-Local

Скачиваем скрипт и запускаем установку. В процессе отвечаем на вопросы "y", по необходимости вводим пароль sudo:
curl -LO https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh && bash install_ddev.sh

Смотрим версию:
ddev --version

Создаем каталог проекта и переходим в него:
mkdir d9ddev
cd d9ddev

Далее создаем структуру каталогов проекта, контейнеры docker, устанавливаем шаблон сайта, задаем имя пользователя и пароль:
ddev config --project-type=drupal9 --docroot=web  --create-docroot
ddev start
ddev composer create "drupal/recommended-project"
ddev composer require drush/drush
ddev exec drush site:install --account-name=admin --account-pass=admin

Запускаем проект и открываем его в браузере. Пользователь и пароль admin
ddev launch

Установка Docksal

Скачиваем и запускаем скрипт:
bash <(curl -fsSL https://get.docksal.io)

Создаем проект, например d9docksal:
fin project create

Переходим в каталог проекта и запускаем его:
cd d9docksal
fin start

Устанавливаем локальный сертификат:
fin debug -c 'mkdir -p ${CONFIG_CERTS}; mkcert -key-file ${CONFIG_CERTS}/${VIRTUAL_HOST}.key -cert-file ${CONFIG_CERTS}/${VIRTUAL_HOST}.crt *.${VIRTUAL_HOST} ${VIRTUAL_HOST}'

Перезапускаем сервер:
fin system reset vhost-proxy

Адрес сайта и пароль указываются в терминале. Если не сохранили пароль, то сформировать одноразовую ссылку для в хода с правами администратора:
fin drush uli

Чтобы пробросить сайт с локальной машины в интернет, регистрируемся на сервисе https://ngrok.com
Устанавливаем пакет ngrok:
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com bullseye main" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok

Сохраняем токен, полученный на сайте ngrok.com:
ngrok authtoken <token>

В каталоге проекта d9ddev или d9docksal запускаем соответственно ddev share или fin share.

Источники:
https://docs.docker.com/engine/install
https://ddev.readthedocs.io/en/stable
https://www.digitalocean.com/community/tutorials/how-to-develop-a-drupal...
https://www.drupal.org/docs/official_docs/en/_local_development_guide.html
https://docs.docksal.io/getting-started/setup
https://ngrok.com/download

Автор

Комментарии

Аватар пользователя ivnish ivnish 30 января в 15:25

Привет. Хороший будет материал для раздела документации. Сделай, пожалуйста проверку правописания. Очень много опечаток

Аватар пользователя gun_dose gun_dose 31 января в 11:09
1

В статье нет самого главного: зачем использовать ddev или docksal, когда можно обойтись одним лишь докером?

Аватар пользователя ivnish ivnish 31 января в 11:17

Наверное потому что не каждый хочет тратить время на изучение конфигов докера. Так же как и не каждый хочет собирать Gentoo из исходников, а просто ставит Ubuntu и работает Smile

Аватар пользователя gun_dose gun_dose 31 января в 11:29
1

Вот видно, что создатели docksal тоже не заморачивались с изучением докера, поэтому вместо того, чтобы гонять трафик между контейнерами через внутреннюю сетку докера, поднимают аж целый днс-сервер и половина команд почему-то периодически требует sudo Dash 1

А вообще, не очень понятно, что такое "конфиги докера" и зачем их изучать для разворачивания локального сайта. Равно как и непонятно, кем именно можно работать, просто поставив убунту, где из коробки нет практически ничего, кроме Libre Office.

Аватар пользователя ivnish ivnish 31 января в 11:32

Ну Лёха. Мы живем в такое время, когда для решения какой-то задачи есть несколько инструментов на выбор. Не нравится доксал - юзай голый докер. Да хоть OpenServer. Но что-то мне подсказывает, что возмущаешься ты потому что у вас в компании юзают доксал и тебе приходится Biggrin

Аватар пользователя gun_dose gun_dose 31 января в 11:55

Да, юзают и мне приходится. К слову, приходилось успешно решать проблемы, которые в трекере доксала по полгода висят, как нерешённые. И вот довольно много поюзав его на разных проектах могу сказать, что в сущности это и есть обычный docker-compose, только зачем-то его конфиги раскидали по нескольким файлам, что поди разберись, что там к чему.
Утилита fin конечно местами полезна, но только в каких-то самых базовых кейсах. Чуть что, всё равно надо идти в контейнер и выполнять команды там.
В общем я вижу себе плюсы и минусы как-то так: в каких-то очень базовых и обыденных сценариях доксал даёт облегчение работы на 10%, а в случае каких-то проблем даёт многократное увеличение сложности.

Ну и опять же вопрос распространённости. Если что-то сломалось в docker-compose, то в интернете миллион ответов на такие же вопросы. Если же что-то касается docksal, то инфы вообще голяк.

Аватар пользователя ivnish ivnish 31 января в 12:18

У меня противоположный опыт. За 2,5 года использования не было критических проблем. Ходить в контейнер и что-то там делать вообще практически ни разу не было необходимости

Аватар пользователя gun_dose gun_dose 31 января в 19:36

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

Аватар пользователя bsyomov bsyomov 31 января в 12:58
1

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

Хорошо ещё, когда они просто являются практически тем самым docker-compose.yml, как какой-нибудь docker4drupal, но и тогда из-за универсальности есть переусложнение, и часто используются разные свои контейнеры, со своими проблемами.

На мой взгляд, куда проще научиться работать с официальными контейнерами nginx, php, mysql и.т.п. и освоить docker-composе. Информации по этому на многие порядки больше. Проблемы все найдены и исправлены, или есть информация как с ними жить и.т.п.

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

Аватар пользователя nzytsprim nzytsprim 1 февраля в 9:20

Есть самое главное! ))

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

Зачем ставить на локальный компьютер? Как вариант - посмотреть, изучить, пощупать CMS Drupal. Акцентирую внимание именно на CMS, а не прочих видах самодостаточного ПО, как веб-сервера, БД, системы виртуализации. Насколько пригодны ddev и docksal для профессиональной разработки судить не могу. А чтобы составить представление, как это работает и, вообще, интересно ли это вам, указанные инструменты вполне подходят. Фактор времени здесь определяющий.

Аватар пользователя webadmin webadmin 1 февраля в 3:20

Быстрый старт- это научиться поднимать вебсервер с нуля и потом на эту базу уже использовать докер или docksal , если это потом не окажется лишней работой

Аватар пользователя gun_dose gun_dose 1 февраля в 9:01

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

Аватар пользователя nzytsprim nzytsprim 1 февраля в 9:47

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

Аватар пользователя nzytsprim nzytsprim 1 февраля в 9:30

gun_dose wrote: половина команд почему-то периодически требует sudo

Даже в режиме rootless?

Аватар пользователя gun_dose gun_dose 1 февраля в 10:14

Хз, что за режим такой. Это какая-то чисто доксаловская фишка. Особенно бесит, когда набрал fin up в консоли, вроде что-то зашевелилось, пошёл чайник поставить, приходишь, а там висит [sudo] password for username:

Аватар пользователя nzytsprim nzytsprim 1 февраля в 9:34

gun_dose wrote: непонятно, кем именно можно работать, просто поставив убунту, где из коробки нет практически ничего, кроме Libre Office

Эм-м-м... врачом? Из коробки там есть еще браузер и графический просмотрщик. Ну так, для примера.

Аватар пользователя gun_dose gun_dose 1 февраля в 10:17
1

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

Аватар пользователя vladtulku vladtulku 6 февраля в 23:11

Вроде все шло штатно, до команды:
ddev launch

и вот такой результат получаем:

/usr/bin/xdg-open: 869: www-browser: not found
/usr/bin/xdg-open: 869: links2: not found
/usr/bin/xdg-open: 869: elinks: not found
/usr/bin/xdg-open: 869: links: not found
/usr/bin/xdg-open: 869: lynx: not found
/usr/bin/xdg-open: 869: w3m: not found
xdg-open: no method available for opening 'https://d9ddev.ddev.site'
Failed to run launch ; error=exit status 3

На этом быстрый старт и заканчивается. Кто знает решение данной проблемы?

Аватар пользователя ivnish ivnish 7 февраля в 6:57

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

Аватар пользователя vladtulku vladtulku 9 февраля в 16:30

Да! Действительно не хватало консольного браузера. Огромное спасибо!

В результате запустился непонятный сайт на минималках. Что с ним делать в инструкции ни слова. Закрыл и пошел дальше.

Проделал все описанные процедуры вплоть до проброски из локалки в сеть.
Получил ссылку на вход....типа: http://test1.docksal
По данной ссылке можно зайти на сайт только на самом сервере.

Как можно зайти на этот сайт из локальной сети?
Ссылки типа http://192.168.0.104/test1.docksal не работают.

И что бы два раза не вставать. docksal предлагает к установке три версии drupal9. Какую ставить?

Аватар пользователя nzytsprim nzytsprim 9 февраля в 21:04

Простейший способ отредактировать файл /etc/hosts на Вашей машине:
192.168.0.104 test1.docksal
Это работает, если у Вас статические адреса в локальной сети нет желания поднимать dns.
Если не пускает, проверяйте настройки файервола вашей системы и далее веб-сервера.

Аватар пользователя ivnish ivnish 10 февраля в 14:13

vladtulku wrote: Как можно зайти на этот сайт из локальной сети?

Сначала добавить такую возможность выполнив

fin config set --global DOCKSAL_VHOST_PROXY_IP=0.0.0.0

(возможно понадобится перезапуск служб доксала)

Затем на другой машине прописать в файле /etc/hosts

192.168.1.123  test1.docksal

Где 192.168.1.123 это айпишник машины, где собственно доксал и крутится

Ну и в итоге там где в файл хостов прописали набираем в браузере test1.docksal

Аватар пользователя ivnish ivnish 10 февраля в 14:15

vladtulku wrote: И что бы два раза не вставать. docksal предлагает к установке три версии drupal9. Какую ставить?

Никакую. Ставим друпал как обычно через composer

Аватар пользователя vladtulku vladtulku 10 февраля в 18:25

Ага docksal это про другое.

Я про вот этот выбор после команды fin project create

2. What would you like to install?
PHP based
1. Drupal 9 (Composer Version)
2. Drupal 9 (BLT Version)
3. Drupal 9
...

Аватар пользователя nzytsprim nzytsprim 9 февраля в 20:38

Если нет браузера по-умолчанию, скорее всего нет никакой DE, и вероятнее всего - это сервер. Вы же не указываете систему. Эта инструкция для локальной машины, на которой Вы работаете, не для сервера. Но и там можно запустить, только не ddev launch (браузера же нет), а ddev start из каталога с проектом.

Аватар пользователя vladtulku vladtulku 10 февраля в 18:34

Обычный неттоп с кубунтой и двумя браузерами (FF, Ch). Лежит на холодильнике -сервер. Подключен к телевизору -медиа центр. Подключен к монитору -локальная машина. Wacko
Но суть я уловил. Спасибо!

Аватар пользователя jura12 jura12 7 февраля в 8:04

я успешно запускаю drupal9 на wsl2. для некоторых задач пойдет. докер в голову не лезет. но понимаю что изоляция контейнерная нужна. хотел бы LXC контейнеры освоить через их менеджер. типа домашний vps с использованием OpenVZ.

Аватар пользователя bsyomov bsyomov 9 февраля в 16:44

С docker и dосker-compose это будет проще и удобнее, на самом деле. Ну и сами контейнеры проще и легче.

А openvz тут и вообще не при чём. Если уж управлять этим, то скорее через libvirt и virt-manager.

Но проще немного с докером разобраться имхо.

Аватар пользователя jura12 jura12 9 февраля в 17:39

да через libvirt и virt-manager правильней. просто система на virtuozzo целый готовый хостинг предлагает.
ну может дойду до докера когда-н.

Аватар пользователя bsyomov bsyomov 11 февраля в 17:14

Для разработки это явно излишне, а чтобы в проде использовать эту штуку надо хорошо знать и настраивать - это не то, чтобы очень уж готовое решение, если про openvz говорить. Так что не рекомендую...

Аватар пользователя vladtulku vladtulku 26 февраля в 20:48

Имеется в виду сайт установленный по примеру из данной темы форума.
ddev launch -p
Выдает ошибку Ошибка открытия https://d9ddev.ddev.site:8037/:

ddev describe выдает таблицу PHPMyAdmin OK  https://d9ddev.ddev.site:8037
Вроде как служба работает, но перейти по этому адресу не получается.

Более того непонятки с тем куда и как устанавливается сайт по данному мануалу. Такое ощущение что ddev установил сайт в папку d9ddev/web
а после команды fin project create он еще и установился в папку d9ddev/test1/web отсюда он и работает в браузере.

При этом команды ddev composer require 'modulename' устанавливает модуль в первый адрес.
fin composer require 'modulename' во второй адрес.

Аватар пользователя nzytsprim nzytsprim 26 февраля в 21:40

Будьте внимательнее. Вы установили два сайта в один каталог d9ddev. Зачем?
В инструкции для сайта на основе Ddev в домашнем каталоге пользователя для примера создается каталог d9ddev.
Для сайта на основе Docksal в домашнем каталоге пользователя создается каталог d9docksal.
Понятно, что названия каталогов могут быть любыми.
Попробуйте оба инструмента, выберите, какой больше нравится и пользуйтесь.

Сразу добавлю, Ddev при установке сразу добавляет PHPMyAdmin.
В Docksal необходимо добавить вручную, то есть в каталоге проекта выполнить
fin addon install pma
fin project start
Доступ по адресу pma.<название сайта>

Аватар пользователя vladtulku vladtulku 8 марта в 11:51

Спасибо! С двойной установкой разобрался. В Ddev phpMyAdmin работает норм.

А вот на Docksal потратил кучу времени, но согласно официально инструкции он так и не заработал. Открывается заглавная страница и все.
Оказалось адрес, по которому находится phpMyAdmin, нынче другой. Как это узнать из одного единственного мануала? Никак.
Лезем в файл .docksal/docksal.yml в последней строчке находим отличие pma. /pma-

Действующий на данный момент адрес пишется через дефис:
http://pma-<project_name>.docksal