OpenPNEの最近のブログ記事

メール転送の件。

 

今回移行先のサーバーがPleskの管理になっているため、メール投稿機能(携帯用)の設定に若干コツが必要なので、メモしておく。

というのも、Plesk管理の場合、単に.qmailを編集しても、動作に問題があるための様。

 

クライアント > <ドメイン> > <ドメイン名> > メール > プリファレンス

の、オプションを、

「存在しないユーザへのメール  テキストつきで返信します 」でチェック。


 SSHでログインして、

/var/qmail/mailnames/<ドメイン名>直下の

.qmail-defaultを編集。

|bouncesaying This\ address\ no\ longer\ accepts\ mail.
の部分をコメントアウトして、

| /usr/bin/php /var/www/vhosts/<ドメイン名>/httpdocs/sns/bin/mail.php

を追加。

 

以上で、キャッチオールされたメールがmail.phpに転送され、無事データがアップされる。

 

以上。

 

以前に記録した、OpenPNE(Usagi ver.)のサーバーの移転が必要になり、色々実験をした結果を残します。

 

移転方法(ざっくりと):

  1. メンテナンスモードに変更
  2. MySQLのデータをバックアップ
  3. ファイルのバックアップ(スキン等の変更したものだけでも良い)
  4. 新しいサーバーに新しいOpenPNEをインストール
  5. バックアップしたSQLデータをインポート
  6. ファイルの差し替え(上記3.でバックアップしたものだけを)

基本的には以上。

OpenPNEは、画像データもSQLデータとして格納するようになっているらしいので、基本的にはSQLデータをきちんとバックアップとれれば、新規インストールを行った後にSQLデータをインポートすることで稼働には問題はない。

 

追記として、今回は、サーバー移転に当たって、別ドメインに移転の実験を行ったが、その場合は、設定ファイル(OpenPNE_DIR/conf/config.php)内の記述を変更する必要があった。また、同じドメインでも、サーバーによってはディレクトリの位置が異なることがあるので、その場合は修正が必要である。

 

次回、SQLデータのバックアップの際の注意点を記述する。

 

 OpenPNE及びMyNETSの脆弱性のニュースがありました。
 OpnePNEでは、パッチの配布がされております。MyNETSでは、代替ファイルの配布及び書き換え指示が掲載されております。どちらかをご利用の方は、対処された方がよろしいかと思います。ご参考まで。

MyNETSにおける携帯メールアドレス漏洩の脆弱性
【緊急リリース】OpenPNE携帯版での脆弱性対応版リリースのお知らせ(追記あり)

 (それぞれで対応内容が異なるところがおもしろくもある...)

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行にしたら、直ったのは多分、そういうこと。






OpenPNE(MyNETS)のインストール手順をメモっておく。

環境は以下の通り:
■レンタルサーバ会社名:クララオンライン
■サーバOS名:VPS Triplo (Webmin) / CentOS Linux release 5
■PHPのバージョン:5.1.6
■MySQLのバージョン:5.0.22
■メールサーバ:qmail
■ImageMagick:6.2.8
■gd:2.0.33

インストール手順(添付ドキュメント)を引用しながらすすめていく。


1. ファイルの設置
MyNETSに含まれるディレクトリ、ファイルを以下のようにWebサーバ上に設置してください。

インストーラを利用してインストールする場合は、Webサーバ上への設置が完了したら、設置したURLにブラウザでアクセスし、インストーラの指示に従って下さい。

- OPENPNE_DIR
├ bin-- *.cron[755]
├ lib <--- OPENPNE_LIB_DIR
├ var <--- OPENPNE_VAR_DIR
│ ├ img_cache
│ │ ├ gif [777]
│ │ │ ├ w_h [777]
│ │ │ ├ w_h_raw [777]
│ │ │ ├ w76_h76 [777]
│ │ │ ├ w120_h120 [777]
│ │ │ └ w180_h180 [777]
│ │ ├ jpg [777]
│ │ │ ├ w_h [777]
│ │ │ ... [777]
│ │ └ png [777]
│ │ ├ w_h [777]
│ │ ... [777]
│ ├ log [777]
│ ├ rss_cache [777]
│ ├ templates_c [777]
│ └ tmp [777]
├ webapp <--- OPENPNE_WEBAPP_DIR
├ webapp_ext <--- OPENPNE_WEBAPP_EXT_DIR
├ config.inc.php (OPENPNE_DIR ディレクトリを指定)
├ index.php
...

※[777]は例です。環境に合わせて適切な値に読み替えてください。

ここは大きな問題はなかった。FTPする際に、数点気をつければ良い。

・パッシブモードでアップする。
・バイナリモードをアスキーモードを切り分ける。
両方共に、NextFTPでアップすれば、デフォルトで設定されている通りなので、問題なし。

あとは、パーミッションの設定だけ。パーミッションの設定は、NextFTPでOK。設定に漏れがないかどうかだけ確認すればOK。
しかもMyNETS Ver.1.1.1であれば、インストーラーがついてくるので、インストールした後に、パー未ションのチェックしてくれるので、まあ、まず漏れはないと思う。

2. 設定ファイルの変更 OPENPNE_DIR/conf/config.php.sample を OPENPNE_DIR/conf/config.php にコピーして config.php の方を環境に合わせて編集します。

クララのVPSの場合、OPENPNE_DIRは、
/var/www/html/...
となる。

SNSのURL 28行目 Web上の絶対パス(URL) http://sns.example.com/の部分を、SNSを設置するURLに変更してください。最後にスラッシュを付けてください define('OPENPNE_URL', 'http://sns.example.com/');データベースの設定 30行目 $GLOBALS['_OPENPNE_DSN_LIST']['main'] = array( 'dsn' => array( 'phptype' => 'mysql', 'username' => 'MYSQLサーバのユーザー名', 'password' => 'パスワード', 'hostspec' => 'localhost', 'database' => 'SNS用に作成したデータベースの名前', 'new_link' => false, ), );

ここも、記述通りに、淡々とすすめていけばいいだけの部分。特に、MySQLAdminがあるサーバーであれば、ホストの設定やデータベースの設定も楽なので、ほぼ問題なし。
ただ、ここの説明って、前後してるよな。MySQLの設定の説明より先にこれがでてくるってことは、順に読んでる人には若干混乱の元かも...。

DB暗号化キー(56バイト以内のASCII文字列) 42行目 暗号を記入(好きな英数字を入れても大丈夫です) // DB暗号化キー(56バイト以内のASCII文字列) define('ENCRYPT_KEY', ''); サーバで暗号を生成する場合は以下のコマンドで生成ください(CentOS FedoraCore6 にて生成実行確認) $ mkpasswd -l 56 kggqcorgrurylrQts}gpitoqnlqsxcishxdjrq24zjtpyausemhkxtxI

これは、ぶっちゃけ、なんでもいいらしい。

メールのドメイン 45行目 mail.example.comの部分を、使用するメールドメインに変更ください。 // メールサーバードメイン // 携帯メール投稿の宛先などのドメイン名に使われる define('MAIL_SERVER_DOMAIN', 'mail.example.com');

実は、ここがちょっと山場なのだけど、後述するので、保留。

GoogleMap API KEY 設置するサイト用のGoogleMapKeyを取得してください。 * 申請先URL:http://www.google.com/apis/maps/signup.html 401行目に取得したキーを記入してください。 // Google Maps API key /// define('GOOGLE_MAPS_API_KEY', '取得したKEYをここに記入してください');

ここは、書いてある通りにすすめれば、ほぼ問題なし。但し、登録サイトが英語なので、これだけ注意かな。あと、サブドメイン名がついてる場合は、www.とかを記入忘れないように。

スキン設置ディレクトリ スキンの変更はFTPにより行います。 スキンディレクトリの設置場所について * OPENPNE_DIR/skin/[skin任意のディレクトリ名]/img/以下に、スキン素材を保存します。 (このディレクトリ内で足りない素材は、skin/default/img/以下のファイルが補完をします。) * 設置ディレクトリおよび設置スキンのパーミッションを777に変更します。 $ chmod -R 777 OPENPNE_DIR/skin/[skin任意のディレクトリ名]/img/
これは、後でも設置可能なので、後回し。パーミッションは先に変更しておこうね。
3. サーバ設定 レンタルサーバ等で設定済みの場合は読み飛ばしてください。

3-1. Apacheの設定
httpd.confを修正し、

DirectoryIndex に index.php を追加します。
OPENPNE_DIR にアクセスできるようにドキュメントパスを通します。
[設定例]

バーチャルホストを使ったhttpd.confの設定

ServerName openpne.example.com
DocumentRoot /home/username/OPENPNE_DIR/
DirectoryIndex index.html index.php

httpd.confを修正したら、Apacheを再起動してください。
設定は設置した環境に合わせて行ってください。

これは、設定しなくても動いた。ってことは、設定は必要ないらしい。

後は、明日にしよう...。

<<栞>>

OpenPNE(UsagiVer.)--cron設定

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

cronの設定にも一苦労。
マニュアルには、

3-3. cronの設定
[設定例]

/etc/crontab に以下を記述。

# 6時にメールを送信&20分毎にRSS更新
00 6 * * * root sh OPENPNE_DIR/bin/tool_send_dairy_news.cron OPENPNE_DIR/bin/ [bin_path]/php
00 6 * * * root sh OPENPNE_DIR/bin/tool_send_birthday_mail.cron OPENPNE_DIR/bin/ [bin_path]/php
00 6 * * * root sh OPENPNE_DIR/bin/tool_send_schedule_mail.cron OPENPNE_DIR/bin/ [bin_path]/php
*/20 * * * * root sh OPENPNE_DIR/bin/tool_rss_cache.cron OPENPNE_DIR/bin/ [bin_path]/php
[bin_path]はphpをインストールしたbinディレクトリ(例えば、/usr/local/bin)です。

とあるのだが、クララオンラインWebminのcron設定は、crontabに書き込むのではなく、webminで登録できる。
これは、これで楽で良いのだが、設定が若干異なる。

まずは、OPENPNE_DIRディレクトリーは、
/var/www/html/sns/
でOK。shコマンドは必要ないようだ。
.cronで止めて入力してみると、エラーがでる。
例えば、tool_send_dairy_news.phpというコマンドがありませんとでる。
tool_send_dairy_news.cronを見てみると、


#! /bin/sh
cd $1
$2 tool_send_dairy_news.php > /dev/null

となっている、単純な命令文。tool_send_dairy_news.phpが見つからないというから、多分、絶対パスが必要なのだろうと、

#! /bin/sh
cd $1
$2 /var/www/html/sns/bin/tool_send_dairy_news.php > /dev/null

に変更。やっぱり動いた。

※実行環境がcron依存のため、シェルコマンドでパスをわたしてやらなければならない。
しかし、またエラー。phpを理解していないようだ。

そこで、ウェブで調べてみると、どうも、これはcronコマンドではなく、無理矢理phpを走らせるというやり方らしく、
※シェルスクリプトから起動させるのは常套手段。PHPをコマンドとして使用するのがある意味無理矢理という意味らしい。通常だと、perlやRuby等を使うのが普通らしい。
.cronの後に、phpのありかを宣言してやらなくてはならないらしい。
※上記にも書いたとおり、cron依存であるため、環境変数をわたす必要があるので、phpのパスをわたすのは必須。本来あるパラメーターを略してはいけないということ。
なので、
/var/www/html/sns/bin/tool_send_dairy_news.cron /var/www/html/sns/bin/ usr/bin/php
という命令文になる。とりあえず、動いた。