© satoshi kino , ANNAI LLC
DRUPALをCLOUDで動かそう
Satoshi Kino (d.o name as qchan)
satoshi.kino
http://an-nai.jp
1
© satoshi kino , ANNAI LLC
•紀野 惠 ( Satoshi Kino)
• ANNAI LLC, ㈱ジオどす 代表
•Drupal User Groupgroups.drupal.org/japan Co-Manager
•DrupalCafe (毎月開催) Organizer
• KansaiOpenForumOpenSourceConference Kyoto 実行委員
2
© satoshi kino , ANNAI LLC
Drupalって?
オープンソースCMS(コンテンツ・マネージメント・システム)
と思われていますが、、、
3
© satoshi kino , ANNAI LLC
Drupalって?
Drupalは、オリジナルのCMSを作るフレームワークと考えてください。
既存のCMSパッケージを導入するつもりでいると、確実に裏切られます。
管理画面からも制作可能な開発ツールと考えた方がしっくりきます。
4
© satoshi kino , ANNAI LLC
Drupalの特徴
• オープンソースであること
• 拡張性を優先したフレームワーク志向であること
• デザインの自由度が高い
• 先進性
• スケーラビリティ
• 巨大なコミュニティに支えられていること
5
© satoshi kino , ANNAI LLC
汎用性の高いCMS
• 基本機能は抑えて、ミニマルなコアパッケージ
• インストール直後はほぼ何も出来ないくらいの印象
• 20,000を超えるモジュール群
• 拡張性を再優先して、いかようにでも形が変えられるのでカスタマイズの要望に合わせやすい
6
© satoshi kino , ANNAI LLC
特化型CMSではない強み
• 特化型CMSには不可能な合わせ技も簡単
• SNS + ECommerce
• E-Learning + Blogポータル
• キャンペーンサイト + CRM
• brochureサイト + プロジェクト管理
• などなどすべてはアイデア次第です
7
© satoshi kino , ANNAI LLC
「Drupal」が得意なジャンルは?
複雑な内部構造と仕様を持つシステムが得意
特に、政府・自治体・大学・グローバル企業でのシェアが高い
8
© satoshi kino , ANNAI LLC
高等教育機関でのシェア26% !
acquia.com9
© satoshi kino , ANNAI LLC
政府・自治体システムシェア 24% !!
acquia.com10
© satoshi kino , ANNAI LLC
アメリカ政府 White House
11
© satoshi kino , ANNAI LLC
米国 オープンデータ・ポータル
12
© satoshi kino , ANNAI LLC
英国 オープンデータポータル
13
© satoshi kino , ANNAI LLC
Code For America 世界銀行がバックアップしているハッカソンポータル
14
© satoshi kino , ANNAI LLC
アメリカ合衆国商務省
15
© satoshi kino , ANNAI LLC
フランス政府・ポータル
16
© satoshi kino , ANNAI LLC
Johnson & Johnson
17
© satoshi kino , ANNAI LLC
Pfizer製薬
18
© satoshi kino , ANNAI LLC
Sony Music Entertainment
19
© satoshi kino , ANNAI LLC
グラミー賞20
© satoshi kino , ANNAI LLC
The Linux Foundation
21
© satoshi kino , ANNAI LLC
ハーバード大学発、Drupal Distribution
22
© satoshi kino , ANNAI LLC
Ubuntu23
© satoshi kino , ANNAI LLC
Web担当者Forum
24
© satoshi kino , ANNAI LLC
Kansai Open Forum
25
© satoshi kino , ANNAI LLC
Cloud ?
Drupalは規模の大きな多言語・グローバルサイトが多いためホスティングとしてのクラウド環境はすでに一般的です
26
© satoshi kino , ANNAI LLC
Drupal on Engine Yard
Ruby on Rails、Rails Likeなフレームワーク向けのPaaSとして有名なEngine Yard
CMS由来のフレームワーク Drupalの情報は英語でもほとんど出回っていません
27
© satoshi kino , ANNAI LLC
Engine Yardを使ったDeploy例
Feature(git)
Deploy(Engine Yard)
28
© satoshi kino , ANNAI LLC
Feature ?
Drupalでの大きな制作案件は、共同での開発が多くなってきました。現行D7ではコンフィグ情報がDBに入ることもあって、Featureという単位でのコード(モジュール)のやり取りがCI手法の主流です。2014リリース予定のDrupal8からはすべてのコンフィグがファイル化され様変わりします。より一般的なCIフローになっていくでしょう。
29
© satoshi kino , ANNAI LLC
簡易版をデモ
Code(git)
Data(drush)
Deploy(Engine Yard)
30
© satoshi kino , ANNAI LLC
Demo
今回はFeatureを使わない簡易的な方法でのデモをお見せします。Data(SQL)を別途Drushを使ってEngine YardにDeployする方法です。
31
© satoshi kino , ANNAI LLC
注意
Drupalコミュニティとしては、Fork, Hackはオススメできません。コミュニティあってのDrupalです。コミュニティサポートを受け続ける前提で設計しましょう。
Engine YardのDeploy機能を初期インストールにだけ利用する方法は採用しない
32
© satoshi kino , ANNAI LLC
•準備
•ローカル開発環境Drupal(VM,MAMP等)
• Docker でもVagrantでも
• git リモートリポジトリ(Github, Bitbucket等)
• 現状、EYへ継続的なDeployをするためにはDrupal.orgのrepositoryは使えない別途リモート リポジトリが必要
• Engine Yard アカウント
• チャットでの提案型のヘルプは驚きがありますよ
• 表示パフォーマンスもかなりよく、スケールも非常に簡単です33
© satoshi kino , ANNAI LLC
手順
# Ignore configuration files that may contain sensitive information.sites/*/settings*.php
# Ignore paths that contain user-generated content.sites/*/filessites/*/private
☆ drupal インストールフォルダ内の.gitignoreを編集し、 sites/以下のファイルもgit管理下に置く* Drushでのコア・アップデート時にoverrideされるのでバックアップを
34
© satoshi kino , ANNAI LLC
手順
Engine Yardはリポジトリからのデプロイの度に、インストールフォルダごとのSnapshotを取って、Webサーバーのドキュメントルートからシンボリックリンクを付け替えています。接続情報などを外部化しておくと、Deployごとの書き換えが不要になります。
しかし、settings.phpを除くsites以下は全て同期させないとモジュールやテーマ、ファイルなど開発中のDrupal全体としてDeployできなくなるので注意が必要です。
☆ インストールフォルダに Engine Yardのデプロイ・フック・ファイル deploy/before_bundle.rb を設置DB接続情報などを外部にコピーしシンボリックリンクを貼る
35
© satoshi kino , ANNAI LLC
deploy/before_bundle.rb をinstall directoryへ
# link settings.phpif !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"
36
© satoshi kino , ANNAI LLC
手順
☆ EnginYardからアクセスできるGit repositoryにローカル開発環境などからPush
37
© satoshi kino , ANNAI LLC
手順
☆ Engine Yard にDeploy!!
あとちょっとです。
38
© satoshi kino , ANNAI LLC
手順
$databases = array ( 'default' => array ( 'default' => array ( 'database' => ‘{your_db}’, 'username' => ‘{your_dbname}’, 'password' => ‘{your_password}’, 'host' => ‘{your_host}’, 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ),);
☆Engine YardへSSHでログインし、移動させたsettings.phpにDB情報を追記
DB接続情報は/data/{your_app}/shared/config/database.yml
に記載されています。
39
© satoshi kino , ANNAI LLC
手順
以後、このSettings.phpはローカルやリモート・リポジトリの影響を受けません。
*EY, EnvironmentのStop、boot時にHostが変更されるので手動での書き換えが必要*環境毎にsettings.phpを読み分けるスクリプトを作る方法もあり
40
© satoshi kino , ANNAI LLC
手順
$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' => '', ), ),);
☆ (別)settings.phpに環境変数から読み込ませる* これをほどこすと、EnviromnetのStop, Bootにかかわらず使えるのだが、
テストではDrushと相性が悪かった。今後に期待。
41
© satoshi kino , ANNAI LLC
手順
☆ Drupal 初期インストールの場合settings.phpが既に設置されているので、初回アクセス時にドキュメントルートを見に行くとインストーラーのエラーがでます。
http://{your_domein}/install.php
へアクセスし、インストールを進めてください。
42
© satoshi kino , ANNAI LLC
手順
ここが、Drupal, Wordpress、Ec-CubeなどCMS的なアプローチを採用しているプロダクトに特有のところ。ブラウザ上から行った開発・設定操作がDBへ入るので、コードだけで完結しない。しかし、DrupalはWPと違ってドメイン情報などはDBに持たないためポータビリティの問題は少ない。次期D8では設定がコード化され大きく変わります。
☆ 開発中アプリをDeployする場合 DBのシンクロが必要
43
© satoshi kino , ANNAI LLC
手順
$ sed -i '1i export PATH="$HOME/.composer/vendor/bin:$PATH"' $HOME/.bashrc$ source ~/.bashrc$ composer global require drush/drush:6.*
☆ DrushをEngine Yard側にもインストールしておくと、 DBのSyncが一発
Drush とは Drupal shell という意味のコマンドラインツールで、Drupalの開発に欠かせないものです。EngineYardはcomposerが使えるのでインストールは簡単です。
https://github.com/drush-ops/drush
44
© satoshi kino , ANNAI LLC
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' => '◯◯◯', ), ), ),
);
☆ Drush Aliasを設定し、Engine Yard上Drupalの操作を遠隔から行う。http://drush.ws/examples/example.aliases.drushrc.phpDrushを使うと、複数のアプリ情報を管理できます。サイト・サーバー間の情報のやり取りも簡単になります。
45
© satoshi kino , ANNAI LLC
手順
drush sql-sync @self @ey.EY
☆ DBデータのSynch
ローカルとEngine YardのDB Syncこれだけ!!
46
© satoshi kino , ANNAI LLC
番外
drush rsync @self @ey.EY
☆ Drushでのコード・デプロイも可能2行のコマンドでサイト一式のデプロイ完了コンテンツだけを移行したい場合は別の方法があります。
ちなみに、これでsettings.php抜きのコード・デプロイになります。
47
© satoshi kino , ANNAI LLC
次は、海外で伸びているDrupal専用Passの現状がどうなっているかを見てみましょう
* Pantheon https://www.getpantheon.com/
* Acquia Cloud http://www.acquia.com/products-services/acquia-cloud
48
© satoshi kino , ANNAI LLC
毎月、DrupalCafeを開催しています。ぜひ来てください。
49
2014 ANNAI© satoshi kino , ANNAI LLC
Japan Users Groupgroups.drupal.org/japan
50
© satoshi kino , ANNAI LLC
4/12(土)にはDrupalCamp in Japan KYOTOを予定しています。
51
© satoshi kino , ANNAI LLC
ありがとうございました。
Satoshi Kino (d.o name as qchan)
satoshi.kino
http://an-nai.jp
52