DRUPALをCLOUDで動かそう
Satoshi Kino (d.o name as qchan)
http://an-nai.jp
satoshi.kino

© satoshi kino , ANNAI LLC
1
• 紀野

惠 ( Satoshi Kino)

• ANNAI

LLC, ㈱ジオどす 代表

• Drupal

User Group
groups.drupal.org/japan  Co-Manager

• DrupalCafe

(毎月開催) Organizer

• KansaiOpenForum

OpenSourceConference Kyoto 実行委員

© satoshi kino , ANNAI LLC
2
Drupalって? 

オープンソースCMS(コンテンツ・マネージメント・システム)

と思われていますが、、、

© satoshi kino , ANNAI LLC
3
Drupalって? 
Drupalは、オリジナルのCMSを作るフレ
ームワークと考えてください。
既存のCMSパッケージを導入するつもり
でいると、確実に裏切られます。
管理画面からも制作可能な開発ツールと
考えた方がしっくりきます。

© satoshi kino , ANNAI LLC
4
Drupalの特徴

•
•
•
•
•
•

オープンソースであること
拡張性を優先したフレームワーク志向であること
デザインの自由度が高い
先進性
スケーラビリティ
巨大なコミュニティに支えられていること

© satoshi kino , ANNAI LLC
5
汎用性の高いCMS
•

基本機能は抑えて、ミニマルなコアパッケージ

•

•
•

インストール直後はほぼ何も出来ないくらいの印象

20,000を超えるモジュール群
拡張性を再優先して、いかようにでも形が変えられるのでカスタマイズ
の要望に合わせやすい

© satoshi kino , ANNAI LLC
6
特化型CMSではない強み
•

特化型CMSには不可能な合わせ技も簡単

•

SNS + ECommerce

•

E-Learning + Blogポータル

•

キャンペーンサイト + CRM

•

brochureサイト + プロジェクト管理

•

などなどすべてはアイデア次第です

© satoshi kino , ANNAI LLC
7
「Drupal」が得意なジャンルは?
複雑な内部構造と仕様を持つシステムが得意
特に、政府・自治体・大学・グローバル企業
でのシェアが高い

© satoshi kino , ANNAI LLC
8
高等教育機関でのシェア26% !

© satoshi kino , ANNAI LLC

acquia.com
9
政府・自治体システムシェア 24% !!

© satoshi kino , ANNAI LLC

acquia.com
10
アメリカ政府 White House

© satoshi kino , ANNAI LLC
11
米国 オープンデータ・ポータル
© satoshi kino , ANNAI LLC
12
英国 オープンデータポータル
© satoshi kino , ANNAI LLC
13
Code For America   
世界銀行がバックアップしているハッカソンポータル

© satoshi kino , ANNAI LLC
14
アメリカ合衆国商務省

© satoshi kino , ANNAI LLC
15
フランス政府・ポータル
© satoshi kino , ANNAI LLC
16
Johnson & Johnson

© satoshi kino , ANNAI LLC
17
Pfizer製薬

© satoshi kino , ANNAI LLC
18
Sony Music Entertainment
© satoshi kino , ANNAI LLC
19
グラミー賞
© satoshi kino , ANNAI LLC
20
The Linux Foundation

© satoshi kino , ANNAI LLC
21
ハーバード大学発、Drupal Distribution

© satoshi kino , ANNAI LLC
22
Ubuntu
© satoshi kino , ANNAI LLC
23
Web担当者Forum
© satoshi kino , ANNAI LLC
24
Kansai Open Forum
© satoshi kino , ANNAI LLC
25
Cloud ?

Drupalは規模の大きな多言語・グローバルサイトが多いため
ホスティングとしてのクラウド環境はすでに一般的です

© satoshi kino , ANNAI LLC
26
Drupal on Engine Yard
Ruby on Rails、Rails Likeなフレームワーク向けのPaaS
として有名なEngine Yard

CMS由来のフレームワーク Drupalの情報は英語でも
ほとんど出回っていません

© satoshi kino , ANNAI LLC
27
Deploy
(Engine Yard)

Feature(git)

Engine Yardを使ったDeploy例
© satoshi kino , ANNAI LLC
28
Feature ?
Drupalでの大きな制作案件は、共同での開発が多くなってきました。
現行D7ではコンフィグ情報がDBに入ることもあって、Featureという単位で
のコード(モジュール)のやり取りがCI手法の主流です。
2014リリース予定のDrupal8からはすべてのコンフィグがファイル化され様
変わりします。
より一般的なCIフローになっていくでしょう。

© satoshi kino , ANNAI LLC
29
Deploy
(Engine Yard)

Data(drush)

Code(git)

簡易版をデモ
© satoshi kino , ANNAI LLC
30
Demo

今回はFeatureを使わない簡易的な方法でのデモをお見せします。
Data(SQL)を別途Drushを使ってEngine YardにDeployする方法です。

© satoshi kino , ANNAI LLC
31
注意

Drupalコミュニティとしては、Fork, Hackはオススメできません。
コミュニティあってのDrupalです。
コミュニティサポートを受け続ける前提で設計しましょう。

Engine YardのDeploy機能を初期インストールにだけ利用する方法は採用しない

© satoshi kino , ANNAI LLC
32
• 準備
• ローカル開発環境Drupal(VM,MAMP等)
•

Docker でもVagrantでも

• git
•

リモートリポジトリ(Github, Bitbucket等)

現状、EYへ継続的なDeployをするためにはDrupal.orgのrepositoryは使えない
別途リモート リポジトリが必要

• Engine Yard

アカウント

•

チャットでの提案型のヘルプは驚きがありますよ

•

表示パフォーマンスもかなりよく、スケールも非常に簡単です

© satoshi kino , ANNAI LLC
33
手順 
☆ drupal インストールフォルダ内の.gitignoreを編集し、
  sites/以下のファイルもgit管理下に置く
* Drushでのコア・アップデート時にoverrideされるのでバックアップを

# Ignore configuration files that may contain sensitive information.
sites/*/settings*.php
# Ignore paths that contain user-generated content.
sites/*/files
sites/*/private

© satoshi kino , ANNAI LLC
34
手順 
☆ インストールフォルダに Engine Yardのデプロイ・フック・
ファイル deploy/before_bundle.rb を設置
DB接続情報などを外部にコピーしシンボリックリンクを貼る

Engine Yardはリポジトリからのデプロイの度に、インストールフォルダごとのSnapshot
を取って、Webサーバーのドキュメントルートからシンボリックリンクを付け替えて
います。
接続情報などを外部化しておくと、Deployごとの書き換えが不要になります。
しかし、settings.phpを除くsites以下は全て同期させないとモジュールやテーマ、ファイ
ルなど開発中のDrupal全体としてDeployできなくなるので注意が必要です。

© satoshi kino , ANNAI LLC
35
deploy/before_bundle.rb

をinstall directoryへ

# link settings.php
if !File.exist?(config.shared_path + "/sites/default/settings.php")
 then
 run "mkdir -p #{config.shared_path}/sites/default && cp -a #{config.release_path}/sites/default/
settings.php #{config.shared_path}/sites/default/settings.php"
end
run "rm -Rf #{config.release_path}/sites/default/settings.php && ln -s #{config.shared_path}/sites/
default/settings.php ./sites/default/settings.php"

© satoshi kino , ANNAI LLC
36
手順 

☆ EnginYardからアクセスできるGit repositoryにローカル開発環
境などからPush

© satoshi kino , ANNAI LLC
37
手順 

☆ Engine Yard にDeploy!!

あとちょっとです。

© satoshi kino , ANNAI LLC
38
手順 
☆Engine YardへSSHでログインし、移動させたsettings.phpにDB情報を追記
DB接続情報は
/data/{your_app}/shared/config/database.yml
に記載されています。
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => ‘{your_db}’,
'username' => ‘{your_dbname}’,
'password' => ‘{your_password}’,
'host' => ‘{your_host}’,
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);

© satoshi kino , ANNAI LLC
39
手順 

以後、このSettings.phpはローカルやリモート・リポジトリの影響を受けません。
*EY, EnvironmentのStop、boot時にHostが変更されるので手動での書き換えが必要
*環境毎にsettings.phpを読み分けるスクリプトを作る方法もあり

© satoshi kino , ANNAI LLC
40
手順 
☆ (別)settings.phpに環境変数から読み込ませる
* これをほどこすと、EnviromnetのStop, Bootにかかわらず使えるのだが、
  テストではDrushと相性が悪かった。今後に期待。

$databases = array (
'default' =>
array (
'default' =>
array (
'database' => $_SERVER["DB_NAME"],
'username' => $_SERVER["DB_USER"],
'password' => $_SERVER["DB_PASS"],
'host' => $_SERVER["DB_HOST"],
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
© satoshi kino , ANNAI LLC
41
手順 

☆ Drupal 初期インストールの場合
settings.phpが既に設置されているので、初回アクセス時に
ドキュメントルートを見に行くとインストーラーのエラーがで
ます。
http://{your_domein}/install.php
へアクセスし、インストールを進めてください。

© satoshi kino , ANNAI LLC
42
手順 
☆ 開発中アプリをDeployする場合
  DBのシンクロが必要

ここが、Drupal, Wordpress、Ec-CubeなどCMS的なアプローチを採用しているプロダクトに特有のところ。
ブラウザ上から行った開発・設定操作がDBへ入るので、コードだけで完結しない。
しかし、DrupalはWPと違ってドメイン情報などはDBに持たないためポータビリティの問題は少ない。
次期D8では設定がコード化され大きく変わります。

© satoshi kino , ANNAI LLC
43
手順 
☆ DrushをEngine Yard側にもインストールしておくと、
DBのSyncが一発
Drush とは Drupal shell という意味のコマンドラインツールで、Drupalの開発に欠かせないものです。
EngineYardはcomposerが使えるのでインストールは簡単です。

https://github.com/drush-ops/drush
$ sed -i '1i export PATH="$HOME/.composer/vendor/bin:$PATH"' $HOME/.bashrc
$ source ~/.bashrc
$ composer global require drush/drush:6.*

© satoshi kino , ANNAI LLC
44
☆ Drush Aliasを設定し、Engine Yard上Drupalの操作を遠隔から行う。
http://drush.ws/examples/example.aliases.drushrc.php
Drushを使うと、複数のアプリ情報を管理できます。
サイト・サーバー間の情報のやり取りも簡単になります。

ey.aliases.drushrc.php
<?php
$aliases['EY'] = array(
'uri' => '⃝⃝⃝',
'root' => '⃝⃝⃝',
'db-url' => '⃝⃝⃝',
'remote-host' => '⃝⃝⃝',
'remote-user' => '⃝⃝⃝',
'os' => 'Linux',
'databases' =>
array (
'default' =>
array (
'default' =>
array (
'driver' => '⃝⃝⃝',
'username' => '⃝⃝⃝',
'password' => '⃝⃝⃝',
'port' => '',
'host' => '⃝⃝⃝',
'database' => '⃝⃝⃝',
),
),
),
);
© satoshi kino , ANNAI LLC
45
手順 
☆ DBデータのSynch

ローカルとEngine YardのDB Sync
これだけ!!
drush sql-sync @self @ey.EY

© satoshi kino , ANNAI LLC
46
番外
☆ Drushでのコード・デプロイも可能
2行のコマンドでサイト一式のデプロイ完了
コンテンツだけを移行したい場合は別の方法があります。

drush rsync @self @ey.EY

ちなみに、これでsettings.php抜きのコード・
デプロイになります。

© satoshi kino , ANNAI LLC
47
次は、海外で伸びているDrupal専用Passの現状がどうなっているかを見てみま
しょう
* Pantheon https://www.getpantheon.com/
* Acquia Cloud http://www.acquia.com/products-services/acquia-cloud

© satoshi kino , ANNAI LLC
48
毎月、DrupalCafeを開催しています。
ぜひ来てください。

© satoshi kino , ANNAI LLC
49
Japan Users Group
groups.drupal.org/japan

© satoshi kino , ANNAI LLC

2014

ANNAI
50
4/12(土)にはDrupalCamp in Japan KYOTOを予定しています。

© satoshi kino , ANNAI LLC
51
ありがとうございました。

Satoshi Kino (d.o name as qchan)
http://an-nai.jp
satoshi.kino

© satoshi kino , ANNAI LLC
52

Drupal deployment trial on Engine Yard