MT3.11-ja 対応。
シックス・アパート株式会社からどうぞ。
MTは掲示板などと同じCGIではあるが、他にもPerlモジュールを必要とする(Image Magickなど)。 自動で広告が入るタイプのサーバーでは難しいみたい。
実行ファイル(CGI)を/cgi-binの下に置かせるサーバーだと、画像ファイルやスタイルシート(CSS)などの静的ファイルは、HTML文書用ディレクトリ(/public_htmlなど)の下に置く必要があります。
よって、メインインデックスのディレクトリや、mt-staticディレクトリは、HTML文書用ディレクトリに設置します。
画像のサムネイル表示をするには、Image MagickかNetPBMが必要になります。 FreeBSDならports/packagesに ImageMagickが入っているので(カテゴリーPerl5)、それを入れるのが簡単です(やたらと必須パッケージを入れられてしまいますが)。 ついでに、p5-MIME-Base64と p5-MIME-Toolsも入れておきましょう。
必ずやりましょう。 引用がとてもしやすくなります。 私はBLOG質問箱を参考にしました。 ありがとうございました。
この3つにはチェックを入れましょう
Weeklyは使い道がないのでパス。 他の4つはチェックします。
携帯電話などの、モバイル機器からエントリーするのを moblog というそうです。 具体的には、携帯からmoblog用のメールアドレスにe-mailを送り、それをCGIでMTに登録するという仕組みです。 最近はカメラ付き携帯電話も普及しているので、撮ったその場でmoblogするのも楽しそうです。
投稿先として、moblog専用のメールアドレスが必要です。 MSNやYahoo!などのフリーメールは、文末に広告が追加されるので、あまり向きません。
moblog対応にするには
の2つの方法があります。
レンタルサーバーの場合は、1.の方法が簡単でいいでしょう。 自宅サーバーでしたら、2.にチャレンジしてみましょう。
メールをエントリーとして登録するには、mail2entry.cgiを使います(私はWEB-YATAIから入手しました)。
しかし、私の環境(FreeBSD 4.9-Stable + Apache2 (ports))ではそのままでは使えず、以下のような変更を加える必要がありました。
$mail_subject = Jcode->new($mail_subject)->mime_decode->$to_jcode;
$mail_body = Jcode->new($mail_body)->$to_jcode;
$mail_subject = Jcode->new($mail_subject)->mime_decode->utf8;
$mail_body = Jcode->new($mail_body)->utf8;
my $outputdir = $MT_DIR . $image_dir;
my $imgpath = $mt->{cfg}->CGIPath . $image_dir;
my $outputdir = "/usr/local/www/data/mt/monolog/moblog/photo";
my $imgpath = "http://ichiro.as.wakwak.ne.jp/mt/monolog/moblog/photo";
mail2entry.cgiには、上述のMIME64関係に加えて、POP3.pmが必要です。 POP3.pmはlibnetに入っていると聞いたので、portsからlibnet-1.0.2a,1を入れてみたのですが、これは違うようです。
結局CPANから、libnet-1.19.tar.gz をダウンロードしました。 導入方法は簡単で、
# tar -xzvf libnet-1.19.tar.gz
# cd libnet-1.19
# perl Makefile.PL
# make
# make test
# make installでOKです。
自宅サーバーなら、sendmailなどを動かしてメールサーバーを立てるのがベストだと思います。 FreeBSDの場合、標準でsendmailが入っています。 あとはPOPサーバーのqpopperをports/packagesから入れましょう。
Netry blogさんNetry Moblogを参考に、mail2entry.cgiを改造してみました。
# 書き込むBlogのID
my $blog_id = 2;use MT::Author;
use MT::Category;
use MT::Placement;my $category = MT::Category->load({ label => $ARGV[0],
blog_id => $blog->id }) ;my $place = MT::Placement->new;
$place->entry_id($entry->id);
$place->blog_id($entry->blog_id);
$place->is_primary(1);
$place->category_id(19);
$place->save;デフォルトでは管理画面はセキュアなページではないので、ユーザー名やパスワードは暗号化されずに平文のまま通信されます。 パケットは簡単に盗聴されますので、非常に危険です(実際、SSL化しないで外出先からwebminを使っていたら、ものの3日でサーバーに侵入されたことがあります)。 外出先から管理画面に入りたいなら、SSL化が必須です。
OpenSSLが必要です。 FreeBSDではports/packagesになっていますので、まだの人は導入しましょう(/usr/ports/security/openssl)。 執筆時点では0.9.7dでした。
apache2をソースから導入した人は、ググれば参考になるサイトがヒットすると思います。 ports/packages入れた場合は、最初からSSL対応になっているようです。
/usr/local/etc/apache2/http.confを開き、下記のように行頭の#を削除して、コメント化されているmod_sslモジュールを有効にします。
同じくhttp.confを編集して、mt.cgiがあるディレクトリにSSLを設定します。
<Directory "/usr/local/www/cgi-bin/"> ← 自分のサイトに合わせて読み替えてください
AddDefaultCharset UTF-8
Options ExecCGI
SSLRequireSSL
</Directory>続いて/usr/local/etc/apache2/ssl.confを編集します。 内容は、自分のサイトに合わせて変更してください。
DocumentRoot "/usr/local/www/data"
ServerName www.your-site.com:443
ServerAdmin webmaster@www.your-site.comまず秘密鍵を作成するのですが、乱数代わりのランダムな内容のファイルが必要です。 何でもよいのですが、自分は/var/log/messagesを使いました。 パスフレーズを聞いてくるので、適切な文字列を入力します。
# cd /usr/local/etc/apache2
# mkdir ssl.crt
# mkdir ssl.key
# openssl genrsa -des3 -rand /var/log/messages -out ./ssl.key/server.key
1024
71975 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
........++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase for ./ssl.key/server.key:********
Verifying - Enter pass phrase for ./ssl.key/server.key:********# openssl req -new -key ./ssl.key/server.key -out ./server.csr
Enter pass phrase for /usr/local/etc/apache2/ssl.key/server.key:********
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a
DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Saitama
Locality Name (eg, city) []:Hidaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]: ← Enterキー
Organizational Unit Name (eg, section) []: ← Enterキー
Common Name (eg, YOUR name) []:www.your-site.com
Email Address []:webmaster@www.your-site.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ← Enterキー
An optional company name []: ← Enterキー# openssl x509 -in ./server.csr -out ./ssl.crt/server.crt -req -signkey
./ssl.key/server.key
Signature ok
subject=/C=JP/ST=Saitama/L=Hidaka/O=Internet Widgits Pty Ltd/CN=www.your-site.com/emailAddress=webmaster@www.your-site.com
Getting Private key
Enter pass phrase for ./ssl.key/server.key:********mt.cfg 内の設定を、以下のように変更します。
CGIPath http://www.your-site.com/path/to/mt/AdminCGIPath https://www.your-site.com/path/to/mt/https://www.your-site.com/path/to/mt/mt.cfg にアクセスして、「セキュリティの警告」ダイアログが出てきたら、OKボタンを押してログイン画面に進みます。 ブラウザによって違いますが、IEだと右下に鍵のマークが出てきます。 これで完了です。
デフォルトのBarkleyDBだと、エントリーが増えると再構築に時間が掛かるようになります。 MySQLやPostgreSQLにすれば、サーバーに掛かる負荷が軽減できるらしいです。
イメージは「速さ軽さのMySQL」と、「堅実なPostgreSQL」といったところ。 お好みでどうぞ。
自分は6.xの頃から馴染みがあるPostgreSQLにしましたが、MTユーザーではMySQLを使っている人が多いようです。 blogでは信頼性よりも軽さが要求されるのかもしれません(MTがPostgreSQLに対応したのが遅かったというのもありそうですが)。
執筆時点での最新は、7.3.4でした。 FreeBSDなので、portsから導入します(場所は /usr/ports/databases/postgresql7)。
PostgreSQL-7.3.xからは、make install時の文字コードの指定がなくなりました。
続いてDBを初期化しますが、ここで文字コードを指定します。 自分のMTではUTF-8を使っているので、同じ文字コードにしました。
# su -l pgsql
$ initdb --encoding=UTF-8 --no-locale
$ /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
postmaster successfully started
$ psql -l
List of databases
Name | Owner | Encoding
-----------+-------+----------
template0 | pgsql | UNICODE
template1 | pgsql | UNICODE MT用のデータベース(例:mtdb)を作成します。 私はWebminを使っているので、それで作りました。
管理画面から「エントリーの書き出し」を行います。 これは何らかの失敗で、元のデータベースが消えてしまった場合のバックアップです。 移行が成功した場合は使用しません。
"DataSource"の行をコメントアウトし、データベース関係の記述を追加します。
# The filesystem path to the 'db' directory, where your MT database
# files are stored. You will probably need to change this when you
# first install MT; instructions for doing so are in the Installation
# Instructions, in INSTALLING THE MOVABLE TYPE APPLICATION CODE, Step 8.
# DataSource ./db
ObjectDriver DBI::postgres
Database mtdb
DBUser pgsql初期状態では"database_password"とだけ書かれてあると思います。 それを消して、pgsqlユーザーのパスワードを書きます。
ようやく移行作業です。 移行に使う mt-db2sql.cgi は、Upgrade VersionのMTにしか入っていません。 movabletype.orgからダウンロードしてください。
サーバーに mt-db2sql.cgi をアップロードして、実行属性をセットしたら、ブラウザから mt-db2sql.cgi にアクセスしてください。
Loading database schema...
Loading data...
MT::Author
1
MT::Blog
1
MT::Category
1
10
・
・
・
98
99
MT::TBPing
3
Updating sequences
MT::Comment => 12
MT::TBPing => 3
MT::Placement => 188
MT::Log => 269
MT::Blog => 4
MT::Template => 56
MT::Permission => 6
MT::Entry => 596
MT::TemplateMap => 20
MT::Category => 29
MT::Trackback => 617
MT::Author => 3
Done copying data from Berkeley DB to your SQL database! All went well.
上記のようなメッセージが出たら成功です。 アップロードした mt-db2sql.cgi は消しておきましょう。
PostgreSQLのV7.4.1が出たようです。 PostgreSQLは、同じV7でもV7.3とV7.4ではデータベースの互換性がありません。 アップグレードするには、データベースのデータを一旦バックアップして、アップグレードした後、再びリストアする必要があります。
Webminを使ってやりました。 MTのデータベース(例:mtdb)を開いて、「データベースの退避」ボタンをクリックします。 適当な場所に、適当な名前(例:mtdb.tar)を付けて、保存します。 成功したら、モジュールインデックスに戻り、「PostgreSQLサーバの停止」ボタンを押して、PostgreSQLを停止させます。
V7.3をアンインストールして、データベースが置かれているディレクトリ内を削除。 それからV7.4をインストールします。
# cd /usr/ports/databases/postgresql7
# make deinstall
# rm -R /usr/local/pgsql/data
# make install
その後、「データベースの初期化」を行います。 手順は、「8.PostgreSQLへの移行」を参照してください。
Webminを使ってやりました。 モジュールインデックスから、「PostgreSQLサーバの起動」ボタンを押して、PostgreSQLを起動します。 起動したら、MT用のデータベース(例:mtdb)作成します。 作成したデータベースを開き、「データベースの復旧」ボタンをクリックします。 保存しておいたファイル(例:mtdb.tar)指定し、「リストア」ボタンを押せば完了です。
MTはデータベースに格納されたデータと、テンプレートを再構築(リビルド)することにより、静的なHTML文書を作成します。 エントリー数が増えると、この再構築の仕事量が多くなり、サーバーの負荷が高くなったり時間が掛かるようになります。
再構築の負荷を軽減する方法の一つとして、SSIを使ってHTML文書のデータ量を減らすことが出来ます。
MTを動かしているサーバーで、SSIが使えるようになっている必要があります。 SSIそのものについての説明は省略します。 各自で調べてください。
MTのテンプレートは、多くの独自タグを含みます。 独自タグを含む内容を切り出して、直接SSIで挿入してもうまくいきません。 切り出した部分で新しくテンプレートを作成し、生成したHTML文書をSSIで挿入することになります。 MTの独自タグを含まないHTML文書をSSIで挿入する場合は、テンプレートを作成する必要はありません。 この段階は飛ばしてください。
MTの標準テンプレートで、SSI化の対象となるのは下記の4つです。
Main Indexは1つしかHTML文書を作成しないので、SSIを使ってもあまり効果が無いですが、あとの3つは多くのHTML文書を生みますので、効果は高いです。
これらのテンプレートから、冗長性の高い部分を抜き出して、新しくテンプレートを作成します。 例えば、<div id="banner"> の部分を抜き出して、bannerという名前でテンプレートを作成します。 出力ファイル名は
banner.html とします。
<div id="banner"><a href="<$MTBlogURL$>" accesskey="1"><img
src="http://www.your-site.com/blog/mt-static/images/banner.gif"
width="450" height="75" alt="Still Laughin'"
id="banner_logo" /></a><br /><h1><a href="<$MTBlogURL$>" accesskey="1"><span
class="description"><$MTBlogDescription$></span></a></h1></div>テンプレートを保存して、bannerを再構築します。 これで、「WEBLOGの設定」のLocal Site Path(例えば /home/melody/public_html/blog )で指定した場所に、banner.htmlが出来ているはずです。
カテゴリやエントリのリスト表示など、再構築で動的に変わるものは、Main Indexに連動して再構築するようにします。 静的な内容のテンプレートは、Main Indexの再構築に連動しないようにすると、再構築の負荷が軽減できます。
次に、標準テンプレートにSSI命令を埋め込みます。 Main Indexテンプレートに、上記の
banner.html を挿入する時は、<div id="banner"> の部分をSSI命令に置換します。 埋め込むHTML文書のパスは、Webサーバーのルートからの絶対パスで指定します。 例えばルートが/home/melody/public_html
だとすれば、/blog/banner.html となります。
</head><body><!--#include virtual="/blog/banner.html" --><div id="content"><div class="blog"><MTEntries>Main Indexテンプレートを保存して、Main Indexを再構築します。 変更前と同じように表示できたら成功です。
その他に別テンプレート化し易いのは、下記のような部分です。
<head>の中の<meta>や<link>個々のHTML文書で異なる部分(例えば、<div class="blog">など)は、SSIで挿入することはできません。 Individual Archive のコメント記入フォームもNGです。
SSIは便利ですが、乱用するとかえってサーバーの負荷を高めてしまいますので、注意しましょう。
Amazon.com, Inc. は米国の有名なオンライン書店です(既にショッピングモールと呼ぶべきですが)。 日本でもサービスを行っています。 そのAmazonが提供しているのが、Amazon Webサービスです。
Amazon Webサービスを、MTから日本語で使うためのPlugin(MTAws)は、「Movable Typeで今すぐできるウェブログ入門」の著者である 平田大治氏のサイトで配布されています。
Amazon Webサービスを利用する為には、デベロッパー・トークンが必要です。 ついでにアソシエイトIDも申請しておくと良いでしょう。
MTAwsは、LWP::UserAgent と XML::Simple、及び Jcode を必要とします。 多くの場合、Jcodeは導入済みでしょうが、あとの2つは追加する必要があるかもしれません。 どちらも ports/packages になっていますので、それを利用しましょう。
LWP::UserAgent は、p5-libwww に含まれています(場所は/usr/ports/www/p5-libwww)。 XML::Simpleは、p5-XML-Simple です(場所は/usr/ports/textproc/p5-XML-Simple)。 p5-libwww の ports はあまり賢くないので、既に p5-HTML-Parser や p5-HTML-Tagset が導入済みの場合は、make がストップするかもしれません。 私の場合はそれぞれ少し古かったので、p5-HTML-Parser や p5-HTML-Tagset を make deinstall してから、p5-libwww を make install 後、pkgdb -F で整合を取りました。
画面の横に検索結果を表示するなどの場合は、Readme.txtに書いてある例を元に、Main Indexテンプレートに直書きすれば良いでしょう。 しかし一般的なのは、エントリを作成してその中で紹介する方法でしょう。
まず新規にテンプレートを作成します。 名称は適当にawsとでも付けてください。 内容は以下のような感じです。 赤字の部分は、各自のデータに読み換えてください。 ”query”のデータは、本のISBN番号です。
<MTAws dev-t="developer-token" associate_id="associate_id" search="AsinSearch" query="4844318128">
<a href="<$MTAwsurl$>">
<img src="<$MTAwsImageUrlMedium$>" alt="<$MTAwsProductName$>"
/>
<$MTAwsProductName$>
<$MTAwsAuthors$>
<$MTAwsManufacturer$> / ISBN: <$MTAwsAsin$>
</a>
</MTAws>表示する画像の大きさは、大(MTAwsImageUrlLarge)、中(MTAwsImageUrlMedium)、小(MTAwsImageUrlSmall)が選べます。 他にも使えるタグがありますので、Readme.txtを参照してください。
作成したawsテンプレートに、紹介したい本のISBN番号を記入して保存・再構築します。 成功したら、できたページのソースを表示させて、エントリにペーストします。
本当はBOOKMARKLETみたいな使い勝手だったらいいんですけどね。
Perlをの実行を高速化する、Apacheのモジュールです。 MTはPerl/CGIで書かれていますので、mod_perlを利用することで、MTの実行を高速化することができます。
と言っても自宅サーバーの場合は他の負荷が無いので元々高速ですし、blogを閲覧する時には静的なHTML文書を読み出しているので、mod_perl化のメリットはありません。
mod_perlはApacheのモジュールですから、対応するApacheのバージョンによって、ports/packagesが異なります。 portsの位置は、Apache1.Xは/usr/ports/www/mod_perl 、Apache2は/usr/ports/www/mod_perl2 です。
Apache::Status の確認には CGI.pm が必要です。 portsが提供されていますので、インストールしましょう(/usr/ports/www/p5-CGI.pm)。
Apacheの設定ファイル(/usr/local/etc/apache2/http.conf)のモジュール設定の辺りに、以下の記述を追加します。
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule perl_module libexec/apache2/mod_perl.so
PerlSetEnv PERL5LIB /usr/local/www/cgi-bin/MT/lib:/usr/local/www/cgi-bin/MT/extlib
PerlModule Apache2
PerlOptions +GlobalRequest
さらに、http.confの後ろの方、/server-infoの下辺りに、以下の記述を追加します。
# Allow remote server configuration reports, with the URL of
# http://servername/server-info (requires that mod_info.c be loaded).
# Change the ".example.com" to match your domain to enable.
#
<Location /server-info>
SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from ichiro.as.wakwak.com
</Location>
<Location /perl-status>
SetHandler modperl
PerlResponseHandler Apache::Status
</Location>
mod_perl2をインストールしただけでは、高速化はされません。 MTがmod_perl2を使うように、設定してやる必要があります。
マケズギライ@Web「カテゴリのリンクを表示させる」を参考にさせて頂きました。 ありがとうございます。
どこを参考にしたのか忘れてしまいました(爆)。 マケズギライ@Web「エントリに登録カテゴリとそのリンクを表示する」に載ってるのと基本的には同じです。 ありがとうございます。
BLOG質問箱「カレンダーで1日まとめて表示する」を参考にさせて頂きました。 ありがとうございます。
Fenrir's Blog「Monthly Archiveのカレンダー」を参考にさせて頂きました。 ありがとうございます。
実際にはちゃんと送れているのに、エラーが表示されるのを防ぐ方法です。 Modern Syntax「トラックバックPINGエラーで何度も送ってしまう罠」を参考にさせて頂きました。 ありがとうございます。