Ploneインストール [Plone3.3]
インストール
poppler-utilsのインストール
poppler-utils を事前にシステムにインストールしておくことで、PDF の本文を検索対象に含めることができる。yum 等でインストールする。
yum install poppler-utils
Unified Installerでのインストール
http://plone.org/ よりダウンロードしインストールする。ここではバージョン 3.3.2 を Standalone で利用する。
# tar zxvf Plone-3.3.2-UnifiedInstaller.tgz # cd Plone-3.3.2-UnifiedInstaller # ./install.sh standalone
デフォルトでは /usr/local/Plone にインストールされ、/usr/local/Plone/zinstance に Plone のインスタンスが作成される。後でインスタンスのみ追加できるよう、上で生成されたファイルは残しておく。インスタンスを追加する場合は、次のようにする。
# ./install.sh --instance=zinstance2 standalone
Pythonのデフォルトエンコーディングの設定
Zope は文字コードを UTF-8 で扱うため、Python のデフォルトエンコーディングを UTF-8 とする。/usr/local/Plone/Python-2.4/lib/python2.4/site-packages/sitecustomize.py ファイルを作成し以下のように記述すればよい。
import sys sys.setdefaultencoding("utf-8")
python-ldapのインストール
Python で LDAP を利用するには python-ldap2.3.9 モジュールをインストールする必要がある。インストールは解凍後、開発用ソースディレクトリに python-ldap という名前で格納する。ダウンロードは http://pypi.python.org/pypi/python-ldap/2.3.9 より行える。
# tar zxvf python-ldap-2.3.9.tar.gz # mv python-ldap-2.3.9 /usr/local/Plone/zinstance/src/python-ldap
次にインスタンス内の buildout.cfg を設定する。
eggs = Plone : + python-ldap develop = : + src/python-ldap [versions] : + python-ldap = 2.3.9
最後に設定を反映する。
# bin/buildout
インストールには openldap-devel と openssl-devel を組み込んでおく必要がある。インストールされていない場合は先に yum 等でインストールすればよい。
# yum install openldap-devel openssl-devel
起動確認
Plone が起動することを確認する。
# cd /usr/local/Plone/instance # bin/plonectl start
http://ホスト名:8080/ にアクセスして Plone のページが表示されればインストール成功である。Plone の停止は次のコマンドを実行する。
# bin/plonectl stop
全体の管理者の設定
インストールすると admin ユーザが生成される。パスワード等は /usr/local/Plone/instance/adminPassword.txt に書かれているのでこれを変更する。ZMI(http://ホスト名:8080/manage)にアクセスしこのユーザでログインし、/acl_users/users で新しいユーザを追加する。
User ID: admtest Login name: admtest Password: **** Confirm password: ****
次に /acl_users/roles で追加したユーザに Manager ロールを与える。最後にデフォルトで作成されていた admin ユーザを /acl_users/users から削除する。
Ploneサイトの追加
ZMI(http://ホスト名:8080/manage)にアクセスし全体の管理者でログインする。右上のドロップダウンリストより Plone Site を追加する。
Id : web1 Title : WEB1
PloneHotfix20110720の適用
セキュリティパッチをあてておく。http://pypi.python.org/pypi/Products.PloneHotfix20110720/1.1 よりダウンロードする。
# unzip Products.PloneHotfix20110720-1.1.zip # mv Products.PloneHotfix20110720-1.1 /usr/local/Plone/zinstance/src/Products.PloneHotfix20110720
次にインスタンス内の buildout.cfg を設定する。
eggs = Plone : + Products.PloneHotfix20110720 develop = : + src/Products.PloneHotfix20110720
最後に設定を反映する。
# bin/buildout # bin/plonectl stop; bin/plonectl start;
ZopeJapanesePakLiteの適用
日本語のファイル名のファイルをダウンロードする際に、ASCIIに変換されたIDとなってしまう点を、元のファイル名のままダウンロードできるようにするパッチをあてておく。
ZopeJapanesePakLite-0.1.1.tar.gz
インストール
ZopeJapanesePakLite-0.1.1-20071120.tar.gz を開発用ソースディレクトリに格納する。
mv ZopeJapanesePakLite-0.1.1.tar.gz /usr/local/Plone/instance/src/
次にインスタンス内の buildout.cfg を設定する。
[productdistros] : urls = : + src/ZopeJapanesePakLite-0.1.1.tar.gz
最後に設定を反映する。
# bin/buildout # bin/plonectl stop; bin/plonectl start
設定ファイルの編集
設定ファイルを変更後は、設定反映後再起動すれば利用できる。
# bin/buildout # bin/plonectl stop; bin/plonectl start
HTTP起動ポートの設定
Zope インスタンス内の buildout.cfg で設定する。
http-address = 9081
Z-Serverのスレッド数を変更する
インスタンス内の buildout.cfg に以下の項目を指定する。
[instance] : + zope-conf-additional= zserver-threads 7
その他
$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)
自動起動
起動スクリプトを /etc/init.d/plone として次のように作成し、パーミッションを適宜設定する。
#!/bin/sh # Startup script for Plone # # chkconfig: - 80 20 # description: Zope, a web application server # # config: $instance/buildout.cfg # config: $instance/parts/instance/etc/zope.conf # Source function library. . /etc/init.d/functions RETVAL=0 plonectl="/usr/local/Plone/zinstance/bin/plonectl" prog="plone" start() { output=`$plonectl start` # the return status of plonectl is not reliable, we need to parse # its output via substring match if echo $output | grep -q "started"; then # success action $"Starting $prog: " /bin/true touch /var/lock/subsys/$prog RETVAL=0 else # failed action $"Starting $prog: " /bin/false RETVAL=1 fi return $RETVAL } stop() { output=`$plonectl stop` # the return status of plonectl is not reliable, we need to parse # its output via substring match if echo $output | grep -q "stopped"; then # success action $"Stopping $prog: " /bin/true rm -f /var/lock/subsys/$prog RETVAL=0 else # failed action $"Stopping $prog: " /bin/false RETVAL=1 fi return $RETVAL } restart() { stop start } case "$1" in start) start ;; stop) stop ;; status) $plonectl status ;; restart) restart ;; condrestart) [ -e /var/lock/subsys/$prog ] && restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart}" RETVAL=1 esac exit $REVAL
作成後は
/sbin/chkconfig --add plone
でzopeを起動スクリプトとして追加し、
/usr/sbin/ntsysv
で起動時に自動起動されるようにする。以降の起動・停止等は
/sbin/service plone [start | stop | restart | status | condrestart]
で行える。
ログのローテーション
Zope のログは $PLONE_INSTANCE/var/log/ 内に、instance-Z2.log(アクセスログ)、instance.log(エラー情報等)が出力されるがローテーションはされない。そこで logrotate を用いてログのローテーションを行う。/etc/logrotate.d/plone に以下を記述すればよい。
$PLONE_INSTANCE/var/log/instance-Z2.log $PLONE_INSTANCE/var/log/instance.log { weekly <- 毎週ログローテーション rotate 20 <- ローテーション回数 create 600 plone plone <- パーミッション、ユーザ名、グループ名 missingok <- ログファイルが存在しなくてもエラーを出さない notifempty <- ログファイルが空ならローテーションしない compress <- ローテーションされたログをgzipで圧縮 sharedscripts <- 複数指定したログファイルに対してpostrotateを実行 postrotate <- ログローテーション後に実行するコマンド /bin/kill -USR2 $(cat $PLONE_INSTANCE/var/instance.pid) endscript }
ZODB の自動 Pack
ZODB の Pack は Control_Panel/Database/main より行うことができるが、手動で行う必要があるため、これを cron で自動実行するように設定する。これは、wget 等で管理者パスワードを BASIC 認証に渡すこともできるが、管理者パスワードを記述するのにはセキュリティ上好ましくない。そのため、以下のように設定する。
スクリプトの作成
Zope のルートの zope_management_scripts フォルダ内(独自に作成)に、zope_pack という名前のスクリプトを作成する。days パラメータにより、何日前までの undo データを残すかを設定すればよい。
try: context.aq_parent.Control_Panel.Database.manage_pack(days=7) return 'OK' except: return 'NG'
ZODB の Pack には Manager 権限が必要なので、Proxy タブより Proxy Roles として Manager を選択する。
Proxy Roles : Manager
これにより、このスクリプトにアクセスするユーザが Manager でなくても、スクリプトに書かれた Pack を実行できる。
セキュリティの設定
この状態では、ログインしなくても実行できるため、スクリプトの Security タブよりセキュリティ設定を次のように設定し、Manager 権限でのみ実行できるようにする。
Manager : Change Python Scripts のみOFF, 他全てON その他Acquire?を含め : 全てOFF
Change Python Scripts を OFF にすることで、Manager でもこのスクリプトの変更を禁止する。変更が必要な場合は、改めてこのパーミッションを ON とすればよい。これは、Proxy Roles の設定で Manager を設定しているため、スクリプトの改ざんにより悪用されることを防ぐためである。
ユーザの作成
Zope のルートの acl_users/users で Anonymous として update 用のユーザを設定する。Anonymous とするには、このユーザに acl_users/roles でどのロールも与えなければよい。このユーザを用いることで、たとえこのパスワードが漏れたとしても Zope の設定変更等は行えない。
ユーザ名 : zope_conf_user
ローカルロールの設定
さらに、スクリプトの Security タブより、上記ユーザに local role として、Manager 権限を与える。
User : zope_conf_user Roles : Manager
このようにすることで、このユーザは、Pack の実行を除き何もできない。
自動実行
最後に root の cron で wget 等を動かし、スクリプトにアクセスして Pack を実行させればよい。
15 2 * * 0 wget --no-proxy --http-user="zope_conf_user" --http-passwd="XXX" --delete-after http://localhost:9380/zope_management_scripts/zope_pack