Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
221 lines (157 sloc) 9.09 KB

Drop Fabrik

Drop FabrikはDrupalの開発環境を素早く立ち上げるためのDocker環境です。 5分から10分程度でDrupalの環境をDocker上に構築することができます。 また、ローカルマシン上で構築したものと完全に同じ環境を、AWSなどのクラウドサービスにデプロイすることもできます。

概要

以下のコンテナー郡で構成されています。

Container Service name Image Exposed port
Nginx Proxy nginx-proxy jwilder/nginx-proxy 80
Nginx web nginx
MariaDB db mariadb 3306
PHP-FPM 5.6 / 7.0 / 7.1 php blauerberg/drupal-php
mailhog mailhog mailhog/mailhog 8025 (HTTP server)

動作環境

Getting started

コンテナーを起動する

初めにレポジトリをクローンします。

$ git clone https://github.com/blauerberg/dropfabrik.git
$ cd dropfabrik

次にDrupalのソースコードをマウントするためのディレクトリを作成します。 デフォルトの設定では、ホストマシンの volumes/drupal をコンテナーのデータボリュームとしてマウントします。

$ mkdir -p volumes/drupal

Drupalのソースコードをダウンロードして展開します。

# Note: replace "X.Y.Z" in below to  Drupal's version you'd like to use.
$ curl https://ftp.drupal.org/files/projects/drupal-X.Y.Z.tar.gz | tar zx --strip=1 -C volumes/drupal

macOSを使っている場合、パフォーマンスの問題 を回避するために docker-sync を利用することを強く推奨します。 Use docker-sync を参照してください。

コンテナーを生成して起動します。

$ docker-compose up -d

ホストマシンがLinuxの場合は、ディレクトリの権限を修正する必要があります。

$ docker-compose exec php chown -R www-data:www-data /var/www/html/sites/default

Drupalにアクセスします。

$ open http://localhost # もしくはブラウザで http://localhost へアクセス

Drupalのインストール

データベースの認証情報は docker-compose.override.yml で設定されています。 デフォルト値は以下になります。

  • Database Name: drupal
  • Username: drupal
  • Password: drupal

詳細については https://hub.docker.com/_/mariadb/ の "Environment Variables" を参照してください。

このコンテナーセットではnginx、mariadb、php-fpmは全て別々のコンテナーで動作します。 そのため、インストール時にデータベースサーバーのホスト名に localhost ではなく db を指定する必要があります。

ブラウザからウィザードでインストールする代わりに、以下のようにDrushを使ってインストールすることもできます。

$ docker-compose exec php drush -y --root="/var/www/html" site-install standard --site-name="Drupal on Docker" --account-name="drupal" --account-pass="drupal" --db-url="mysql://drupal:drupal@db/drupal" --locale=ja
# Drupal 8の場合は以下も実行
$ docker-compose exec php drush -y config-set system.theme admin bartik

コンテナを停止する

$ docker-compose stop

Other tips

コンテナの内部にアクセスする

sshではなく docker-compose exec を使いましょう。

$ docker-compose exec {Service name} /bin/bash
# ex. docker-compose exec php /bin/bash

Drushを使う

Drushはphpコンテナーにインストールされています。

$ docker-compose exec php drush st

既存のサイトのデータベースをリストアする

gzipで圧縮されたSQLのダンプファイルを initdb.sql.gz という名前で配置し、docker-compose.override.yml の以下の行のコメントアウトを解除してください。 コンテナの生成時に一度だけこのファイルがロードされ、データベースが復元されます。

- ./initdb.sql.gz:/docker-entrypoint-initdb.d/initdb.sql.gz

データベースに接続する

Drush経由で接続する:

$ docker-compose exec php drush sql-cli

データベースコンテナーは 127.0.0.1上でport 3306をlistenします。そのため、MysqlWorkbenchSequel Pro のようなホストOS上で動作するGUIアプリケーションからコンテナー内のデータベースに接続することができます。

docker-sync を使う

macOSを使っている場合、パフォーマンスの問題 を回避するために docker-sync を利用することを強く推奨します。インストール方法は docker-sync.io を参照してください。

また、docker-sync を使う場合は docker-compose.override.yml を少し書き換える必要があります。

  • volumes_from ブロックをコメントアウトする (2箇所):
# - ./volumes/drupal:/var/www/html:cached
  • drupal_source ブロックのコメントアウトを解除する (2箇所):
# Replace volume to this to use docker-sync for mac OS users to resolve performance issue.
# See also: https://github.com/docker/for-mac/issues/77
- drupal_source:/var/www/html:rw
  • 最下部にある volumes ブロックのコメントアウトを解除する
volumes:
  drupal_source:
    external: true

docker-sync コマンドで同期を開始します。

$ docker-sync start

最後に新しいシェルを立ち上げてコンテナーを起動します。

$ docker-compose up -d

もしくは、docker-sync startdocker-compose up を同時に実行することもできます。

$ docker-sync-stack start

詳細は https://github.com/EugenMayer/docker-sync/wiki を参照してください。

Production環境へのデプロイ (example)

このコンテナーセットは(例えばAmazon EC2のような)Production環境へデプロイすることも出来ます。 例えば、Amazon EC2へのデプロイは次のように行います。

まず、Amazon EC2にDocker engineを作成します。

$ docker-machine create --driver amazonec2 --amazonec2-instance-type t2.large --amazonec2-region ap-northeast-1 --amazonec2-zone c dropfabrik

Note: デフォルトでは docker-machine というセキュリティーグループが使われますが、このグループは全てのHTTP通信を拒否します。そのため、セキュリティグループの設定を変更しHTTP通信を許可するようにしてください。

作成したDocker engineを使うために環境変数を設定します。

eval $(docker-machine env dropfabrik)

次に、Drupalのソースコードとデータベースのダンプを配置します。

$ git clone https://github.com/blauerberg/dropfabrik.git

# Drupalのソースコードをダウンロード
$ mkdir volumes
$ git clone {YOUR_GIT_REPO_URI} volumes/drupal
# 既存のサイトのデータベースのダンプを mysql/initdb.sql.gz という名前でコピーする。
$ cp /some/path/your_site_db.sql.gz mysql/initdb.sql.gz

もしくは、新しいサイトを立ち上げるためにデフォルトのDrupalのソースコードをダウンロードします。

$ mkdir -p volumes/drupal
$ curl https://ftp.drupal.org/files/projects/drupal-X.Y.Z.tar.gz | tar zx --strip=1 -C volumes/drupal
# 英語以外の言語でインストールを行いたい場合は、 sites/default/files/translations ディレクトリを作成します。
$ mkdir -p volumes/drupal/sites/default/files/translations

最後にイメージを生成してデプロイします。

$ docker-compose -f docker-compose.yml -f docker-compose.production.yml up --build

Note: Note: docker-compose.production.yml はシンプルなユースケース向けのサンプルです。セキュリティなどの設定は必要に応じて変更してください。

Supporting Organizations