XSERVERにてWordPressのマルチサイト化 その2

タイトルが間違ってました。なので再度雑記をと。

マルチサイト化ですが、何度失敗したことか。

MovableTypeを使用していた時は、なんの疑問も持たず、マルチサイト化できていたので、心が何度折れたことか。

思うに、XSERVERのようにドメイン、サブドメイン単位でディレクトリーの構成が決まってしまうレンタルサーバーではマルチドメイン化は、普通にやると失敗してしまう。

さくらのレンタルサーバのようにディレクトリーの構成を自分で指定できるレンタルサーバーでは問題なくできてしまう。

私の場合、Wordpressをインストールするサブドメインともう一つのサブドメインでディレクトリーを個別に設定してしまい、撃沈されたわけですが。

まだ、初期状態の確認をしただけですので、このブログをそちらに引っ越ししながら、記録に残していけばいいかなと、のんびりと構えてます。

前提条件

XSERVERのような、ディレクトリを指定できないレンタルサーバーか、ディレクトリ構成を設定できるがすでに使用していて、移動が困難な場合を前提にしています。

また、SSHが利用でき、lnコマンドが使えることが最低条件になるかと思います。

嘘があったら、コメントでお知らせください。

WordPressをインストール

まずは、Wordpressをインストールするメインのドメイン(サブドメインでも)を決めます。

インストールは普通に行ってください。

設定ファイルの編集

WordPressの設定を変更しないと始まりません。『wp-config.php』ファイルを変更します。

define(‘WP_ALLOW_MULTISITE’, true);

WordPressに入りなおすと、『ツール』に『ネットワークの設定』なんていうメニューが追加されます。

ここで必ず『サブドメイン』を選択してインストールしてください。

最後に、『wp-config.php』と『.htaccess』ファイルを変更しなさいと表示されますので、変更してください。

サイトの追加

この辺りは、それぞれ適切な値を決めて作成してください。

プラグインのインストール

複数ドメインの運用にはプラグイン『WordPress MU Domain Mapping』を使います。サブドメインの場合にも必要なのかはよく調べていませんが、私がサブドメインを構築した際には、インストールしてマッピングしました。不要なのかもしれません。

いよいよ試してみる

Wordprssをインストールしたサイトは、問題なく表示されると思います。当然、管理画面も。

まず、追加したサイトの管理画面を見てみましょう。エラーで表示しませんね。当然です。とび先のリンクにWordpressが存在しませんから。追加したサイトもエラーで表示されません。

冷静にマルチサイト化の解説サイトをみる

サブドメインにインストールする解説で、いままで書いてきた内容が事細かにスクリーンショットも交えて解説されている。

がしかし、肝心なサイト(論理)と実体(物理)との組み合わせを解説してるところがないので、どうでもいいんだろうと思い込んでいた私がいます。

ある意味、共通化する

ここでは2つのサイトを使用していて、Wordpressをインストールしたサイトは問題がない。では、問題のあるサイトが問題のないサイトを内部(物理)的に参照できるようにします。

WordPressをインストールしたサイトの物理構造をそっくりもう一つのサイトで再現するだけです。ここからは、lnコマンドでシンボリックリンクを張るだけです。

今回は、『http://xxxxx.com/』にインストールしてしまったので、トップディレクトリーに配置したファイルはすべてシンボリックリンクを張り、残りのディレクトリーはディレクトリー単位でシンボリックリンクを張ります。

結果

再度、見れなかったサイトを見てみましょう。管理画面を含めて正常に表示できるはずです。

え?みれませんでしたか?

私と一緒に、勉強しながらチャレンジしてみましょう。

取り敢えず最後に

今回は、サイトのトップにインストールしたので、wpなどのサブディレクトリーに配置しても動作するのか試してみたいです。これには理由がありまして、上記にも書きましたが、ファイルを直接シンボリックリンクしているので、Wordpressのファイルが増減されると、アップデート後に手動で操作しなくちゃいけなくなりますからね。

サイトテーマの骨組みを作りながらので、のんびりになるかもしれません。

これだけでやりきった感がある私って何?

 

引っ越し

なにかとメンテナンスが面倒な自宅サーバーをやめるべく、レンタルサーバー探しをしてました。

もう、何年も前からです。

取り敢えず移すなら、さくらのレンタルサーバでもよかったんだけど、メアドがドメインが違ってもユーザー名はユニークにしなくちゃいけないという制限があったもので、躊躇してました。

それに、ちょっとしたアクセスの増大ですぐにアクセス制限されちゃうので、複数ドメインの運用には向かないかなって。特にWordPressみたいに、常時PHPがHTMLを吐き出すものだと。

少し話を戻して、重い腰を上げる理由になったのが、LANケーブルの経年劣化です。自宅サーバーでは2つのドメインを運用していました。

外部からVPNで家庭内LANに入る口を開けていたのですが、流石に物理的に壊れたものは直せず。

一週間くらい吟味しました。レンタルサーバーを。マルチドメインでの運用になるので、管理しやすいところがいいなって。今運用しているサイトは1つを除いてWordPressになるので、サブドメインの数も入れたMySQLが必要になります。さらに言えば、さくらのレンタルサーバより速いこと。

そんで、結果として残ったのが、XSERVERです。X20のプランで契約したので、ディスクの容量もそう簡単にはなくならないでしょう。MySQLも70個まで使えるし、余裕綽々って感じ。

 

試用期間中に1サイトを無理やり引越ししました。ちょっと設定が復元できなくて焦ったけど、まあ、想定内だったのでよしと。

もう一個は、リニューアルしようかと思ったけど、風邪のため頭が働かず断念してそのままひっこしました。

どちらも、ドメインの管理はスタードメインです。そのせいなのかDNSをちょちょっと変更するとすぐに浸透してあっという間に引っ越し完了。

あとは、自宅サーバーの火を落とすだけ。XeonなCPUで格好よくサーバーライフを楽しんでいたんだけど、当分自宅サーバーに火が入ることはないでしょう。

 

XSERVERですが、X20以上の契約をするとドメインが1個、契約の更新料も含めて無料になるサービスを行っていたので、ありがたく頂きました。こっちは、なかなかDNSの設定が浸透せず焦りましたが、30分ほどで浸透しましたかね。

 

最後の問題は、このブログ自体ですね。記事を全然書かなくなったので、アクセス数もほぼなしに近い状態。なのでパーマリンク等も含めて、WordPressの仕様に合わせようかと計画中。もしかすると、ドメインそのものも変更するかもです。やってもいいんだけど、それやると、さくらのレンタルサーバが空っぽになっちゃうことかな。

まあ、新しいテーマができてから考えよう。

MovableTypeからWordPressへ引っ越し

今回、Movable Type Pro 5.2.6からWordpress 4.0への移行過程をメモしておきます。

まず、MovableTypeのエクスポートを行ってみる・・・。ん、何かが足りてない。そうなんです、パーマリンクとかかサックリなくなっています。このままじゃいけないというので検索してみた、ありました。

下記の操作の前に、必ずバックアップを取ってください。

MovableTypeからWordPressへの完全移行方法

どうやら/lib/MT/ImportExport.pmを変更するらしい。

[perl highlight=”2,3,4″]
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$><MTEntryIfTagged include_private="1">
PERMALINK: <$MTEntryPermalink$>
TAGS: <MTEntryTags include_private="1" glue=","><$MTTagName quote="1"$></MTEntryTags></MTEntryIfTagged>
ID: <$MTEntryID$>
[/perl]

上記の「DATE:」という記述を探し、その下に「PERMALINK」「EntryIfTagged」「ID」の行を追加します。

後はエクスポートです。

エクスポートしたファイルを眺めていると、あれ、パーマリンクの「post-1」などが「post_1」に変わっているではありませんか。これじゃ困るので置換しましょう。

テキストエディタなどで「BASENAME: post_」を「BASENAME: post-」に変換し保存します。安全のため、ファイル名を変更して保存します。

下準備はできたので、Wordpress側のインポートのプログラムを編集しましょう。

WordPress 3.0にMovable Typeのタグをインポートする

まるっと転載させて頂きます。

wp-content/movabletype-importer配下にある、movabletype-importer.php編集。

[php highlight=”27,28,29,30″]
function save_post(&$post, &$comments, &$pings, &$tags) {
  $post = get_object_vars($post);
  $post = add_magic_quotes($post);
  $post = (object) $post;

  if ( $post_id = post_exists($post->post_title, ”, $post->post_date) ) {
    echo ‘<li>’;
    printf(__(‘Post <em>%s</em> already exists.’, ‘movabletype-importer’), stripslashes($post->post_title));
  } else {
    echo ‘<li>’;
    printf(__(‘Importing post <em>%s</em>…’, ‘movabletype-importer’), stripslashes($post->post_title));

    if ( ” != trim( $post->extended ) )
      $post->post_content .= "n<!–more–>n$post->extended";

    $post->post_author = $this->checkauthor($post->post_author); //just so that if a post already exists, new users are not created by checkauthor
    $post_id = wp_insert_post($post);
    if ( is_wp_error( $post_id ) )
      return $post_id;

    // Add categories.
    if ( 0 != count($post->categories) ) {
      wp_create_categories($post->categories, $post_id);
    }

    // Add tags or keywords
    if ( 1 < strlen($tags) ) {
      // Keywords exist.
      printf(‘<br />’.__(‘Adding tags <em>%s</em>…’, ‘movabletype-importer’), stripslashes($tags));
      wp_add_post_tags($post_id, $tags);
    }
  }
  …中略…
}
[/php]

[php highlight=”14,34,42,51,52″]
function process_posts() {
global $wpdb;

$handle = $this->fopen($this->file, ‘r’);
if ( $handle == null )
return false;

$context = ”;
$post = new StdClass();
$comment = new StdClass();
$comments = array();
$ping = new StdClass();
$pings = array();
$tags = ”;

echo "<div class=’wrap’><ol>";

while ( $line = $this->fgets($handle) ) {
$line = trim($line);

if ( ‘—–‘ == $line ) {
// Finishing a multi-line field
if ( ‘comment’ == $context ) {
$comments[] = $comment;
$comment = new StdClass();
} else if ( ‘ping’ == $context ) {
$pings[] = $ping;
$ping = new StdClass();
}
$context = ”;
} else if ( ‘——–‘ == $line ) {
// Finishing a post.
$context = ”;
$result = $this->save_post($post, $comments, $pings, $tags);
if ( is_wp_error( $result ) )
return $result;
$post = new StdClass;
$comment = new StdClass();
$ping = new StdClass();
$comments = array();
$pings = array();
$tags = ”;
} else if ( ‘BODY:’ == $line ) {

…中略…

} else if ( 0 === strpos($line, "CATEGORY:") ) {
$category = trim( substr($line, strlen("CATEGORY:")) );
if ( ” != $category )
$post->categories[] = $category;
} else if ( 0 === strpos($line, "TAGS:") ) {
$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, "PRIMARY CATEGORY:") ) {
$category = trim( substr($line, strlen("PRIMARY CATEGORY:")) );
if ( ” != $category )
$post->categories[] = $category;
…中略…
}
}
…中略…
}
[/php]

 

上記に加えて

[php highlight=”8,9,10,11,12,13″]
function process_posts() {
global $wpdb;

…中略…

} else if ( ‘COMMENT:’ == $line ) {

$context = ‘comment’;
} else if ( ‘PING:’ == $line ) {
$context = ‘ping’;
} else if ( 0 === strpos($line, "PERMALINK:") ) {
$value = trim( substr($line, strlen("PERMALINK:")) );
$tmpvalue = strrchr($value,"/");
$post->post_name = substr($tmpvalue, 0, strpos($tmpvalue, "."));
} else if ( 0 === strpos($line, "TAGS:") ) {
ns/movabletype-importer$tags = trim( substr($line, strlen("TAGS:")) );
} else if ( 0 === strpos($line, ‘AUTHOR:’) ) {
[/php]

これでインポートの準備は完了。

MovableTypeが出力したhtmlファイル(PHP化されている方はphp)ファイルを削除して、それトップページを見てみましょう。

ん~いい感じだけど、パーマリンクが・・・・・・エクスポートしたはずなのに・・・。

んで、Wordpressの管理画面を開いて、[設定][パーマリンクの設定]を開きます。

私の場合は年月で記事を吐き出していたので、カスタム構造を選択し

/archives/%year%/%monthnum%/%postname%.php

な感じです。無事にパーマリンクを引き継げました。

あとは、MovableTypeで管理していた画像たちWordpressのメディアに登録し、Movabletypeの痕跡を消してしまいましょう。

MT形式からWordPressへ移行した際に画像をインポートするプラグイン

ダウンロードして、FTPなどでアップし、プラグインを有効化し、実行、停止、削除、これだけです。

記事に埋め込まれているURLもしっかりと書き換えてくれる優れもの。

確認後は、バッサリ消してしまいます。

このブログのURLの中身は.htaccessとindex.php、favicon.ico、そしてメディアとして登録されたuploadsのみです。

だらだら書きましたが、これで全てです。

MovableTypeからWordPressへの移行

長らく、ブログを引退しておりましたが、Wordpressでサイトを再構築してみようと心に決め、移行しました。

テーマは1から作りこんでおります関係上、不具合が多いかもしれません。2週間で覚えるのは無理って感じです。

いろいろ考えてみたのですが、CMSが変われば、それまで蓄えた情報が原作エンジンから姿を消えてしまうでしょう。

そこは考えようで、sitemap.xmlをGoogleさんにお知らせして、新しいURLでインデックスしてもらうしかありません。

インストールしてみて感想ですが、Movable Type 改PHP版よりWordpressの方が少しレスポンスがいいかもしれません。やっぱり、MySQLが新しいのに当たったからでしょうか。

デザインはシンプルな方がよいので、Movable Typeのクラッシックブログというテーマにわざと似せました。データを引き継ぐんだしいいか。

少々あったトラブル等も含め、今後記事を書いていきたいと思います。

今回行った以降は、Movable Type version 5.2.6 からWordpress 4.0になります。

HP ProLiant ML110 G6壊れたかも

 HP ProLiant ML110 G6が2台あり、そのうちの1台がパワーを入れてもBIOSの画面が表示されず、ファンだけが唸り続ける。

ここ数か月使っていなかったが、FreeNASとかで遊んでいただけなのになぜブートしなくなったのかな。日ごろの行いが悪いからかな。

3連休も今日で終わりなので、来月の3連休で最低限のパーツにして、ケーブル関係を刺し直し、それでだめならまた安サーバーを購入しなきゃな。

Movable Typeセキュリティーアップデートの提供を開始

今回は早めのアップデートを行ってみた。

内容は、

  • Movable Type の mt-wizard.cgi および同梱されているテンプレートの一部に、クロスサイトスクリプティングの脆弱性が存在します。ユーザのウェブブラウザ上で任意のスクリプトを実行される可能性があります。Trustwave 社よりレポート(TWSL2012-002)。
  • コメント登録およびコミュニティ機能に、セッションハイジャックが可能となる脆弱性が存在します。特定の条件において、遠隔の第三者によって、ユーザになりすまされる可能性があります。
  • コメント登録およびコミュニティ機能に、クロスサイトリクエストフォージェリの脆弱性が存在します。ユーザが、当該製品にログインした状態で悪意あるページを読み込んだ場合、設定を変更されたり、データを更新されたり、情報を閲覧されたりする可能性があります。
  • Movable Type のファイル管理システムには、OS コマンドインジェクションの脆弱性が存在します。管理画面にログインすることができ、かつファイルアップロードの権限を持つユーザによって、任意の OS コマンドを実行される可能性があります。

との事なので、と言いながらいつもなら先延ばしすることろですが、どうせ上書きで終わりだろうと、ファイルをアップロード。

何事もなくアップデート完了。

問題は再構築だな。PHP & モジュール化を行っているにも関わらずインデックスページだけで36秒とか何かおかしいだろう。同居している他人様がリソースを食いつぶしているとしか思えない重さ。

そろそろ本気モードで自宅サーバーへ移行しようかな。他のは稼働しているわけだし、そんなにPVがあるわけじゃないしね。仮想マシンが1つ位増えても電気代は誤差範囲だろうしな。

その前にレンタルなメールサーバー探さないといけないか。トホホ

Citrix XenServer 6.0 Beta

VMware vSphere Hypervisor(無料版)がvRAM8GB制限を5.0から実施するというりリーク情報から、有償版を購入して使い続けるか、他の仮想化ソリューションを使用するか年明け後には深刻な事態になりそう。

Citrix XenServer 6.0 Beta(Release Date: 7/5/2011)をまだ手を付けていないHP ML110 G6にインストールしてみた。

何ら問題なくインストール終了。まあ、USBメモリーに入っているFreeNASちゃんが起動しちゃうので、外して起動になるんだけど。

“Citrix XenServer 6.0 Beta” の続きを読む

VMware vSphere Hypervisor 5.0 家庭内仮想終了!

WMwareの発表によると、VMware vSphere Hypervisor(無料版)が現行の4.1よりも制限が厳しくなるようだ。

私の様にフリーでエンジニアやってて、サービスを定評するに当たり、仮想RAMが8GBに制限されるというのは死活問題になるんじゃないだろうか。

低賃金で、ドメイン、固定IP電気代を無償で提供している私は、今後サービスが続けられるかが問題になる。

無料だからって8GBはないよな。せめて16GBにはして欲しかった。

法人だったら簡単に購入でき、経費でなんとでもなるだろうが、個人じゃそこまではね。

Citrix XenServerの再評価もやる必要性が出てきちゃうのかな。

無償だから仕方がないとは思うんだけど、極端すぎるよな。

NEC GT110bにはVMware vSphere Hypervisor 4.1 update 1が入って弄れないので、まだ完成していないHP ML 110に入れてみますか。

なぜHyper-Vが候補に出ないかというと、パッチが多すぎて、ホスト側の再起動がすべての仮想マシンに影響しちゃいますからね。

固定運営費を出来るだけ抑えたい私にとってはショックのあまりボー然としてます(風邪で休んでるんですけど)。

まだハードも揃ってないし、SSLとかもあるんだぞぇ。

個人でできる運営費がばかばかしくなりそうで怖いが、いまの所、安定して動いているからいいけど。

発売前に何らかの可能性を祈って、発表日を待つことにしよう。

個人、非営利団体には、それなりの処置を希望するものであります。

TechPowerUp GPU-Z 0.5.2 Released

これ、意外と重宝するツールです。

TechPowerUp today released version 0.5.2 of GPU-Z, our popular graphics hardware information and diagnostic utility that gives you information about the installed graphics hardware in your computer, and lets you monitor various parameters such as clock speeds, temperatures, fan speeds, and voltages, all in real-time. GPU-Z is also backed by our overclock validation system and video card BIOS database. Version 0.5.2 adds support for new GPUs, improved support for known GPUs, and a timely dose of stability improvements

GPUの温度等、エアフローが思い通りに機能しているかなど、目安にするには良いツールです。

私も、増設時や入れ替え時には、この値を参考にしながら、設置位置を変えたり、稼働するクーラーを決めて、出来るだけ高温にならないように気を付けている。

まあ、あくまで目安ですけどね。今時のCPUにしろGPUにしろ電気をたっぷり食べるので、私は常用でOCなんて無で出来るだけ低い電話つ電圧で動くようにしてます。

話は少し飛ぶけど、一般家庭のサブブレーカー当たり15Aって、現在の時代に合ってない気がするな。私の様なミドルの下の方で使ってる人はいいけど、ハイエンドパソコンになれば、1500Wの電源なんて当たり前で、ギリギリすぎて私にはそこまでする勇気はない。

実際、私の仕事する部屋は、部屋のサブブレーカーのほかに2系統からも給電している。パソコンがいきなり落ちて、仕事のプログラムとかデーターとか無くなったらやだしね。バックアップ取ってても心配。早くUPS買えばいいんだけど、現在設置場所の確保等が出来ていないため見送っているけど、今年中には欲しいな。

CentOS 5.6が出てた(リリースノートのみ)

これでサーバーOSはCentOSで確定でいいかも。リポジトリ追加とかで5.5を使用しようと環境作ってたけど、破棄して新規に5.6で作り直ししよっと。

まあ単純にphpが5.3に上がったことかな。これでいろいろやり易くなるな。

その他の内容はリリースノートを参照してください。

 

takeさんよりご指摘頂いた通り、リリースノートのみでダウンロードやアップグレードは現時点では行われておりません。誤解を招くタイトルにしたことを深くお詫び申し上げます。