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

Автор выбрал Diversity in Tech Fund для получения пожертвования в рамках программы Write for DOnations.

Введение

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 на локальном компьютере выполните «Шаг 3 — Установка и настройка Homebrew» в этом обучающем модуле по Ruby.

  • Docker и Docker Compose, установленные на локальном компьютере.

    • Для Linux: вы можете установить Docker и Docker Compose, следуя указаниям обучающих модулей «Установка и использование Docker» и «Установка Docker Compose». Выберите дистрибутив Linux из списка и следуйте прилагаемым инструкциям.
    • Для macOS: ранее Docker Compose был доступен в составе Docker Toolbox, но сейчас Docker Toolbox считается устаревшим решением. Сейчас Docker официально рекомендует устанавливать комплект Docker Desktop, в который входят Docker Compose, Docker Engine и т. д. Следуйте указаниям официального руководства Docker для установки Docker Desktop в macOS. Более подробную информацию можно найти в официальном руководстве по началу работы с Docker Desktop. Если вы ранее использовали Docker Toolbox для установки различных инструментов Docker, ознакомьтесь с этой официальной статьей об отличиях между Docker Toolbox и Docker Desktop и о том, как использовать их в одной системе.

Примечание. Вы можете создать сайт Drupal 9 с помощью DDEV на удаленном сервере, но в этом случае вам потребуется решение для доступа к localhost в браузере. Команда DDEV ddev share работает с ngrok, создавая защищенный туннель к серверу для вас и других пользователей для просмотра сайта в разработке. Для личного использования вы также можете установить графический пользовательский интерфейс на удаленном сервере и подключаться к сайту в разработке через браузер, используя этот интерфейс. Для этого следуйте указаниям руководства по установке и настройке VNC в Ubuntu 20.04. Чтобы графический пользовательский интерфейс был еще быстрее, следуйте указаниям нашего руководства по настройке удаленного рабочего места с помощью X2Go в Ubuntu 20.04.

Шаг 1 — Установка DDEV

На этом шаге мы установим DDEV на локальный компьютер. Вариант 1 содержит инструкции для macOS, а Вариант 2 — инструкции для Linux. Мы тестировали этот обучающий модуль с DDEV версии 1.15.0.

Вариант 1 — Установка DDEV в macOS

DDEV рекомендует пользователям macOS использовать для установки инструмента диспетчер пакетов Homebrew. Используйте следующую команду brew для установки последнего стабильного выпуска:

  • brew tap drud/ddev && brew install drud/ddev/ddev

Если вы предпочитаете абсолютно новейшую версию, вы можете использовать brew для установки ddev-edge:

  • brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev

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

  • ddev poweroff
  • brew upgrade ddev

После установки или обновления DDEV используйте команду ddev version для проверки вашего программного обеспечения:

  • ddev version

Результат должен будет выглядеть следующим образом:

OutputDDEV-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

Результат будет выглядеть следующим образом:

OutputCreate 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.

После установки DDEV на локальном компьютере вы будете готовы установить Drupal 9 и начать разработку сайта.

Вариант 2 — Установка DDEV в Linux

В операционной системе 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

Результат должен будет выглядеть следующим образом:

OutputDDEV-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

Результат будет выглядеть следующим образом:

OutputCreate 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.

После установки DDEV на локальном компьютере вы будете готовы установить Drupal 9 и начать разработку сайта.

Шаг 2 — Развертывание нового сайта Drupal 9 с помощью DDEV

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

Вначале мы создадим корневой каталог проекта и перейдем в него. Все остальные команды мы будем запускать отсюда. В этом обучающем модуле мы будем использовать имя каталога d9test, но вы можете выбрать любое предпочитаемое имя. Обратите внимание, что DDEV не очень хорошо обрабатывает имена с дефисами. Желательно избегать использования таких имен каталогов, как my-project или drupal-site-1.

Создайте корневой каталог проекта и перейдите в него:

  • mkdir d9test
  • cd d9test

DDEV отлично создает деревья каталогов, соответствующие определенным платформам CMS. Используйте команду ddev config для создания специальной структуры каталогов для Drupal 9:

  • ddev config --project-type=drupal9 --docroot=web --create-docroot

Результат должен будет выглядеть следующим образом:

OutputCreating a new ddev project config in the current directory (/Users/sammy/d9test) Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml  Created docroot at /Users/sammy/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/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'. 

Поскольку вы передали аргумент --project-type=drupal9 в команду ddev config, DDEV создаст несколько подкаталогов и файлов, используемых по умолчанию для организации сайта Drupal. Ваше дерево каталогов проекта теперь будет выглядеть так:

A Drupal 9 directory tree

. ├── .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/ будет корневым каталогом документов нового проекта и будет содержать определенные файлы settings. Вы подготовили структуру для создания нового проекта Drupal.

Следующим шагом будет инициализация платформы, когда мы создадим необходимые контейнеры и сетевые конфигурации. DDEV выполняет привязку к портам 80 и 443, и если вы используете на своем компьютере веб-сервер Apache или другие веб-серверы или службы, использующие эти порты, остановите эти службы, прежде чем продолжать.

Используйте команду ddev start для инициализации платформы:

  • ddev start

Эта команда создаст все контейнеры Docker для вашего проекта, включая веб-контейнер, контейнер базы данных и phpmyadmin. После инициализации вы увидите следующий вывод (номер порта может отличаться):

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. Хотя в выводимом сообщении говорится, что проект можно найти по URL-адресам http://d9test.ddev.site и http://127.0.0.1:32773, сейчас при попытке открыть любой из этих URL будет выведено сообщение об ошибке. Начиная с Drupal 8, ядро Drupal и модули contrib работают как зависимости. Поэтому нужно предварительно завершить установку Drupal с помощью диспетчера пакетов Composer для проектов PHP, прежде чем в браузере получится что-либо загрузить.

Одна из самых полезных и элегантных возможностей DDEV — возможность передачи команд Composer через DDEV CLI и в среду с контейнерами. Это означает, что вы можете отделить конфигурацию вашего компьютера от среды разработки. Вам больше не нужно будет управлять путями к различным файлам и зависимостями или решать проблемы с версиями, часто возникающие при разработке PHP на локальном компьютере. Более того, вы сможете быстро и с минимумом трудозатрат переключаться между разными проектами, использующими разные структуры и технологические комплексы.

Используйте команду ddev composer для загрузки проекта drupal/recommended-project. Она загрузит ядро Drupal, библиотеки и другие связанные ресурсы, а затем создаст проект по умолчанию:

  • ddev composer create "drupal/recommended-project"

Загрузите заключительный компонент Drush (оболочка Drupal). В этом обучающем модуле мы будем использовать только одну команду 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.

Установщик Drupal 9 из браузера

Теперь у вас есть два варианта. Вы можете использовать этот пользовательский интерфейс и следовать указаниям мастера по установке, или вы можете вернуться в терминал и передать команду drush через ddev. Последний вариант автоматизирует процесс установки и задает admin как имя пользователя и пароль.

Вариант 1 — Использование мастера

Снова откройте мастер в браузере. В разделе Choose language (Выбор языка) выберите язык из выпадающего меню и нажмите Save and continue (Сохранить и продолжить). Выберите профиль установки. Вы можете выбрать вариант Standard (Стандартный), Minimal (Минимальный) или Demo (Демо). Сделайте выбор и нажмите Save and continue (Сохранить и продолжить). Drupal автоматически проверит ваши требования, настроит базу данных и установит ваш сайт. Последним шагом будет настройка нескольких конфигураций. Добавьте имя сайта и адрес электронной почты сайта с вашим доменом. Затем выберите имя пользователя и пароль. Выберите надежный пароль и сохраните ваши учетные данные в безопасном месте. В заключение добавьте частный адрес электронной почты, который вы регулярно проверяете, внесите региональные настройки и нажмите Save and continue (Сохранить и продолжить).

Приветственное сообщение Drupal 9 с предупреждением о разрешениях

Ваш новый сайт загрузится и выведет приветственное сообщение.

Вариант 2 — Использование командной строки

Запустите в корневом каталоге проекта следующую команду ddev exec для установки сайта Drupal по умолчанию с помощью drush:

  • 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 разрешения на чтение и исполнение для всех групп: это параметр разрешений 555. Также он попытается установить для default/settings.php разрешение «только чтение» или 444. Если вы увидите это предупреждение, запустите эти две команды chmod из корневого каталога проекта. В противном случае возникнет риск для безопасности:

  • 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

Убедитесь, что разрешения соответствуют следующему выводу:

Outputdr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default -r--r--r-- 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php 

Вы готовы начать создание сайта Drupal 9 на локальном компьютере.

Шаг 5 — Создание первого поста в Drupal

Чтобы протестировать определенную функцию Drupal, вы создадите пост с помощью пользовательского веб-интерфейса.

Нажмите на начальной странице сайта кнопку Content (Содержимое) в левом верхнем меню. Нажмите синюю кнопку Add content (Добавить содержимое). Откроется новая страница. Нажмите Article (Статья), и появится еще одна страница.

Строка создания статьи в Drupal 9

Добавьте любые предпочитаемые заголовок и содержимое. Также вы можете добавить изображение, например, одни из обоев DigitalOcean. Когда вы будете готовы, нажмите синюю кнопку Save (Сохранить).

На вашем сайте появится ваш первый пост.

Созданный пост в Drupal 9

Теперь вы создаете сайт Drupal 9 на локальном компьютере без взаимодействия с сервером благодаря Docker и DDEV. На следующем шаге мы будем управлять контейнером DDEV с учетом вашего рабочего процесса.

Шаг 6 — Управление контейнером DDEV

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

Вы можете остановить DDEV в любое время для освобождения ресурсов. Запустите следующую команду в каталоге вашего проекта:

  • ddev stop

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

  • ddev stop d9test

Также вы можете просмотреть все проекты одновременно с помощью команды ddev list:

  • ddev list

В DDEV имеется много других полезных команд.

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

Заключение

В этом обучающем модуле мы использовали Docker и возможности контейнеризации для разработки сайта Drupal на локальной системе с помощью DDEV. Также DDEV интегрируется с несколькими интегрированными средами разработки и имеет встроенную поддержку отладки PHP для Atom, PHPStorm и Visual Studio Code (vscode). Далее вы можете узнать больше о создании сред разработки для Drupal с DDEV или для разработки с использованием других структур PHP, таких как WordPress.