コンピュータ/ソフトウェア関連Tips

本文へ

さくらインターネットのライトプランと単一のtDiaryで複数日記運用

更新: 2012年11月04日(日) 16:21
公開: 2011年12月17日(土) 00:00

自分が利用しているホスティングサービスは、さくらインターネットのライトプラン。シェルは使えないのでシンボリックリンクも使えない。この環境で、単一のtDiaryで、複数の日記を動かしてみたので、失敗部分も含めて整理してみる。

公開日: 2011年12月17日 (この記事は、http://d.hatena.ne.jp/Fumio_Kawamata/20111217/single_tDiary_multi_diariesに掲載していた記事です。)

さくらのレンタルサーバーとドメイン

さくらインターネットでは、基本アカウント名とディレクトリは、

サーバーディレクトリ公開URL
/home/基本アカウント名/www/http://基本アカウント名.sakura.ne.jp/

という関係になる。

さらに、さくらインターネットが用意したドメインの中から2つまで、自分が設定したサブディレクトリに紐付けることが可能になっている。以下のような感じだ。

サーバーディレクトリ公開URL
/home/基本アカウント名/www/somedirhttp://○○○.saloon.ne.jp/ (例)
/home/基本アカウント名/www/anotherdirhttp://△△△.ivory.ne.jp/ (例)

すなわち、ドメインとしては、全部で3つ持てることになる。

今回は、

サーバーディレクトリ公開URL
/home/基本アカウント名/www/http://基本アカウント名.sakura.ne.jp/
http://基本アカウント名.sakura.ne.jp/en/
/home/基本アカウント名/www/somedirhttp://○○○.saloon.ne.jp/
http://○○○.saloon.ne.jp/en/
/home/基本アカウント名/www/anotherdirhttp://△△△.ivory.ne.jp/
http://△△△.ivory.ne.jp/en/

のような感じで、3つのドメインについて、その直下、あるいは、サブディレクトリ配下で、tDiraryを運用できるか整理してみる。インストールするtDiaryは1つのみだ。

参考にしたページ

当然ながら、参考にしたのは、「同一サーバで複数のtDiaryを運営する方法」

http://www.tdiary.org/20021205.html

tDiaryのインストール

さくらインターネットのコントロールパネルは使わず、tDiary 3.1.1 + BlogKit 3.1.1を、

/home/アカウント名/www/tdiary_shared

にFTPにて転送。

つまづき1 Rubyのパス

最初のつまづきは、

「同一サーバで複数のtDiaryを運営する方法」より
もし、シンボリックリンクを許可したくない場合には、以下のようなindex.rbを用意することで同等のことが実現できます(update.rbも同様です)。これらのファイルにはWebサーバの実行アカウント権限で実行可能にしておく必要があります。また、suExec環境下の場合は、個々のユーザがindex.rbの所有者である必要がありますから(実行権限もownerに)、以下の方法しか使えません。
#!/usr/bin/ruby
require '/usr/local/share/tdiary/core/index'

のとおりにして、Internal Server Errorになってしまったこと。

これは、さくらインターネットのレンタルサーバーのRubyのインストールパスに合わせて、

#!/usr/local/bin/ruby

にすることで解消。(実際のところは、単純に順次解消した訳ではなく、いくつもの障害をあれこれ解決していきました。この記事では、便宜上ストーリー仕立てにしてあります。)

つまづき2 日記データと関連リソースの配置

「同一サーバで複数のtDiaryを運営する方法」より
そこで、個々の日記のtdiary.confから読み込まれる、共通のtdiary.confを用意しておきましょう。ファイル名は「/etc/tdiary.conf」とします。仕掛けは、変数「@user_name」です。これで一括変換できます。

# shared tdiary.conf
@data_path = "/var/tdiary/#{@user_name}"

に従い、@data_pathは、

@data_path = "/home/アカウント名/www/tdiary_data/${@user_name}"

とし、先に用意したindex.rbは、

/home/アカウント名/www/somedir/subdir1/index.rb

にインストールした。

テキストは入力できた(あとで述べるが、スタイルシートは反映されていない)ので、「しめしめ」と思って、既存の日記データをコピーしてみた。しかし、テキストは表示されるものの、図や、src.rb、insert.rbの参照先ファイルは表示されなかった。これらの参照ファイルは、相対パスで記述していたのだが、相対パスの基準は、日記データではなく、「/home/基本アカウント名/www/somedir/subdir1/index.rb」になっているのであった。

日記データを、「/home/基本アカウント名/www/somedir/subdir1/data」にでも配置すればよいのは分かったのだが、そうすると、共通ファイルの「tdiary.conf」は各ドメイン(ディレクトリ領域)ごとに、合計3個必要になってしまうなぁ...と、しばらく考えこんでしまったが、「@data_path = "/var/tdiary/#{@user_name}"」のuser_nameに、ディレクトリを含めてしまえばOKかも?...と思い、トライしてみたところうまくいった。

今のところ、tdiary.confは、

@user_name = 'somedir/subdir1'
eval( File::readlines( "/home/基本アカウント名/www/tdiary_shared/tdiary.conf.ja" ).join.untaint )

のようになっている。

つまづき3 テーマ(スタイルシート)

「同一サーバで複数のtDiaryを運営する方法」より
また、シンボリックリンクが使えるように、Apacheの設定でFollowSymLinksを設定しておく必要があります。

これだけではtDiaryが正しいテーマのURLを埋め込んでくれないので、以下のプラグインを書いて、「/usr/local/share/tdiary/plugin」に置いておきます。

# change_url.rb
def theme_url
   '/theme'
end

def js_url
   '/js'
end

にならって、

def theme_url
   '/home/アカウント名/www/tdiary_shared/theme'
end

def js_url
   '/home/アカウント名/www/tdiary_shared/js'
end

としてみたのだが、テーマ(スタイルシート)が反映されない。

しかし、反映されるはずがないのであった。物理的パスではなく、Webサーバーが認識するパスとしなければならないのだった。

さらに試行錯誤したところ、次のことも分かった。前述したように、tDiaryは、「/home/基本アカウント名/www/tdiary_shared」にインストールしたのだが、この下にthemeが存在しないと、tDiaryのテーマ選択のプルダウンにテーマが現れないのだ。(theme_urlに、httpではじまる値を指定することもできるのを確認したとき、リモートホストに存在するthemeのリストを取得することまでしているのだろうか...と疑問に思っていたのだが、この疑問は解消した。)

テーマを集中したければ「基本アカウント名.sakura.ne.jp」に集中させるようにして、サブドメインに設置したtDiaryからは、基本アカウント名のサーバー内のthemeの位置をhttpではじまるパスで指定すれば良いのだろう。

ただ、自分の用途では、

  • ○○○.saloon.ne.jp」からはテーマに相対パスでアクセスしたい。
  • テーマはかなりカスタマイズしており、「△△△.ivory.ne.jp」からこのカスタマイズしたテーマを使用したい。

ので、設定としては、次のようにした。

  • 「○○○.saloon.ne.jp」には、基本スタイルシート(base.css、conf.css)と、カスタマイズしたテーマのみ保存。
  • 「基本アカウント名.sakura.ne.jp」には、全テーマ(スタイルシート)を保存。
  • 「△△△.ivory.ne.jp」からは、「○○○.saloon.ne.jp」内の基本スタイルシート(base.css、conf.css)を参照。(もちろん、基本スタイルシートは「基本アカウント名.sakura.ne.jp」を参照しても良いのだが、3つのドメインの所有関係が全部バレるので、バレる範囲を限定しておく。ま、真剣に隠している訳ではないが。)

ということで、現在の、change_url.rbは、以下のようになっている。(サブディレクトリ「hoge.example.jp」が、上記の「○○○.saloon.ne.jp」に対応する)

# change_url.rb

if /^\/home\/基本アカウント名\/www\/hoge\.examplex\.jp\/(en|.+)\/data\/$/ =~ "#{@conf.data_path}"
  def theme_url; '../theme'; end
elsif /^\/home\/基本アカウント名\/www\/hoge\.example\.jp\/data\/$/ =~ "#{@conf.data_path}"
  def theme_url; './theme'; end
elsif /^\/home\/基本アカウント名\/www\/en\/data\/$/ =~ "#{@conf.data_path}"
  def theme_url; '../tdiary_shared/theme'; end
elsif /^\/home\/基本アカウント名\/www\/\/data\/$/ =~ "#{@conf.data_path}"
  def theme_url; './tdiary_shared/theme'; end
else
  def theme_url; 'http://www.hoge.example.jp/theme'; end
end


#def js_url
#   '/home/基本アカウント名/www/tdiary_shared/js'
#end

まとめ

今の知識状態で、最初から構成を決めれば、もっときれいなかたちにできただろう。...が、しかし、そもそも、今なら、さくらインターネットのライトプランじゃなく、スタンダードプランか、それ以上のプランで契約するだろうから、こんな苦労しなくて良いだろうな...。

それにしても、さくらのライトプランといった制限のある環境下でも、ここまで期待にこたえてくれるtDiaryって、すごいな。

Tags: tDiary

© Someone in the TERRA

編集