DockerとDDEVを使用してローカルマシンでDrupal9Webサイトを開発する方法
著者は、 Diversity in Tech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
DDEV は、Dockerを使用してさまざまなPHPフレームワークのローカル開発環境を構築するオープンソースツールです。 コンテナ化の力を使用して、DDEVは、複数の技術スタックと複数のクラウドサーバーを使用する複数のプロジェクトでの作業方法を大幅に簡素化できます。 DDEVには、 WordPress 、 Laravel 、 Magento 、 TYPO3 、Drupalなどのテンプレートが含まれています。
Drupal 9 は、DrupalCMS向けに2020年6月3日にリリースされました。 使いやすさとモジュールとテーマの膨大なライブラリで知られるDrupalは、あらゆるサイズのさまざまなWebサイトとアプリケーションを構築および保守するための人気のあるPHPフレームワークです。
このチュートリアルでは、DDEVを使用してローカルマシンでDrupal9Webサイトの開発を開始します。 これにより、最初にWebサイトを構築し、後で準備ができたら、プロジェクトを運用サーバーにデプロイできます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- LinuxまたはmacOSを実行している1台のローカルマシン
- macOS の場合:Homebrewパッケージマネージャー。これを使用してDDEVをインストールします。 ローカルマシンにHomebrewをインストールするには、ステップ3 —このRubyチュートリアルのHomebrewのインストールとセットアップに従ってください。
- ローカルマシンにインストールされているDockerおよびDockerCompose。
- Linux の場合:DockerとDocker Composeは、DockerとDockerComposeのインストール方法の2つのチュートリアルに従ってインストールできます。 リストからLinuxディストリビューションを選択し、付属の手順に従ってください。
- macOSの場合:DockerComposeは以前はDockerToolboxの一部として利用可能でしたが、DockerToolboxは現在レガシーソリューションです。 現在、Dockerは、 Docker Compose 、 DockerEngineなどを含むDockerDesktopをインストールすることを正式に推奨しています。 Dockerの公式ガイドに従ってMacOSにDockerDesktopをインストールします。 詳細については、公式のDockerDesktop入門ガイドをお読みください。 以前にDockerToolboxを使用してさまざまなDockerツールをインストールしたことがある場合は、 DockerToolboxとDockerDesktopの違いと、それらの共存方法に関するこの公式記事を読むことができます。
注:リモートサーバーでDDEVを使用してDrupal 9を開発することは可能ですが、Webブラウザーでlocalhost
にアクセスするためのソリューションが必要になります。 DDEVコマンドddevshareはngrokと連携して、サーバーへの安全なトンネルを作成し、あなたや他の利害関係者が開発サイトを表示できるようにします。 個人的に使用する場合は、リモートサーバーにGUIをインストールし、そのインターフェイス内のWebブラウザーを介して開発サイトにアクセスすることもできます。 これを行うには、 Ubuntu20.04にVNCをインストールして構成する方法に関するガイドに従うことができます。 さらに迅速なGUIソリューションについては、Ubuntu20.04でX2Goを使用してリモートデスクトップをセットアップする方法に関するガイドに従うことができます。
ステップ1—DDEVのインストール
このステップでは、ローカルマシンにDDEVをインストールします。 オプション1にはmacOSの手順が含まれ、オプション2にはLinuxの手順が含まれています。 このチュートリアルは、DDEVバージョン1.15.0でテストされました。
オプション1—macOSへのDDEVのインストール
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をインストールして、Webサイトの開発を開始する準備が整います。
オプション2—LinuxへのDDEVのインストール
Linuxオペレーティングシステムでは、Homebrew for Linuxを使用するか、公式のインストールスクリプトを使用してDDEVをインストールできます。 Ubuntuでは、apt
パッケージマネージャーでパッケージのリストを更新することから始めます(Debianではapt
を使用できます。それ以外の場合は、Linuxディストリビューションに関連付けられている同等のパッケージマネージャーを使用します)。
sudo apt update
次に、Ubuntuの公式リポジトリからいくつかの前提条件パッケージをインストールします。
sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl
これらのパッケージを使用すると、公式のGitHubリポジトリからDDEVインストールスクリプトをダウンロードできます。
次に、スクリプトをダウンロードします。
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
パスワードを入力するように求められる場合があります。 インストールが完了すると、Linuxオペレーティングシステムで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 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をデプロイして、Webサイトの開発を開始する準備が整います。
ステップ2—DDEVを使用して新しいDrupal9サイトをデプロイする
DDEVを実行したら、これを使用してDrupal固有のファイルシステムを作成し、Drupal 9をインストールしてから、標準のWebサイトプロジェクトを開始します。
まず、プロジェクトのルートディレクトリを作成してから、その中に移動します。 この場所から残りのすべてのコマンドを実行します。 このチュートリアルではd9test
を使用しますが、ディレクトリに別の名前を付けることができます。 ただし、DDEVはハイフンでつながれた名前を適切に処理しないことに注意してください。 my-project
やdrupal-site-1
などのディレクトリ名は避けることをお勧めします。
プロジェクトのルートディレクトリを作成し、内部をナビゲートします。
mkdir d9test cd d9test
DDEVは、特定のCMSプラットフォームに一致するディレクトリツリーの作成に優れています。 ddev config
コマンドを使用して、Drupal9に固有のディレクトリ構造を作成します。
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はDrupalWebサイトのデフォルトの組織を表すいくつかのサブディレクトリとファイルを作成しました。 プロジェクトディレクトリツリーは次のようになります。
Drupal9ディレクトリツリー
. ├── .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などのWebサーバーを実行している場合、またはこれらのポートを使用するその他のサーバーを実行している場合は、続行する前にこれらのサービスを停止してください。
ddev start
コマンドを使用して、プラットフォームを初期化します。
ddev start
これにより、プロジェクトのすべてのDockerベースのコンテナーがビルドされます。これには、Webコンテナー、データベースコンテナー、および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
現在実行している他のコンテナと並んで、それぞれ異なるイメージを実行している4つの新しいコンテナがあります:php-myadmin
、ddev-webserver
、ddev-router
、および [X171X ]。
ddev start
はコンテナを正常に構築し、2つのURLを含む出力を提供しました。 この出力には、プロジェクトは「http://d9test.ddev.site
およびhttp://127.0.0.1:32773
で到達可能」と示されていますが、これらのURLに今すぐアクセスするとエラーが発生します。 Drupal 8以降、Drupalコアとcontribモジュールは依存関係のように機能します。 したがって、Webブラウザーに何かをロードする前に、まずPHPプロジェクトのパッケージマネージャーであるComposerを使用してDrupalのインストールを完了する必要があります。
DDEVの最も便利で洗練された機能の1つは、ComposerコマンドをDDEVCLIを介してコンテナー化された環境に渡すことができることです。 これは、マシンの特定の構成を開発環境から分離できることを意味します。 ローカルPHP開発に一般的に伴うさまざまなファイルパス、依存関係、およびバージョンの問題を管理する必要がなくなりました。 さらに、最小限の労力で、さまざまなフレームワークと技術スタックを使用して、複数のプロジェクト間でコンテキストをすばやく切り替えることができます。
ddev composer
コマンドを使用して、drupal/recommended-project
をダウンロードします。 これにより、Drupalコア、そのライブラリ、およびその他の関連リソースがダウンロードされ、デフォルトのプロジェクトが作成されます。
ddev composer create "drupal/recommended-project"
次に、DrushまたはDrupalShellと呼ばれる最後のコンポーネントをダウンロードします。 このチュートリアルでは1つのdrush
コマンドのみを使用し、このチュートリアルは代替手段を提供しますが、drush
はDrupal開発用の強力なCLIであり、効率を向上させることができます。
ddev composer
を使用してdrush
をインストールします。
ddev composer require "drush/drush"
これで、デフォルトのDrupal 9プロジェクトがビルドされ、drush
がインストールされました。 次に、ブラウザでプロジェクトを表示し、Webサイトの設定を構成します。
ステップ3—Drupal9プロジェクトの構成
Drupal 9をインストールしたので、ブラウザーで新しいプロジェクトにアクセスできます。 これを行うには、ddev start
を再実行して、出力された2つのURLのいずれかをコピーするか、次のコマンドを使用して、新しいブラウザウィンドウでサイトを自動的に起動します。
ddev launch
標準のDrupalインストールウィザードが表示されます。
ここでは2つのオプションがあります。 このUIを使用して、ウィザードに従ってインストールするか、ターミナルに戻ってdrush
コマンドをddev
に渡すことができます。 後者のオプションは、インストールプロセスを自動化し、ユーザー名とパスワードの両方としてadmin
を設定します。
オプション1—ウィザードの使用
ブラウザのウィザードに戻ります。 言語の選択で、ドロップダウンメニューから言語を選択し、保存して続行をクリックします。 次に、インストールプロファイルを選択します。 標準、最小、デモから選択できます。 選択して、保存して続行をクリックします。 Drupalは自動的に要件を確認し、データベースをセットアップして、サイトをインストールします。 最後のステップは、いくつかの構成をカスタマイズすることです。 ドメインで終わるサイト名とサイトのメールアドレスを追加します。 次に、ユーザー名とパスワードを選択します。 強力なパスワードを選択し、資格情報を安全な場所に保管してください。 最後に、定期的に確認するプライベートメールアドレスを追加し、地域の設定を入力して、保存して続行を押します。
新しいサイトにウェルカムメッセージが読み込まれます。
オプション2—コマンドラインの使用
プロジェクトのルートディレクトリから、次のddev exec
コマンドを実行し、drush
を使用してデフォルトのDrupalサイトをインストールします。
ddev exec drush site:install --account-name=admin --account-pass=admin
これにより、ウィザードと同じようにサイトが作成されますが、ボイラープレート構成がいくつかあります。 ユーザー名とパスワードはadmin
になります。
次に、サイトを起動してブラウザで表示します。
ddev launch
これでWebサイトの構築を開始する準備が整いましたが、/sites/web/default
ディレクトリのアクセス許可が正しいことを確認することをお勧めします。 ローカルで作業している間、これは重要な問題ではありませんが、これらのアクセス許可を運用サーバーに転送すると、セキュリティ上のリスクが発生します。
ステップ4—権限を確認する
ウィザードのインストール中、またはウェルカムページが最初に読み込まれるときに、/sites/web/default
ディレクトリとそのディレクトリ内の1つのファイルsettings.php
のアクセス許可設定に関する警告が表示される場合があります。
インストールスクリプトの実行後、 Drupalは、すべてのグループに対して読み取りおよび実行するWeb / sites/defaultディレクトリのアクセス許可を設定しようとします。これは555
のアクセス許可設定です。 また、default/settings.php
の権限をread-only
または444
に設定しようとします。 この警告が発生した場合は、プロジェクトのルートディレクトリからこれら2つのchmod
コマンドを実行してください。 そうしないと、セキュリティリスクが発生します。
chmod 555 web/sites/default chmod 444 web/sites/default/settings.php
正しい権限があることを確認するには、a
、l
、h
、およびd
スイッチを指定して次のls
コマンドを実行します。
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
これで、ローカルマシンでDrupal9Webサイトを開発する準備が整いました。
ステップ5—Drupalで最初の投稿を作成する
Drupalの機能の一部をテストするために、WebUIを使用して投稿を作成します。
サイトの最初のページから、上部メニューの左端にあるコンテンツボタンをクリックします。 次に、青いコンテンツの追加ボタンをクリックします。 新しいページが表示されます。 Article をクリックすると、別のページが表示されます。
好きなタイトルとコンテンツを追加します。 DigitalOceanの壁紙の1つのような画像を追加することもできます。 準備ができたら、青い保存ボタンをクリックします。
最初の投稿がWebサイトに表示されます。
DockerとDDEVのおかげで、サーバーと対話することなく、ローカルマシンでDrupal9Webサイトを開発しています。 次のステップでは、ワークフローに対応するためにDDEVコンテナーを管理します。
ステップ6—DDEVコンテナの管理
プロジェクトの開発が終了したとき、または休憩したいときは、データの損失を心配せずにDDEVコンテナーを停止できます。 DDEVは、多くのプロジェクト間の迅速なコンテキスト切り替えを管理できます。 これは、その最も便利な機能の1つです。 DDEVコンテナを停止または削除した後でも、コードとデータは常にプロジェクトディレクトリに保持されます。
リソースを解放するために、いつでもDDEVを停止できます。 プロジェクトのルートディレクトリから、次のコマンドを実行します。
ddev stop
DDEVはグローバルに利用できるため、DDEVプロジェクトを指定する限り、どこからでもddev
コマンドを実行できます。
ddev stop d9test
ddev list
を使用して、すべてのプロジェクトを一度に表示することもできます。
ddev list
DDEVには、他の多くの便利なコマンドが含まれています。
DDEVを再起動して、いつでもローカルで開発を続けることができます。
結論
このチュートリアルでは、Dockerとコンテナ化の機能を使用して、DDEVを使用してDrupalサイトをローカルで開発しました。 DDEVは、多数のIDEともうまく統合され、 Atom 、 PHPStorm 、および Visual Studio Code(vscode)の組み込みPHPデバッグを提供します。 ここから、 DDEV を使用したDrupalの開発環境の作成、またはWordpressなどの他のPHPフレームワークの開発についても学ぶことができます。