LaradockでDrupal8を動かしてみる

# はじめに
Laravelの開発に限らず、LAMP/LEMP環境をサクッと作りたい時に[Laradock](https://laradock.io)の使い勝手がすごく良いのでオススメです。
今回はLaradockでDrupal8を動かしてみるよ！

## Laradockとは
Homesteadに代わるLaravel開発用のDockerイメージ群です。Docker Composeで管理されているので、必要なものだけ選んで起動します。

Laravelにありがちな｢全部用意しといた｣感がここでも発揮されています。([後述するイメージ一覧](#利用可能なイメージ一覧)参照)
とにかく至れり尽くせりな割に｢Composer入れといたからLaravelのセットアップは自分でやってね！｣というのがちょっと不思議ですが…おかげで他のPHPフレームワークやWordpress, Drupal等のCMSでもイイ感じに使えますよ。

詳しく知りたい人は[公式のイントロダクション](http://laradock.io/introduction/)を読んでね！

## 対象
- 開発環境のセットアップに頭を使いたくないひと ←だいじ
- とりあえずDockerベースのLAMP/LEMP環境がほしいひと
- Drupalに興味があるひと

## 環境
 - ホストにGit,Dockerがインストールされていること
 - もちろんWindowsでもMacでもOKだよ！ 

## やること
 - サクッとLEMP開発環境を用意して、Drupal8を動かす
 - Laradockが用意してくれているイメージの中から、PHP-FPM・Nginx・MySQLだけ使います。
  - なぜか手元の端末だとMariaDBだけコケるので、とりあえずMySQLで。

# やってみよう
## Laradockの準備
```
$ mkdir drupal
$ cd drupal
$ mkdir public # Drupalの配置先
$ git clone https://github.com/LaraDock/laradock.git laradock
$ cd laradock
$ cp env-example .env
```

```drupal/laradock/.env
# 先程作ったDrupalの配置先を
- APPLICATION=../
+ APPLICATION=../public

# 必要に応じてDBの永続化データの保存先を変更しておく
- DATA_SAVE_PATH=~/.laradock/data
+ DATA_SAVE_PATH=~/.laradock/data/drupal
```

```drupal/laradock/docker-compose.yml
### Applications Code Container #############################

    applications:
      image: tianon/true
      volumes:
        # ディレクトリのマウント先を変更
-        - ${APPLICATION}:/var/www
+        - ${APPLICATION}:/var/www/public
```

NginxとMySQLのコンテナを起動します。applications,php-fpm,workspaceは自動的に立ち上がるので指定しなくてもOK。
初回はビルドの関係で少し時間がかかります。

```
$ docker-compose up -d nginx mysql
```


## Drupalの準備
publicディレクトリにDrupalのソースを配置します。バージョンは適宜読み替えて下さい。
ホスト側でDrush/Drupal Consoleを使っても、[Drupal公式](https://www.drupal.org/download)からダウンロードして展開しても、コンテナに入ってComposer経由でも構いません。お好きなようにどうぞ。


### 備考: コンテナのDrushを有効化、Drush経由で配置
サクッと動かすだけなら必要ないんですが、開発を進めていくと結局使う事になりそうなので。

```drupal/laradock/.env
- WORKSPACE_INSTALL_DRUSH=false
+ WORKSPACE_INSTALL_DRUSH=true
```
```
$ docker-compose down
$ docker-compose build workspace
$ docker-compose up -d nginx mysql
$ docker-compose exec workspace bash
root@containerid:/var/www# drush dl drupal-8
root@containerid:/var/www# shopt -s dotglob
root@containerid:/var/www# mv drupal-8.3.5/* public
root@containerid:/var/www# rm -rf drupal-8.3.5
root@containerid:/var/www# exit
```
### 備考: コンテナに入ってソースをダウンロード、配置

```
$ docker-compose exec workspace bash
root@containerid:/var/www# curl -O https://ftp.drupal.org/files/projects/drupal-8.3.5.tar.gz
root@containerid:/var/www# tar -xvzf drupal-8.3.5.tar.gz
root@containerid:/var/www# shopt -s dotglob
root@containerid:/var/www# cp -r drupal-8.3.5/* public
root@containerid:/var/www# rm -rf drupal-8.3.5.tar.gz drupal-8.3.5
root@containerid:/var/www# exit
```

### 備考: Composer経由で配置
```
$ docker-compose exec workspace bash
root@containerid:/var/www# composer create-project drupal-composer/drupal-project:8.x-dev public  --stability dev --no-interaction
root@containerid:/var/www# exit
```

Composerで配置した場合/public/webにDrupalのソースがインストールされるので、NginxのRootを変更します。

``` laradock/nginx/nginx.conf
# 変更後、docker-compose restart nginxを忘れずに。
- root /var/www/public;
+ root /var/www/public/web;
```


## Drupalのセットアップ
http://localhost からウィザードに従ってセットアップします。
OPcacheのアラートは無視して構いません。

### データベース設定の初期値について
| 項目| 初期値|
|:-----------------|:------------------|
|データベース名|default|
|データベースのユーザー名|default|
|データベースのパスワード|secret|
|高度なオプション>ホスト|mysql|

これらは.envで定義されているので、必要があれば適宜書き換えてください。

```drupal/laradock/.env
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
```
### コンテナのDrushからインストールする場合
コンテナのDrushを有効化してある場合はこちらでも。

```
$ docker-compose exec workspace bash
root@containerid:/var/www# cd public
root@containerid:/var/www/public# drush si --db-url=mysql://default:secret@mysql:3306/default
You are about to CREATE the 'default' database. Do you want to continue? (y/n): y
Starting Drupal installation. This takes a while. Consider using the --notify global option. 
Installation complete.  User name: admin  User password: PASSWORD
Congratulations, you installed Drupal!
```

# 利用可能なイメージ一覧
## docker-compose up -d IMAGEで即利用可能なイメージ一覧
<dl>
<dt>Database Engines</dt>
<dd>MySQL, MariaDB, Percona, MongoDB, Neo4j, RethinkDB, MSSQL, PostgreSQL, Postgres-PostGIS</dd>
<dt>Database Management</dt>
<dd>PhpMyAdmin, Adminer, PgAdmin</dd>
<dt>Cache Engines</dt>
<dd>Redis, Memcached, Aerospike</dd>
<dt>PHP Servers</dt>
<dd>NGINX, Apache2, Caddy</dd>
<dt>PHP Compilers</dt>
<dd>PHP FPM, HHVM</dd>
<dt>Message Queueing</dt>
<dd>Beanstalkd, RabbitMQ, PHP Worker</dd>
<dt>Queueing Management</dt>
<dd>Beanstalkd Console, RabbitMQ Console</dd>
<dt>Random Tools</dt>
<dd>HAProxy, Certbot, Blackfire, Selenium, Jenkins, ElasticSearch, Kibana, Mailhog, Minio, Varnish, Swoole, Laravel Echo , and more</dd>
</dl>

## Workspaceイメージ内であらかじめ用意されているツール群
<dl>
<dt>Workspace Image Tools</dt>
<dd>PHP CLI, Composer, Git, Linuxbrew, Node, V8JS, Gulp, SQLite, xDebug, Envoy, Deployer, Vim, Yarn, SOAP, Drush, and more</dd>
</dl>

ただし一部のツールは.envのパラメータを変更したのち、Workspaceイメージを再度ビルドする必要があります。ご注意を！


```&nbsp;.env
WORKSPACE_INSTALL_XDEBUG=false
WORKSPACE_INSTALL_SOAP=false
WORKSPACE_INSTALL_MONGO=false
WORKSPACE_INSTALL_MSSQL=false
WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_YARN=false
WORKSPACE_INSTALL_DRUSH=false
WORKSPACE_INSTALL_AEROSPIKE=false
WORKSPACE_INSTALL_V8JS=false
WORKSPACE_COMPOSER_GLOBAL_INSTALL=false
WORKSPACE_INSTALL_WORKSPACE_SSH=false
WORKSPACE_INSTALL_LARAVEL_ENVOY=false
WORKSPACE_INSTALL_LARAVEL_INSTALLER=false
WORKSPACE_INSTALL_DEPLOYER=false
WORKSPACE_INSTALL_LINUXBREW=false
WORKSPACE_INSTALL_MC=false
WORKSPACE_INSTALL_IMAGE_OPTIMIZERS=false
```