DDEV — это инструмент с открытым исходным кодом, с помощью которого Docker создает локальные среды разработки для PHP-фреймворков. Благодаря контейнеризации DDEV значительно упрощается работа над несколькими проектами, в которых несколько технологических стеков и облачных серверов. В DDEV включены шаблоны для WordPress, Laravel, Magento, TYPO3, Drupal и других.
Drupal 9 был выпущен 3 июня 2020 года для Drupal CMS. Drupal — популярный PHP-фреймворк для создания, поддержки сайтов и приложений любого размера. Он получил популярность благодаря простоте в работе, огромной библиотеке модулей и тем.
В этом туториале мы разберем процесс разработки сайта Drupal 9 на локальном компьютере с помощью DDEV. Сначала создадим сайт, а затем развернем проект на рабочем сервере.
Требования
Нам понадобится:
- Один локальный компьютер с Linux или macOS
- Для macOS: менеджер пакетов Homebrew, с помощью которого мы установим DDEV. Чтобы установить Homebrew на компьютер, читайте мануал Установка Ruby и настройка локальной среды разработки в macOS.
- Docker и Docker Compose, установленные на локальном компьютере.
- Для macOS: Ранее Docker Compose был доступен в Docker Toolbox, но Docker Toolbox устарел. Сейчас Docker официально рекомендует установить Docker Desktop, который включает: Docker Compose, Docker Engine и т.д. Для установки Docker на macOS следуйте официальному мануалу. Для получения дополнительной информации можете ознакомиться с официальным гайдом по началу работы с Docker Desktop. Если ранее с помощью Docker Toolbox вы уже устанавливали инструменты Docker, ознакомьтесь с различиями Docker Toolbox и Docker Desktop и как с ними работать в одной системе.
Примечание. С помощью DDEV можно создать сайт Drupal 9 на удаленном сервере, но для доступа к localhost в браузере потребуется решение. Команда DDEV ddev share работает с ngrok, который создает защищенный туннель к серверу, чтобы вы и другие пользователи могли участвовать в разработке. Для личного использования можно установить графический интерфейс на удаленном сервере и разрабатывать сайт через браузер. Ознакомьтесь с установкой и настройкой VNC в Ubuntu. Чтобы GUI был ещё быстрее, ознакомьтесь с настройкой удаленного рабочего стола с помощью X2Go в Ubuntu.
1: Установка DDEV
Сейчас мы установим DDEV на локальный компьютер. В этом пункте есть инструкции по установке для macOS и Linux. Туториал был протестирован на DDEV версии 1.15.0.
Установка DDEV на macOS
DDEV рекомендует пользователям macOS устанавливать инструмент при помощи менеджера пакетов Homebrew. С помощью команды brew установим последнюю стабильную версию:
brew tap drud/ddev && brew install drud/ddev/ddev
Установить самую свежую версию ddev-edge также можно с помощью brew:
brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev
Для обновления версии DDEV закройте приложение и с помощью brew обновите:
ddev poweroff
brew upgrade ddev
После установки или обновления DDEV для проверки программного обеспечения запустите ddev version:
ddev version
Получаем следующий результат:
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os darwin router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
В DDEV включен мощный CLI (интерфейс командной строки). Чтобы посмотреть часто используемые команды, запустите ddev:
ddev
Результат будет следующим:
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.
Ознакомьтесь с DDEV CLI подробнее в официальных материалах DDEV.
Теперь всё готово для установки Drupal 9, а после можно приступить к разработке сайта.
Установка DDEV в Linux
DDEV можно установить с помощью Homebrew для Linux или официального скрипта установки. В Ubuntu мы начнем с обновления списка пакетов через менеджер пакетов apt (можно использовать apt в Debian или аналогичный менеджер пакетов в другом дистрибутиве Linux):
sudo apt update
Установите обязательные пакеты из официального репозитория Ubuntu:
sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl
Эти пакеты позволяют загрузить скрипт установки DDEV из официального репозитория GitHub.
Теперь скачайте скрипт:
curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh
Перед запуском скрипта откройте его в nano или любом другом текстовом редакторе:
nano install_ddev.sh
Просмотрев и проверив его содержание, сохраните и закройте файл. Теперь запустите установочный скрипт.
Сделайте скрипт исполняемым с помощью команды chmod:
chmod +x install_ddev.sh
Теперь запустите скрипт:
./install_ddev.sh
В процессе установки может понадобиться подтвердить некоторые настройки или ввести пароль пользователя sudo. После завершения установки DDEV будет доступен в Linux.
Для проверки программного обеспечения запустите ddev version:
ddev version
Вывод будет следующим:
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os linux router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0
DDEV — это мощный CLI (интерфейс командной строки). Для просмотра распространенных команд запустите ddev без опций:
ddev
Получим следующий вывод:
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.
Детально ознакомиться с интерфейсом командной строки DDEV можно в официальных материалах DDEV.
Теперь всё готово для установки Drupal 9 и разработке сайта.
2: Развертывание сайта Drupal 9 с помощью DDEV
Теперь при помощи DDEV можно создать файловую систему Drupal и установить Drupal 9, а затем создать стандартный проект сайта.
Сначала давайте создадим root каталог проекта и перейдем в него. Все остальные команды будут выполняться из этого каталога. Мы назовём каталог условно d9test, но вы можете назвать свой каталог как угодно. Обратите внимание, что DDEV плохо обрабатывает имена с дефисом. Поэтому желательно не называть каталоги my-project или drupal-site-1.
Создайте root каталог проекта и перейдите в него:
mkdir d9test
cd d9test
DDEV отлично создает деревья каталогов, которые соответствуют конкретным платформам CMS. Создать специальную структуру каталогов для Drupal 9 можно с помощью команды ddev config:
ddev config --project-type=drupal9 --docroot=web --create-docroot
Получим такой вывод:
Creating a new ddev project config in the current directory (/Users/8host/d9test) Once completed, your configuration will be written to /Users/8host/d9test/.ddev/config.yaml Created docroot at /Users/8host/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/8host/d9test/web Ensuring write permissions for d9new No settings.php file exists, creating one Existing settings.php file includes settings.ddev.php Configuration complete. You may now run 'ddev start'.
DDEV создаст несколько подкаталогов и файлов (будут использоваться по умолчанию) для сайта Drupal, поскольку мы передали –project-type=drupal9 в команду ddev config. Теперь дерево каталогов проекта будет выглядеть так:
. ├── .ddev │ ├── .gitignore │ ├── config.yaml │ ├── db-build │ │ └── Dockerfile.example │ └── web-build │ └── Dockerfile.example └── web └── sites └── default ├── .gitignore ├── settings.ddev.php └── settings.php 6 directories, 7 files
.ddev/ будет основной папкой для конфигурации ddev. web/ будет docroot для нового проекта и будет содержать некоторые settings. файлы. Теперь у нас есть основа для создания нового проекта Drupal.
Далее давайте инициализируем платформу, которая создаст необходимые контейнеры и сетевые конфигурации. DDEV привязывается к портам 80 и 443, поэтому, если на компьютере запущен веб-сервер (например Apache) или другие службы, которые используют эти порты, остановите их.
Инициализируйте платформу с помощью ddev start:
ddev start
Эта команда создаст контейнеры Docker для проекта (включая веб-контейнер, контейнер базы данных и phpmyadmin). После инициализации получим такой вывод (номер порта может отличаться):
... [secondary_label Output] Successfully started d9test Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773
Примечание. Помните, DDEV запускает контейнеры Docker скрыто. Просмотреть эти контейнеры и убедиться в их работоспособности можно с помощью команды docker ps:
docker ps
Вместе с другими запущенными контейнерами вы увидите четыре новых с отдельными образами: php-myadmin, ddev-webserver, ddev-router и ddev-dbserver-mariadb.
ddev start успешно построил контейнеры и выдал результат с двумя URL. Хотя вывод показывает, что проект “can be reached at http://d9test.ddev.site и http://127.0.0.1:32773”, переход по URL прямо сейчас выдаст ошибку. Начиная с Drupal 8, ядро Drupal и модули contrib работают как зависимости. Прежде чем что-либо загрузится в браузере, нужно завершить установку Drupal с помощью менеджера пакетов Composer для проектов PHP.
Одна из самых полезных функций DDEV — возможность передачи команд Composer через интерфейс командной строки DDEV в среду с контейнерами. Значит, есть возможность отделить конфигурацию машины от среды разработки. Больше не нужно будет управлять путями к файлам и зависимостям или решать проблемы с версиями, которые часто возникают при разработке PHP на локальном компьютере. Также можно будет быстро переключаться между разными проектами, в которых разные фреймворки и технологические стеки.
С помощью ddev composer загрузите drupal/recommended-project. Она загрузит ядро Drupal, библиотеки и другие связанные с ним ресурсы, а затем создаст проект по умолчанию:
ddev composer create "drupal/recommended-project"в
Осталось загрузить последний компонент — Drush или Drupal Shell. В этом туториале мы будем работать только с drush и покажем альтернативный вариант, но drush — это достаточно мощный интерфейс командной строки для разработки Drupal, который повысит эффективность работы.
С помощью ddev composer установите drush:
ddev composer require "drush/drush"
Мы создали стандартный проект Drupal 9 и установили drush. Теперь просмотрим проект в браузере и настроим параметры сайта.
3: Настройка проекта Drupal 9
После установки Drupal 9 вы можете открыть свой новый проект в браузере. Для этого можно повторно запустить ddev start и скопировать один из двух выводимых URL или с помощью следующей команды, которая автоматически запустит сайт в новом окне браузера:
ddev launch
Откроется стандартный мастер установки Drupal.
Здесь есть два варианта: с помощью пользовательского интерфейса следовать инструкциям мастера во время установки или вернуться в терминал и передать команду drush через ddev. Последний вариант автоматизирует процесс установки и задаст admin как имя пользователя и пароль.
1 – С помощью мастера
Откройте мастер в браузере. В разделе Choose language выберите язык из выпадающего меню и нажмите Save and continue. Теперь выберите профиль установки: Standard, Minimal и Demo. Выберите и затем нажмите Save and continue. Drupal автоматически проверит требования, настроит базу данных и установит сайт. Остается настроить несколько конфигураций. Добавьте название и адрес электронной почты сайта с вашим доменом. Затем выберите имя пользователя и пароль. Задайте надежный пароль и сохраните учетные данные в безопасном месте. Наконец, добавьте личный адрес электронной почты, который вы регулярно проверяете, внесите региональные настройки и нажмите Save and continue.
Новый сайт загрузится и выведет приветственное сообщение.
2 – С помощью командной строки
Для установки сайта Drupal по умолчанию с помощью drush, в root каталоге проекта запустите команду ddev exec:
ddev exec drush site:install --account-name=admin --account-pass=admin
Сайт будет создан точно так же, как и с помощью мастера, но с некоторыми шаблонными конфигурациями. Имя пользователя и пароль будут admin.
Теперь запустите сайт для просмотра в браузере:
ddev launch
Теперь всё готово для создания сайта, но предварительно рекомендуем проверить правильность разрешений для каталога /sites/web/default. При локальной работе никаких проблем не будет, но если перенести эти разрешения на производственный сервер, возникнет риск для безопасности.
4: Проверка разрешений
Во время установки мастера или при первой загрузке страницы приветствия вы можете столкнуться с предупреждением о настройках разрешений в каталоге /sites/web/default и одного файла внутри этого каталога: settings.php.
После запуска скрипта установки Drupal попробует установить для каталога web/sites/default разрешения на read и execute для всех групп: это отображает параметр разрешений 555. Также он попытается установить для default/settings.php разрешение read-only, или 444. Если вы столкнулись с этим предупреждением, запустите следующие две команды chmod из root каталога проекта. Иначе это создаст угрозу безопасности:
chmod 555 web/sites/default
chmod 444 web/sites/default/settings.php
Чтобы убедиться в наличии правильных разрешений, запустите команду ls с флагами a, l, h и d:
ls -alhd web/sites/default web/sites/default/settings.php
Убедитесь, что разрешения соответствуют выводу:
dr-xr-xr-x 8 8host staff 256 Jul 21 12:56 web/sites/default
-r--r--r-- 1 8host staff 249 Jul 21 12:12 web/sites/default/settings.php
Всё готово для разработки сайта Drupal 9 на локальном компьютере.
5: Создание первого поста в Drupal
Чтобы протестировать функции Drupal, создадим пост с помощью веб-интерфейса.
На начальной странице сайта нажмите Content в левом верхнем углу меню. Теперь нажмите синюю кнопку Add content. Откроется новая страница. Нажмите Article, после чего откроется другая страница.
Придумайте и добавьте любой заголовок и контент. После нажмите синюю кнопку Save.
На сайте появится ваш первый пост.
Теперь вы разрабатываете сайт Drupal 9 на локальном компьютере без взаимодействия с сервером благодаря Docker и DDEV. Далее мы расскажем, как управлять контейнером DDEV.
6: Управление контейнером DDEV
Можете остановить контейнер DDEV без потери данных, когда закончите разработку проекта или захотите сделать перерыв. DDEV позволяет быстро переключать контексты между проектами – ещё одна полезная функция. Код и данные всегда сохраняются в каталоге проекта, даже после остановки или удаления контейнера DDEV.
Чтобы остановить DDEV, в root каталоге проекта выполните команду:
ddev stop
DDEV доступен глобально, поэтому можете запускать команды ddev из любого места, если вы зададите проект DDEV:
ddev stop d9test
Также можно просмотреть все проекты одновременно с помощью ddev list:
ddev list
Рекомендуем ознакомиться с командамии DDEV.
Можете перезапустить DDEV и продолжить разработку локально в любое время.
Подводим итоги
В этом мануале мы с помощью Docker и его функции контейнеризации разработали сайт Drupal на локальной системе при помощи DDEV. Также DDEV интегрируется с несколькими IDE и имеет встроенную поддержку отладки PHP для Atom, PHPStorm и Visual Studio Code (vscode). Далее вы можете узнать больше о создании сред разработки для Drupal с DDEV или разработке WordPress.