Plone talk 201308_terada

58
©2013 CMScom [email protected] Ploneを使った大規模環境でのCMSソリューション CMSコミュニケーションズ代表 / Advisory Board Member of Plone Foundation 寺田 学 [email protected] / [email protected] http://www.cmscom.jp 2013年8月7日 at Plone Talk 2013.08 オープンソースCMSを使った 大規模サイト構 築のノウハウをお伝えします

Transcript of Plone talk 201308_terada

Page 1: Plone talk 201308_terada

©2013 CMScom [email protected]

Ploneを使った大規模環境でのCMSソリューション

CMSコミュニケーションズ代表 / Advisory Board Member of Plone Foundation寺田 学 [email protected] / [email protected]

http://www.cmscom.jp2013年8月7日

at Plone Talk 2013.08

オープンソースCMSを使った大規模サイト構 築のノウハウをお伝えします

Page 2: Plone talk 201308_terada

1 最初に

©2013 CMScom [email protected]

大規模エンタープライズ

CMSとか言いますが・・・。

Page 3: Plone talk 201308_terada

1 最初に

©2013 CMScom [email protected]

どこが?どう使っている?

にお声たえしたいと思います。

Page 4: Plone talk 201308_terada

1 最初に

©2013 CMScom [email protected]

本日のテーマは

システム構築のパターン説明、指針解説

コンテンツ編集・承認を多人数でするための方策

などを、解説します。

Page 5: Plone talk 201308_terada

自己紹介

©2013 CMScom [email protected]

•寺田 学 @terapyon•Advisory Board Member of Plone Foundation•一般社団法人PyCon JP 代表理事•Ploneコアコミッター、Zopeコアコミッター•(株)CMSコミュニケーションズ代表 http://www.cmscom.jp•一橋大学大学院 社会学研究科 地球社会専攻 元客員准教授•Plone/Zopeの専業Webシステム構築・コンサルティング•大学や政府系サイトなどを手がけています•独自にWeb検索システムの構築もしています•書籍(共著)

2

Page 6: Plone talk 201308_terada

2 書籍紹介

©2013 CMScom [email protected]

4 Book多くのヒントが書かれています

Page 7: Plone talk 201308_terada

アジェンダ

©2013 CMScom [email protected]

•問題提起(大規模とは?)•システム構成•ユーザ認証、ワークフロー•改ざんを防ぐ方策•クラウド技術の活用

Page 8: Plone talk 201308_terada

3 問題提起

©2013 CMScom [email protected]

•大規模って何をさすの?•閲覧数がそれなりに多い•ユーザ人数が多い•データの量が多い•情報の承認フローを持ちたい•すぐにデータを反映

Page 9: Plone talk 201308_terada

3 問題提起

©2013 CMScom [email protected]

•その他にも•改ざんを防ぎたい •ユーザごとに表示内容を変えたい

Page 10: Plone talk 201308_terada

Plone (スタンドアローン)

1台の物理サーバ又はクラウドサーバ

4 システム構成

©2013 CMScom [email protected]

最小構成管理者

管理用アクセスパスワード必要

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

ZODB(データベースサーバ)

閲覧者

閲覧者

Page 11: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 12: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

ZODB(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)

Page 13: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

ZODB(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)

Plone (ZEOインスタンス)

Page 14: Plone talk 201308_terada

1台の物理サーバ又はクラウドサーバ

4 システム構成

©2013 CMScom [email protected]

よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

ZODB(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

1台の物理サーバ又はクラウドサーバ

1台の物理サーバ又はクラウドサーバ

Varnish (キャッシュサーバ)

Page 15: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

ZODB(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)

Page 16: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 17: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•Apache(Webサーバ)•HTTPリクエストを受け取るフロントサーバ

•Varnish(キャッシュサーバ)•コンテンツのページキャッシュ•HAProxy(ロードバランサ)•セッション機能付きロードバランサ

Page 18: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 19: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•MySQL/PostgreSQL(データベースサーバ)•FileStorage(Data.fs)の代わりに、RelStorageを使用し、RDBMSにコンテンツを保存

•Memcached•一時的なデータの保存

Page 20: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 21: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•外部SSO•シングルサインオンシステムとの連携•LDAP•ユーザ情報の一元化•人事データ等が別途管理されている場合

Page 22: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 23: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•部分的に置き換えも可能•Apache → nginx•Varnish → Squid / Apache•HAProxy → ロードバランサ•MySQL → NEO•LDAP → 独自認証システム

Page 24: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•キャッシュサーバ•画像/CSS/JavaScriptなどデータ•動的データ•キャッシュサーバのデータを更新•Purgeしたい

Page 25: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•実際問題どこまでやればいいの??•最終的には実際に使い始めないとどうなのかは分からないが・・。

Page 26: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•その他ポイント•zope.conf(buildout.cfg)出来ること•検討項目は?•単純に閲覧が多い?•更新が多い?•CPUコア数・メモリ量に応じた配分

Page 27: Plone talk 201308_terada

4 システム構成+α

©2013 CMScom [email protected]

•他の対策は?•ESIの活用•CDN(アカマイ/CloudFrontなど)使用•データベースの分割•ハードウエアの増強

Page 28: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•Plone 4以降•以前のバージョンに比べ早い•blob化 / Python2.6 or 2.7の活用•テンプレートの見直し

Page 29: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

•ちなみに、SSL対応したければ、フロントに立ててあるApacheで対応するだけ

•アプリケーションサーバには、内部アクセスとして、8080ポートなどで通信を行うので、従来通りとする

Page 30: Plone talk 201308_terada

4 システム構成

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

外部SSO認証サーバ

Page 31: Plone talk 201308_terada

4 システム構成(まとめ)

©2013 CMScom [email protected]

•実績のあるオープンソースアプリ活用•Plone自体がコミュニティーで支援•全世界のエンジニアで協力し問題点解決!!

Page 32: Plone talk 201308_terada

5 ユーザ認証・ワークフロー

©2013 CMScom [email protected]

•Ploneにはユーザ認証の仕組みがある

•Ploneにはワークフローの仕組みがある

Page 33: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•LDAPなど既存のディレクトリシステムとの連携が可能

•SQL等の外部DB連携によるユーザ認証も可能

•PAS(PluggableAuthService)と呼ばれる、アドオンの仕組みがある

Page 34: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•SSO(シングルサインオン)の対応も可能•多くの大学や組織が持っている、各種システムとの連携が出来る

Page 35: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•ユーザ認証は何のために行う?•コンテンツの編集作業•公開承認作業•システムの管理•閲覧管理•その他、何かの動作を許可する前提

Page 36: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•ログイン出来たら操作を許可?•どのようにログインユーザと操作を結びつけるのか?

Page 37: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•権限関係の関連キーワード•ユーザ•グループ•ロール(役割)•パーミッション(権限)•上記の4つの組み合わせにより操作許可

Page 38: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

パーミッションとロール

ユーザとロール

Page 39: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•権限関係の関連キーワード その2•ローカルロール•オブジェクト単位の共有設定•上位継承•ワークフローの状態(State)による条件•複数のワークフロー•コンテンツタイプごと/フォルダごと

Page 40: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

共有設定

Page 41: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•操作許可までの動き•ユーザはロールを持っている•ロールに応じたパーミッションがマッピングされ、操作の許可がされる•共有設定で指定のオブジェクトにロールが割り当てる• 例えば編集の際のパーミッション(Modify Portal Content)はEditorロールを持つユーザに許可

Page 42: Plone talk 201308_terada

5 ユーザ認証

©2013 CMScom [email protected]

•その他•複数の認証システムの組合せが可能•IPアドレスによるユーザ認証も可能

Page 43: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

•デフォルトで複数のワークフローがある•自由にカスタマイズが可能•独自のワークフローの記述が出来る•ZMI / XML / CSVなどで•コンテンツタイプごとに使用するワークフローが選択できる

Page 44: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

2段階承認の例

非表示中

内部承認待ち

最終承認待ち

公開中

内部公開中

提出

内部公開

公開

承認

状態(State): コンテンツの状態を表す

遷移(Transition): ワークフローの遷移を表す

Page 45: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

•状態(State)は、コンテンツの状態を表す•パーミッション(権限) - ロール(役割)のマッピングを上書きし、閲覧権限や編集権限などを状態によって変化させる

Page 46: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

2段階承認の例

非表示中

内部承認待ち

最終承認待ち

公開中

内部公開中

提出

内部公開

公開

承認

状態(State): コンテンツの状態を表す

遷移(Transition): ワークフローの遷移を表す

Page 47: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

•遷移(Transition)は、ワークフローの遷移を表す

•別の状態(State)に遷移させるもの•遷移の条件を以下の方法で決める•パーミッション(権限)•ロール(役割)•スクリプト(条件を記載したPython)

Page 48: Plone talk 201308_terada

5 ワークフロー

©2013 CMScom [email protected]

2段階承認の例

非表示中

内部承認待ち

最終承認待ち

公開中

内部公開中

提出

内部公開

公開

承認

状態(State): コンテンツの状態を表す

遷移(Transition): ワークフローの遷移を表す

Page 49: Plone talk 201308_terada

5 ユーザ認証・ワークフロー(まとめ)

©2013 CMScom [email protected]

•状態(State)と遷移(Transition)を理解すれば、ワークフローは作れる

•ユーザに操作を許可させるには、ユーザが持つロールを経由して行う

•認証と操作許可は完全に分離されている

Page 50: Plone talk 201308_terada

6 改ざんを防ぐ方策

©2013 CMScom [email protected]

•ログインアカウントをきっちり管理•定期的にパスワードを変更する•認証を外部にまかせて、信頼を担保(SSOなど)

Page 51: Plone talk 201308_terada

6 改ざんを防ぐ方策

©2013 CMScom [email protected]

•ログインさせない•指定のIPアドレスからのみ接続許可

•データベースを読み取り専用(リードオンリー)モードで使う

Page 52: Plone talk 201308_terada

6 改ざんを防ぐ方策

©2013 CMScom [email protected]

大規模構成 管理者

Apache (Webサーバ)

Ploneコアシステム(アプリケーションサーバ)

MySQL/PostgreSQL(スレーブ)

(データベースサーバ)

閲覧者

閲覧者

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Apache (Webサーバ)(ログイン用)

Varnish (キャッシュサーバ)

Ploneコアシステム(アプリケーションサーバ)

Ploneコアシステム(アプリケーションサーバ)

Varnish (キャッシュサーバ)

HAProxy (ロードバランサ)

MySQL/PostgreSQL(マスター)

(データベースサーバ)

Memcached(一時保存ファイル)

LDAP(ユーザディレクトリ)

読み取り専用

ログインURL禁止 IP制限

Page 53: Plone talk 201308_terada

7 クラウドサーバの活用

©2013 CMScom [email protected]

•IaaSと言われる、ほとんどのクラウドサーバで運用可能

•アプリケーションサーバの増強には、クラウド環境は手軽で簡単

•テスト・ステージングサーバを立ち上げるのがすぐに出来便利

Page 54: Plone talk 201308_terada

7 クラウドサーバの活用

©2013 CMScom [email protected]

•PaaSでもPloneが動作する環境はある•個々に癖があるので注意が必要

Page 55: Plone talk 201308_terada

7 クラウドサーバの活用

©2013 CMScom [email protected]

•選定のポイント•柔軟にアプリケーションサーバが増やせるか?•OSイメージでバックアップする方法があるか?•課金体系は、使用するアプリケーションに合っているか?

Page 56: Plone talk 201308_terada

8 Plone流

©2013 CMScom [email protected]

•Ploneには文化がある!!

•使う側、カスタマイズする側、管理側に、この文化が適用出来れば最強!!

Page 57: Plone talk 201308_terada

8 Plone流

©2013 CMScom [email protected]

•オープンソースの活用で、長期間メンテナンスが可能なシステム構築を・・。

Page 58: Plone talk 201308_terada

8 Plone流

©2013 CMScom [email protected]

10年以上進化をし続けている

Ploneに感謝!!

ご清澄ありがとうございました。