Создание сайта Drupal 9 с помощью Docker и DDEV

DDEV — это инструмент с открытым исходным кодом, с помощью которого Docker создает локальные среды разработки для PHP-фреймворков. Благодаря контейнеризации DDEV значительно упрощается работа над несколькими проектами, в которых несколько технологических стеков и облачных серверов. В DDEV включены шаблоны для WordPress, Laravel, Magento, TYPO3, Drupal и других.

Drupal 9 был выпущен 3 июня 2020 года для Drupal CMS. Drupal — популярный PHP-фреймворк для создания, поддержки сайтов и приложений любого размера. Он получил популярность благодаря простоте в работе, огромной библиотеке модулей и тем.

В этом туториале мы разберем процесс разработки сайта Drupal 9 на локальном компьютере с помощью DDEV. Сначала создадим сайт, а затем развернем проект на рабочем сервере.

Требования 

Нам понадобится:

Примечание. С помощью 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.

Tags: , , ,

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