共有インストール
(この機能は試験的なものです)
s9yはコアファイルを共有することによって、1回のインストールで複数ユーザーによる運用が可能です。あとは各ユーザーのディレクトリに特別に作られたファイルを配置するだけです。
例を使ってやってみましょう。
あなたのドメインを「s9yblogs.org」と仮定します。
あなたは自分の好きな数のいくつかのバーチャルホストが欲しいわけです。
それらは「username.s9yblogs.org」と呼ばれることになります。
ホストの例としてユーザー名「garvin」「j」「tom」を選んでみます。
ウェブサーバは、ユーザー名「www」グループ名「www」で動いていると仮定します。
さらに、あなたのサーバのユーザー全てがサブドメインと同じ名称で、「www」グループに属するものと仮定します。
またさらに、PHPのsefe_modeがオフであると仮定します。
当然セキュリティ上の理由で、open_basedirは各ユーザーのドキュメントルートに設定しなければなりません。これでユーザーは他人のディレクトリにアクセスできまくなります。
従って、Apacheのバーチャルホストディレクティブはこんな感じにします。
-- httpd.confServerName garvin.s9yblogs.org DocumentRoot /home/www/garvin.s9yblogs.org/htdocs AllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/garvin.s9yblogs.org/"ServerName j.s9yblogs.org DocumentRoot /home/www/j.s9yblogs.org/htdocs AllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/j.s9yblogs.org/"ServerName tom.s9yblogs.org DocumentRoot /home/www/tom.s9yblogs.org/htdocs -- httpd.confAllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/tom.s9yblogs.org/"
s9yの標準配布ファイルは/usr/local/lib/php/s9y/に展開します。
バーチャルホスト内のinclude-pathさえ合っていれば、保存ディレクトリ名である「s9y」自体は特に重要ではありません。
ただ、ディレクト名を「s9y」にするとわかりやすいと思います。
では、次のサブディレクトリを、各ユーザーのサブディレクトリにコピーするかリンクしてください。
- /usr/local/lib/php/s9y/deployment/(リダイレクト用のコアファイル群)
- /usr/local/lib/php/s9y/templates/(ユーザーが変更するためのテンプレート群)
- /usr/local/lib/php/s9y/htmlarea/(WYSIWIGエディタ)
$ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/garvin.s9yblogs.org/htdocs/ /* Either COPY: */ $ cp -r /usr/local/lib/php/s9y/templates /home/www/garvin.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/garvin.s9yblogs.org/htdocs/ /* Or LINK: */ $ ln -s -d /usr/local/lib/php/s9y/templates /home/www/garvin.s9yblogs.org/htdocs/templates $ ln -s -d /usr/local/lib/php/s9y/htmlarea /home/www/garvin.s9yblogs.org/htdocs/htmlarea /* Adjust permissions */ $ chown -R garvin.www /home/www/garvin.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/garvin.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/garvin.s9yblogs.org/htdocs/uploads/ /* See above if you only want to link the subdirectories */ $ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/j.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/templates /home/www/j.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/j.s9yblogs.org/htdocs/ $ chown -R j.www /home/www/j.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/j.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/j.s9yblogs.org/htdocs/uploads/ /* See above if you only want to link the subdirectories */ $ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/tom.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/templates /home/www/tom.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/tom.s9yblogs.org/htdocs/ $ chown -R tom.www /home/www/tom.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/tom.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/tom.s9yblogs.org/htdocs/uploads/
注:ln -dオプション(ディレクトリへのハードリンク)はLinuxだけだと思います。 FreeBSDなどの場合、このオプションは無視して結構です。
htmlareaとtemplatesのコピーとリンクの違いは、メンテナンス時の問題だけです。 s9yのコアライブラリをアップグレードする時はいつも、配布テンプレートやhtmlareaのコードに変更が加えられる可能性があります。 これらのディレクトリをコピーしただけの場合、各ユーザーのディレクトリに新ファイルを再度コピーする必要があります。
もしリンクしているだけの場合、変更は全てのユーザーにすぐ反映されます。 OSとパーミッションの構造によりますが、ディレクトリはリンクするようお勧めします。 もちろんこの方法「共有ライブラリユーザー」はリンクされたディレクトリに、各自のテンプレートを保存できないので、個別化のひとつの弱点ともなっています。
後でアクセス管理をするときのために、s9y管理下のブログのURLの全リストを保存するようお勧めします。例えば「my_managed_s9y_blogs」のようなSQLテーブルを作っておくといいでしょう。
sql> CREATE TABLE my_managed_s9y_blogs (url varchar(255) default null);
sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://garvin.s9yblogs.org/');
sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://j.s9yblogs.org/');
sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://tom.s9yblogs.org/');
これで離陸準備完了です。 全てのユーザーは各自のブログデータが保存されるそれぞれのSQLデータベースにアクセスできるはずです。 この手続きにおいて特別なスクリプトファイルなどは特に必要無いことがお分かりなったと思います。
http://garvin.s9yblogs.org/ を開いてください。
s9yのインストール画面が表示されるはずです。
データベース情報、ユーザー名、正しいパスワードを入力してください。
他の部分は全てユーザーのために残しておくことができます。
これでまるで個別にインストールしたかのように、全てのユーザーが自分自身のブログを管理することができます。
特記
- 今なおそれぞれのブログは独立したブログです。
- コアライブラリを例えばver0.5から0.6にアップデートする場合、全てのユーザーがs9y標準のアップデートスクリプトの影響を受けるので、各自の設定を更新する必要があります。
s9y blogのプロバイダとして、ユーザーのブログをあなたのサーバに移転してはどうでしょうか。そのためには、あなたはユーザーと同じようにいつもスペアのテスト用ブログをインストールしておくのがベストです。
インストールデータを開きアップグレードファイルをよく見てください。 実行したらエラー無く完了したかを確認してください。 もしエラーがあったら、管理下のs9y blog全てで以下の作業を繰り返してください。
<?php
$sql = mysql_query('SELECT url FROM my_managed_s9y_blogs');
while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
$fp = fopen($row['url'] . 'serendipity_admin.php?serendipity[action]=upgrade');
}
?>
つまりあなたがホスティングする全てのs9y blogのために基本的に必要なことは、このスクリプトを呼ぶことだけです。