DockerによるDrupal8開発環境の構築
출처: https://www.870labo.com/posts/build-drupal8-devenv-with-docker/
はじめに
Drupalでサイトを構築する機会がありました。
Drupalでの開発環境を構築する場合、以下のものを用意する必要があります。
- Webサーバー
- DBサーバー
- Drupal
これらをmac上で用意しようとした場合、一般的には xampp や mamp を用いるという選択肢があります。
今回は上記は使わず、Dockerを用いて環境の構築をすることにしました。
その方法を以下に記述します。
前提
以下の条件を前提とします。
- docker が使用可能である
- docker-compose が使用可能である
環境構築のポイント
このようなシステムを作ります。
ポイントは以下になります。
- Drupal用とDB用と2つのコンテナを作成
- DrupalはDBを参照
- DBとDrupalのサイト定義はVolumeでホスト側へ永続化
- ホストからDrupalへはポート8080を介して接続
手順
以下の手順で作成していきます。
- ボリューム用ディレクトリのためのスクリプト作成
- docker-compose.ymlの作成
- コンテナの起動とDruoalの初期設定
ボリューム用ディレクトリのためのスクリプト作成
drupal と、db が使用するものそれぞれを作成します。
ディレクトリ構成は以下になります。
├── data
│ ├── html
│ │ ├── modules
│ │ ├── profiles
│ │ ├── sites
│ │ └── themes
│ └── postgres
作ったり壊したりを何回も行う可能性があるので、setup.sh というファイルを作成し、実行権限を付与しました。
スクリプトは以下のようにしました。
#!/bin/bash | |
pgVolumes=("./data/postgres") | |
drupalVolumes=("./data/html/modules" "./data/html/profiles" "./data/html/themes" "./data/html/sites") | |
makeDirs() { | |
for path in "$@" | |
do | |
echo "Creating \"$path\" ..." | |
mkdir -p "$path" | |
echo "done." | |
done | |
} | |
echo "started." | |
makeDirs "${drupalVolumes[@]}" | |
makeDirs "${pgVolumes[@]}" | |
echo "finished." |
docker-compose.ymlの作成
Docker HubにあるDrupalのOfficial Images記載の情報をもとに構築します。
- ネットワークの設定
- ボリュームの設定
- DB
- Drupal
ネットワークの設定
drupal_net という名前でネットワークを作成します。
これには、drupalや db が参加します。
networks:
drupal_net:
driver: bridge
ボリュームの設定
ボリュームのローカルに保存するパスを相対パスにて記述します。
記述は、それぞれのディレクトリについて行います。
volumes:
drupal-vol-modules:
driver_opts:
type: none
device: $PWD/data/html/modules
o: bind
drupal-vol-profiles:
driver_opts:
type: none
device: $PWD/data/html/profiles
o: bind
drupal-vol-themes:
driver_opts:
type: none
device: $PWD/data/html/themes
o: bind
drupal-vol-sites:
driver_opts:
type: none
device: $PWD/data/html/sites
o: bind
db-vol:
driver_opts:
type: none
device: $PWD/data/postgres
o: bind
DB
設定は以下になります。
services:
db:
image: postgres:11
environment:
POSTGRES_DB: $POSTGRES_DB
POSTGRES_USER: $POSTGRES_USER
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
networks:
drupal_net:
volumes:
- db-vol:/var/lib/postgresql/data
ports:
- 5433:5432
restart: always
ポイントとなる部分を記述していきます。
使用するDB
DBはPostgreSQLを使用します。
公式イメージの説明どおりのタグで指定します。
services:
db:
image: postgres:11
空間DBにしたい場合は、image にmdillon/postgisを指定します。
services:
db:
image: mdillon/postgis
ユーザー名やパスワードについて
以下の値を、環境変数により指定します。
- DB名
- ユーザー名
- パスワード
services:
db:
environment:
POSTGRES_DB: $POSTGRES_DB
POSTGRES_USER: $POSTGRES_USER
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
またこれらの値は、直接指定するのではなく .env ファイルを作成し、そこから指定するようにします。
.env ファイルの記述は以下のようにしました。
# .env
POSTGRES_DB=drupal_db
POSTGRES_USER=docker
POSTGRES_PASSWORD=pass
まとめると、以下のように接続されます。
docker-composeでの記述.envでの記述POSTGRESDB: $POSTGRESDB | POSTGRESDB=drupaldb |
POSTGRESUSER: $POSTGRESUSER | POSTGRES_USER=docker |
POSTGRESPASSWORD: $POSTGRESPASSWORD | POSTGRES_PASSWORD=pass |
ファイル構成はこのようになってます。
├── .env
├── data
│ ├── html
│ │ ├── modules
│ │ ├── profiles
│ │ ├── sites
│ │ └── themes
│ └── postgres
├── docker-compose.yml
└── setup.sh
ポートについて
ポートは、コンテナ内部ではデフォルトの5432を、外部へは5433で公開しています。
自分の環境では、既にローカルでPostgresがデフォルトポートで動作しているためです。 Postico等からDBを参照するときに、5433を使います。
services:
db:
ports:
- 5433:5432
ネットワークについて
drupal_net に参加します。
services:
db:
networks:
drupal_net:
ボリュームについて
コンテナ内のdataが保存されているパスとローカルのパスを結びつけます。
services:
db:
volumes:
- db-vol:/var/lib/postgresql/data
Drupal
設定は以下になります。
services:
drupal:
image: drupal:latest
networks:
drupal_net:
volumes:
- drupal-vol-modules:/var/www/html/modules
- drupal-vol-profiles:/var/www/html/profiles
- drupal-vol-themes:/var/www/html/themes
- drupal-vol-sites:/var/www/html/sites
ports:
- 8080:80
depends_on:
- db
restart: always
ポートについて
オフィシャルのイメージには、Webサーバーも含まれています。
コンテナが起動すると、ブラウザでアクセス可能になります。
ホストからはポート8080でアクセスするようにします。
services:
drupal:
ports:
- 8080:80
ネットワークについて
drupal_net に参加します。
services:
drupal:
networks:
drupal_net:
ボリュームについて
コンテナ内でサイト構築に必要なパスを、それぞれローカルのパスを結びつけます。
services:
drupal:
volumes:
- drupal-vol-modules:/var/www/html/modules
- drupal-vol-profiles:/var/www/html/profiles
- drupal-vol-themes:/var/www/html/themes
- drupal-vol-sites:/var/www/html/sites
依存の記述について
dbの起動完了を待ってからdrupalを立ち上げるようにします。
services:
drupal:
depends_on:
- db
全体
全体的には以下のようになります。
version: '3.7' | |
services: | |
drupal: | |
image: drupal:latest | |
networks: | |
drupal_net: | |
volumes: | |
- drupal-vol-modules:/var/www/html/modules | |
- drupal-vol-profiles:/var/www/html/profiles | |
- drupal-vol-themes:/var/www/html/themes | |
- drupal-vol-sites:/var/www/html/sites | |
ports: | |
- 8080:80 | |
depends_on: | |
- db | |
restart: always | |
db: | |
image: postgres:11 | |
environment: | |
POSTGRES_DB: $POSTGRES_DB | |
POSTGRES_USER: $POSTGRES_USER | |
POSTGRES_PASSWORD: $POSTGRES_PASSWORD | |
networks: | |
drupal_net: | |
volumes: | |
- db-vol:/var/lib/postgresql/data | |
ports: | |
- 5433:5432 | |
restart: always | |
networks: | |
drupal_net: | |
driver: bridge | |
volumes: | |
drupal-vol-modules: | |
driver_opts: | |
type: none | |
device: $PWD/data/html/modules | |
o: bind | |
drupal-vol-profiles: | |
driver_opts: | |
type: none | |
device: $PWD/data/html/profiles | |
o: bind | |
drupal-vol-themes: | |
driver_opts: | |
type: none | |
device: $PWD/data/html/themes | |
o: bind | |
drupal-vol-sites: | |
driver_opts: | |
type: none | |
device: $PWD/data/html/sites | |
o: bind | |
db-vol: | |
driver_opts: | |
type: none | |
device: $PWD/data/postgres | |
o: bind |
Drupalサイトの構築
サイト構築のための準備は完了しました。
これから、実際に構築していきます。
本記事では、初期設定の部分までで終わります。
ファイルの配置
どこかディレクトリを作成して、今まで作成したファイルを同一ディレクトリに配置します。
配置後は以下のようになります。
├── .env
├── docker-compose.yml
└── setup.sh
ディレクトリの作成
以下のようにスクリプトを実行しディレクトリを作成します。
$ ./setup.sh
実行後は以下のようになります。
├── .env
├── data
│ ├── html
│ │ ├── modules
│ │ ├── profiles
│ │ ├── sites
│ │ └── themes
│ └── postgres
├── docker-compose.yml
└── setup.sh
コンテナの起動
docker-compose.yml があるディレクトリから、以下のコマンドでコンテナを起動します。
$ docker-compose up
ローカルにイメージがない場合はダウンロードから始まります。
これには少々時間がかかります。
Drupal初期設定
コンテナが起動したらブラウザを立ち上げ、以下へアクセスします。
言語の選択
以下のように言語の選択画面が表示されます。
ここでは「日本語」を選択しました。
次の画面へ移動します。
インストールプロフィールの選択
インストールプロフィールを選択します。
ここでは、「標準」を選択しました。
次の画面へ移動します。
データベースの構成の指定
データベースの構成で必要な情報を選択します。
ここでは、「PostgresSQL」を選択します。
環境変数で指定した以下の値を入力します。
データベース名 | drupal_db |
データベースのユーザー名 | docker |
データベースのパスワード | pass |
また、ホストを指定するために「高度なオプション」を押下します。
ホストの指定
ホスト名の入力が求められるので、以下を指定します。
項目値ホスト | db |
ポート番号 | 5432 |
これは、docker-compose.yml で記述した、services の中で指定した名前(ハイライト箇所)を使用します。
version: '3.7'
services:
:
db: image: postgres:11
environment:
POSTGRES_DB: $POSTGRES_DB
:
次の画面へ移動します。
サイトの環境設定
以下の画面が出たら、サイトの環境設定を行って初期設定は終了です。
この先はそれぞれのサイト用の情報を入力していきます。
おわりに
DrupalとPostgresの2つの公式イメージを使用するだけで、開発環境を構築することができました。
Dockerの環境が整っていれば、本手順に従って設定ファイルを実行するだけでサイトの開発が可能になります。
開発中の他のサイトと環境が混じり合うこともないので、安心して開発を行うことができます。
'프로그램 활용 > 클라우드 가상화 도커' 카테고리의 다른 글
(Docker)도커 - 리눅스O/S(Rocky, ubuntu) 컨테이너 설치 및 SSH 접속하기, 파일질라 filezilla (0) | 2023.07.25 |
---|---|
Docker에 Aapche Tomcat 설치하고 Oracle 12c 연결 (0) | 2023.07.25 |
Docker x PostgreSql (0) | 2023.07.25 |
Ubuntu 22.04에서 Docker로 Drupal을 설치하는 방법 (0) | 2023.07.25 |
How to Install Drupal with Docker on Ubuntu 22.04 (0) | 2023.07.25 |