OpenPNE: 2008年3月アーカイブ

cronの設定の訂正

| | トラックバック(0)

 使えるねっとで、また少し勉強させてもらった。ちょい、また恥かいたが^^;

 OpenPNEのcron設定に一部ミスがあったことに気付かせてもらいました(恥)

 

となっている、単純な命令文。tool_send_dairy_news.phpが見つからないというから、多分、絶対パスが必要なのだろうと、
#! /bin/sh
cd $1
$2 /var/www/html/sns/bin/tool_send_dairy_news.php > /dev/null
 

の部分。
 cronに設定するシェルスクリプト自体にパスをきちんとわたしておかなかったため、だったらしい。それをきちんとすれば、.cornファイルを書き換える必要はなかったわけで...。

 で、先程.cronファイルを元通りにしてみたら...動きました...。

 あとで、cron設定のブログを訂正しておこう...。

 いよいよ、データベースの項。ちょっと敷居が高くなる。
 OpenPNEに関わらず、ほとんどのCMS(コンテンツマネージメントシステム)は、PHPとMySQLを用いた、(つまりスクリプト言語とデータベースの連携で)システムとなっているので、MySQLは避けて通れない。Perlだけで記述されたものもあるが、セキュリティ面はあまり高くはないようだ。
 ただし、ほとんどのCMSはMySQLのコマンドをあらかじめ用意してくれたり、インストーラーで設定までしてくれるものもあるので、ほとんど知識はなくとも、なんとかなる場合が多い。特に、X-serverやX-rea等、コンパネでSQLの設定ができたりすると、ほとんど問題になることはないのだが。
 今回は、クララオンラインのVPSにインストールした際に、ちょっと問題になった点を中心に挙げる。


4. MyNETS 用データベースの作成
インストーラを利用してインストールする場合は、下記のテーブル作成はインストーラーが行います。

テーブル作成はインストーラーが...というところは、SQLコマンドをあらかじめ用意してくれているので、MySQLを直接自分で編集することはないので、ここは問題なし。

4-1. MySQL 4.1 の場合
新しくデータベースを作成する場合、以下のようなSQLクエリを実行してデータベースを作成します。

CREATE DATABASE `DBNAME` DEFAULT CHARACTER SET utf8 ;
準備したデータベース(例:DBNAME)上で、以下のSQL文を順番に実行してください。

OPENPNE_DIR/setup/sql/MySQL4.1/install/install-mynets1-1-0-create-mysql41.sql
OPENPNE_DIR/setup/sql/MySQL4.1/install/install-mynets1-1-0-insert_data.sql
[実行例]
$ mysql -u username -p --default-character-set=utf8 DBNAME < install-mynets1-0-0-create-mysql41.sql
$ mysql -u username -p --default-character-set=utf8 DBNAME < install-mynets1-0-0-insert_data.sql

 X-serverはMySQLのバージョンが4.0だったので、下記の手順で問題なかったのだが、クララのMySQLは、5.0バージョンであったので、この項目があてはまることになる。実は、この4.0と4.1というのはなかなか壁が高いらしい。特に2バイト文字を扱う場合は特に。バージョン4.1から、サーバー、クライアント、PHP.MySQLと、それぞれの言語を分けることができてしまうのだ。ということは逆にそれぞれの言語が同じじゃないと文字化けをしてしまうという道理になるわけだ。
 ここに気が付いたのは、かなり経ってから。当初、上記手順通りにすすめていって、何度やっても文字化けをするので、困り果ててしまった。
 いくつか、ミソなのが、一つは、SQLコマンドを入力する方法がいくつかあること。SSHからMySQLを呼び出して、コマンドを送信する方法と、PHPMyAdmin等を用いてウェブから送信する方法とがあるのだが、私は、SSHからのコマンドの入力はできないので、PHPMyAdminやWebminを用いて送信したのだ。しかし、ウェブ経由だと、上記コマンドのうち、--default-character-set=utf8の部分を送信できないのである。多分方法はあるのであろうが、分からない。そこで、SQLファイルをアップロードするような形で送信するのだが、その方法では、言語の指定ができないのである。これは困った。何度やっても、文字化けするだけである。

 そして、色々調べた結果、MySQLのデフォルト言語が、どこかの部分で(クライアントかなにか)Latinになっているらしく、utf8で送ろうが、EUCで送ろうが、結局は文字化けしてしまうのだ。
 で、結果から言うと、Webminから、MySQLのコンパネでMySQLのiniファイルを変更することで、MMySQLの言語を全てutf8に統一することができる。統一すると、PHPMyAdminでファイル送信しても、文字化けせずに表示されるようになった...。
 つまり、my.cnfの[mysqld]ディレクティブに、
 [mysqld]
 default-character-set=ujis
 skip-character-set-client-handshake
 を書き込む。下段は、クライアントとの文字コード調整をしないようにするものらしい。上段には、euc-jpを用いる場合は、ujis、UTF-8の場合は、utf-8と指定することになるようだ。


参考サイト
   http://wota.jp/ac/?date=20061011
   

 ここでも、やや一週間はかかっただろうか...。

さて、ここからが山場。

3-2. メールサーバの設定
携帯版を使用しない場合は以下の設定は不要です。

MAIL_SERVER_DOMAIN に届くメールで、以下のアドレスはシステムで利用されます。

項目 新形式 旧形式
新規登録 / ログインURL取得 get@MAIL_SERVER_DOMAIN get@MAIL_SERVER_DOMAIN
プロフィール画像変更 pXXX-YYY@MAIL_SERVER_DOMAIN pXXX@MAIL_SERVER_DOMAIN
コミュニティTOPICのメール投稿 tXXX-YYY@MAIL_SERVER_DOMAIN tXXX@MAIL_SERVER_DOMAIN
コミュニティTOPICのメール作成 eXXX-YYY@MAIL_SERVER_DOMAIN eXXX@MAIL_SERVER_DOMAIN
コミュニティTOPICのメール修正 etXXX-YYY@MAIL_SERVER_DOMAIN etXXX@MAIL_SERVER_DOMAIN
コミュニティ画像のメール投稿 copicXXX-XXX-YYY@MAIL_SERVER_DOMAIN copicXXX-YYY@MAIL_SERVER_DOMAIN
日記メール投稿 bXXX-YYY@MAIL_SERVER_DOMAIN blog@MAIL_SERVER_DOMAIN
日記コメントメール投稿 cXXX-YYY@MAIL_SERVER_DOMAIN cXXX@MAIL_SERVER_DOMAIN
日記画像の修正メール投稿 dpicXXX-XXX-YYY@MAIL_SERVER_DOMAIN cXXX-XXX@MAIL_SERVER_DOMAIN

XXX には数字。
YYY には12バイトの英数字([0-9a-f]{12})。
新形式、旧形式のどちらのアドレスで受け付けるかは config.phpの設定(MAIL_ADDRESS_HASHED)によって切り替えることができます。

新形式はメール投稿の際のFromアドレス偽装へのセキュリティ対策のために導入されたものです。 From偽装対策を(IP制限等により)メールサーバ側で行っている場合には旧形式での運用も問題ありません。

メールサーバの転送設定を利用して、これらのアドレスへのメールが、以下のコマンドにわたるように設定します。

"|/usr/local/bin/php OPENPNE_DIR/bin/mail.php"

最初、X-serverでセットアップを試験していたので、この機能については後回しにしていた。でも、携帯版は是が非でも使いたかったので、色々調べてみた。

この点については、Usagi project サポート掲示板 と、使えるねっと フォーラムをかなり参考にさせてもらった。

この機能を使うには、サーバーに大まかに2つの機能が必要になるらしい

  1. キャッチオール機能→つまり、あるドメイン(もしくはサブドメイン)宛に来るメールを全て受信する機能。ハッシュをONにすると、メールアドレスはランダムに振られるので、これらのメルアドを全て作るのは不可能。なので、キャッチオールの機能は必須。ハッシュにしなかったとしても、宛先メールアドレスは記事番号に依存するので、100や200のメルアドでは足りない計算になる。こんなのつくってられない...。
  2. PHPプログラムへのメール転送機能→携帯から送られたメールを転送機能を利用してPHPコマンドにわたるようにします、という部分。mail.phpというのが、送られてきたメールの宛先と添付ファイルを読み込み、適当な作業を行うというものらしい。

以上の2つの機能がないと、携帯版が使えないことになる。

X-serverには、2の機能はあったのだが、1の機能がなかった。スパムメール対処のためとのこと。確かに、あるドメイン宛のスパムメールを全てPHPコマンドに渡せば、サーバーに負荷がかかることになりかねない。なので、キャッチオール機能を使うなら、サブドメインを作るべきだろう。メインドメインだと、whoisとかから拾ってきたドメイン宛にスパムが送られてくるのは間違いないからだ。

元々、このSNSは将来的にはそれなりの参加人数を見込むつもりだったので、X-serverでは負担しきれないのは分かっており、今回はインストールの試験だったため、当初はこの機能をスキップしていたのだ。

そこで、レンサバを変更。従来、PackageStartという共用プランで利用していたドメインの方を、VPSの契約に切り替える。その際に、レンサバ会社に、PHPプログラムへの転送機能を説明しておいたので、qmailを使った方が良いということになった。クララオンラインの標準VPSサーバーは、Webminとsendmailもしくは、Pleskとqmailの組み合わせらしい。しかし、qmailの設定ファイルである、.qmailを編集するには、Pleskは適切なOSとは言えないということらしく、webminとqmailという組み合わせで依頼する。こちらの状況に応じてカスタマイズしてもらえるというのはまあ、ありがたい。しかし、Webminだと、サブドメインの設定ができないのだ。そうなると、またしても、1の条件は満たしても、2の条件が満たされないことになる。しかし、ぶっちゃけ、メール転送はそれほど重い作業ではないし、別ドメインに作業させてもよい訳で、それは、それで別に考えることにした。

結果、メインのドメインをクララオンラインのVPSに設定。携帯から送られるメールの宛先を別ドメインに設定し、別サーバーから転送することにした。別サーバーの仕様については、キャッチオール機能があるサーバーに絞られた。実は、色々調べていくと、上記1と2の両方を満たすレンサバはあまり多くはないようだ。しかも、あまり評価の見えないサーバーは使いたくない。
OpenPNE関係のフォーラムをみて、比較的利用率の高いサーバーが、さくらとX-reaであった。で、さくらにはキャッチオール機能がないので、消去法的にX-reaをレンタル。
早速別ドメインを設定し、さらにサブドメインを設定して、そのサブドメイン宛に来るメールを全てクララオンラインに設定したドメインのあるメールアドレスに転送することで、1の条件を満たした。

簡単に書くと、こんな感じ。
OpenPNE(Usagi)に携帯からアクセス→メール投稿を選ぶ→アカウント名(この部分は、OpenPNEがランダムで作成)@サブドメイン.ドメイン.orgに画像添付で送る→X-reaのサブドメインに送られたメールは、キャッチオール機能で、ひとまとめに→転送機能を使って、例えば、p1@ドメイン.jpに転送→p1@ドメイン.jpに送られたメールはクララサーバーの方でさらに転送機能を使い、mail.phpコマンドにわたす→結果、画像がアップされるようになった!

この作業になんと1ヶ月を費やした...。X-serverに試験インストールから始まって、メール投稿に必要な機能の把握に、さらにサーバーの選定、申込、設定、さらに試験、インストールの試行錯誤...。ようやく終了。

【注意事項】


  • メールをphpコマンドに送るときは、.qmailを編集するのだが、.qmailを送ることができるパスは、通常FTPで送ることができない、上位にある。通常はSSH等のシェルを使ってコマンドを送るのだが、UNIXコマンドを知らないわたしは、Webminのアップロード機能を使ってファイルを送った。だが、ここにちょっと落とし穴。この機能ではアスキーモードでの転送ができないらしく、キャリッジリターンが変更されるらしい。当初、2行のコマンドを送っていたが、これがうまくいかず、1行にしたら、直ったのは多分、そういうこと。