2003-05-25 tDiary複数+suExec環境実践編

λ [tDiary] 複数+suExec環境実践編

基本は同一サーバで複数のtDiaryを運営する方法より。
共通のtdiary.conf /usr/local/etc/tdiary.conf
@secure=true だとsrcプラグインが利用できない。srcプラグインは dailyupdate.rb で更新した時点で展開してしまうのが吉かも。
@no_referrer を真っ先に設定しないとweb経由での更新時にどんどん記録されてしまって空しい数字が表示されることになる。
@rereferr_table はシステム全体共通でよかろう。ユーザが変更する場合は完全に上書きするか、unshift で追加か?

λ ユーザ追加時の作業内容

一般ユーザが自分で作業する場合は、chown, chgrp 不要
 # mkdir $HOME/tdiary
 # mkdir $HOME/public_html/tdiary
 # mkdir $HOME/public_html/tdiary/plugin; ln -s /usr/local/share/tdiary/plugin/00default.rb $HOME/public_html/tdiary/plugin
 # cd $HOME/public_html/tdiary; ln -s /usr/local/share/tdiary/theme
 # cp $WORKSRC/index-user.rb index.rb    # index-user.rb は後述
 # cp $WORKSRC/update-user.rb update.rb  # update-user.rb は後述
 # cp $WORKSRC/dot-htaccess .htaccess    # dot-htaccess は後述
 # $HOME/public_html/tdiary/tdiary.conf をユーザ毎に合わせて設定する
 # chown -R hoge $HOME/tdiary $HOME/public_html/tdiary
 # chgrp -R hoge $HOME/tdiary $HOME/public_html/tdiary
 # chmod    u+x  $HOME/public_html/tdiary/index.rb
 # chmod    u+x  $HOME/public_html/tdiary/update.rb
 # chmod -R go-w $HOME/public_html/tdiary # 他人が書き込み可能な状態だと suExec で実行させてくれない
 # chmod    go-w $HOME/public_html
元のドキュメントではテーマをサーバの http://example.com/theme に設定するように書いてあるが、 ここではユーザのディレクトリから毎回シンボリックリンクを張ることにより実現している。
ユーザが自分用のテーマを利用する際、このシンボリックリンクを消して自分でthemeディレクトリを構築すれば、ユーザ毎に違ったテーマ集を利用可能である。
ユーザが自分用のプラグインを利用する際、plugin ディレクトリに置けばよい。/usr/local/share/tdiary/misc/plugin/someplugin.rb へのリンクでもいいし、ファイルを直接置いてもよい。

λ index-user.rb

#!/usr/bin/env ruby
require '/usr/local/share/tdiary/index'

λ update-user.rb

#!/usr/bin/env ruby
require '/usr/local/share/tdiary/update'

λ dot-htaccess

Options +FollowSymLinks は必須。

基本的にはシステム全体で共通でよいはずだが、認証方法や RewriteRule などユーザによって設定したいことがあるかも。

λ ユーザのtdiary.conf

# user's tdiary.conf
@user_name = 'hoge'
@data_path = '/home/hoge/tdiary'
@plugin_path = '/home/hoge/public_html/tdiary/plugin'
eval( File::readlines( "/usr/local/etc/tdiary.conf" ).join.untaint )
@data_path に指定したディレクトリを作成しておくこと。ディレクトリはCGIが動作する権限で書き込みができる必要がある。

λ Webから更新したら

実験中にWebから設定の更新をやっていたら ユーザ用tdiary.conf が失われてしまった。

バージョン管理してない環境では生きていけないと改めて思う瞬間。

λ ユーザ毎に異なるプラグイン集合のための考察

プラグインディレクトリに置いただけであれこれ勝手にやってしまうタイプのプラグインが存在しており、このタイプのプラグインは管理者が設置すると強制的に適用されてしまう状況にある。
現在「ユーザ毎のプラグイン」という仕組みが存在しないのは悩みどころ。ユーザのディレクトリにあるpluginディレクトリを探索する "user_plugin.rb" というプラグインを作成するといいのだろうか。
基本はマスターのプラグインディレクトリに対するシンボリックリンクで、update.rbの設定画面でチェックボックスで選択できるようになるのが理想。
↑と書いていたら、たださんよりツッコミがあったので修正してみた(2003-5-26)
本日のツッコミ(全2件) [ツッコミを入れる]
λ ただただし (2003-05-26 10:20)

tdiary.confで@plugin_pathが指定できるので、ユーザごとのプラグインは可能です

λ 上美谷 (2003-05-26 11:30)

なるほど。解説恐れ入ります。修正してみます

[]