今回、あるレンタルサーバから別のレンタルサーバへ内容を移動するというお仕事が舞い込みました。
元のレンタルサーバのセキュリティが甘く、レンタルサーバにアップしていたコンテンツがウイルスに侵されたのです。
作業開始
先ずはウイルス駆除。やられていたのはPHPファイル。
WordPressはPHPファイルの塊です。ファイル数は600オーバー。仕事でなかったら萎えるところです。
さて、ウイルス駆除をするためには、ファイルをサーバから手元のPCに転送しなければなりません。
しかし、ファイルは読み出し不可の状態です(「危険なPHPファイル」という事で、サーバー側がファイルを読み出し不可にしていたのです)。
600オーバーのファイルを、ちまちま読み出し可にするのは流石に現実的ではないので、シェルアクセス(サーバに接続して、サーバ上でコマンドを実行できるするための接続)を行い、一気に600オーバーのファイルを読み出し可にしました。
そのあと「FTP(サーバから手元のPCへファイルを転送する方式)でまとめて転送!」と思ったのですが、何故か一気に転送できません(全く転送できないわけではないのですが、途中で引っかかるのです)。
ここで時間を取られるのは嫌なので、サーバ上のファイルを1つにまとめて(PCだとZIPファイルみたいなものです)、その大きなファイル1つをFTPでPCに転送しました。
そのあと、サーバ上のファイルを再び読み出し不可の状態に戻します(ブラウザでアクセスされて、ウイルスが広がったら大変ですよね?)。
ここからようやく作業が開始です。
作業時間は…
ファイルの塊が手元のPCにあるので、これを展開します。出てきました、600オーバーのファイル。
1つ1つをテキストエディタ(ファイルを読み書き変更するためのソフトです。)で開き、ウイルス部分を削除、保存。
これをファイル数だけ繰り返します。単純作業を延々XX時間掛けて行い、アクセスされても害のないコンテンツが出来上がりました!(文章だとこれだけなのですが、作業した私は死にました。合掌)
これを再びファイルの塊にして、サーバにFTPで転送します。
転送しても、サーバ上では単なる塊でしかないので、「サーバ上で展開」しなければなりません。
そのため再びサーバにシェルアクセスし、元の危険なファイルを一気に削除。
で、ファイルの塊を一気に展開、読み出し可能に設定しなおして、安全なファイルに置き換えました。
これで作業中にアクセスがあっても大丈夫です(後述しますが、サーバの切り替えは瞬時にはできないので、新しいサーバの準備が終わって、ブラウザで新しいコンテンツが表示されるまでタイムラグがあるのです)。
ワードプレスのお引越し
さて、WordPressでは、内部でデータベースというものを使っています(データを効率的に出し入れするものがデータベースです)。
これのお引越しも一緒にしなければなりません。
という事で、元のサーバのデータベースにアクセスして、内容をゴッソリと引き揚げます。
また、WordPressでは、XMLというデータ形式で内容のバックアップを取れます。
これを取るために、指示されたIDとパスワードでWordPressにアクセス…できないではありませんか!小一時間悩みました。
ここで強引な手段に出ます(方法は内緒です。外部からではできませんが、悪用されたら困るので…)。
こうして、無事にXML形式でバックアップも取れました。
これで「元のコンテンツ」、「データベースの内容」、「WordPressのバックアップ」と一通りの材料が手元に揃いました。
ここから本格的に新しいサーバへの移転作業を開始します。
新サーバでの作業に着手
新しいサーバは、当然空っぽです。指示されたIDとパスワードを使って、先ずはアクセスされたら表示される場所を設定します。
更に、新しいサーバで「データベース」の準備、最新版のWordPressの準備(インストール作業は、新しいサーバにhttp://~~~でアクセスできないとならないので、準備だけ)を行います。
この作業が終わったのち、DNSの切り替え(古いサーバではなく新しいサーバへアクセスさせるようにする)を行います。
このDNSの切り替え、瞬時には終わりません。インターネットの仕組み上、早くて1~2時間、遅ければ日単位で時間がかかります。
「早く切り替わってくれ~~」とお祈りをしたのち、切り替わるのを待ちます。
普段の行いがいいからでしょうか、1時間半ほどで切り替わりました。
ここから新しいサーバでの作業開始です。
先ずは新しい最新版のWordPressをインストールします。難なく終了。
元のページはWordPressで作られていたため、「これを期にWordPressのバージョンを上げよう!」と思っていました。
新しいWordPressをインストールすると自動的に空のデータベースが自動作成されるので、これを削除してバックアップで取っておいた元のデータベースの内容へと差し替えを行います。
それからWordPressのXML形式のバックアップを新しいWordPressに戻します。
ここで表示確認。画像が無いだけで(これは想定済み)、記事が表示されます。
レイアウトは崩れています。これも想定済みで、元のテーマを入れていないのが原因です。
何も表示されない!!
そうして、テーマをWordPressにインストールして、切り替えを行うと……何も表示されないではないですか!!!これは困りました。
元のWordPressのバージョンが古く、新しいWordPressには対応していないことが原因でした。
依頼内容が「元と同じ表示に」なので(まぁ、当然ですね。)、頭を抱えてしまいました。
ここで取るべき道は一つ。WordPressの更新を諦めて、元のWordPressに戻す。
しかも新規インストールではなく、元のサーバに上がっていたファイルをそのまま活用する方法です。
この方針で改めて新しいサーバ上で作業を開始します。
先ずは、跡形もなく最新のWordPressの痕跡を消すことを始めます。
シェルアクセスでファイルを全削除、データベースも内容を全削除。これで痕跡は消えました。
そこで、手元にある「ウイルス除去済みのファイル」にある、WordPressの設定ファイル、具体的にはデータベースの指定を、古いサーバの情報から新しいサーバの情報に書き換えます。
これを再びファイルの塊にして、FTPで新サーバに転送します。
転送しただけでは展開できていないので、新しいサーバにシェルアクセスして、塊を展開、読み出し可能に設定して、ファイルの準備を終わらせます。
データベースをお引越し
次はデータベースの引っ越しです。
新しいサーバのデータベースに、バックアップを取っておいた古いデータベースの内容を挿入します。これで表示される筈です。
表示させると、何やらエラーが…。
「???」と思い、詳しいエラーが表示されるように新サーバの設定を変更し、再度表示。
なんと、WordPressに追加されている「プラグイン」がエラーを起こしています。
古いサーバと新しいサーバでは、PHPのバージョンが「微妙に」異なっていることは事前調査で分かっていました。
そこで、新サーバのPHPのバージョンをだんだんと下げてみます。すると…表示されました!エラーも出ません。
が、今度は余計な(古い)記事が表示されるようになりました。暫し考えます。
「古いサーバに移管する前に、サーバ移管を行っていて、その時記事が表示されなくなったのを放置して、今回、新サーバでPHPのバージョンが本来のバージョンに戻ったので、記事が表示されるようになったのでは?」と目星をつけて、依頼元に確認。ビンゴでした。
そうなると、あとは僕の仕事ではありません。「新サーバへの移管完了」という事で、この仕事を終えました。
教訓:WordPressの更新はプロダクションに任せ、こちらでおせっかいを焼かないこと
後日談
ここからは後日談です。
「新しいメールサーバにアクセスしたら、古いメールが見えなくなった」とヘルプが。
そりゃそうでしょう、サーバ切り替えで古いメールサーバから新しいメールサーバに切り替わったのですから。
状況は、古いサーバに届いたメールは古いサーバに残り、切り替え後に届いたメールは、新しいサーバに届いているという、考えてみれば当たり前のことなんです。
先方では「古いサーバからメールのバックアップを取っておかなかった」とのこと。こうなると私も悩みます。
そこで、古いサーバから古いメールを取り出して、それをちまちまと新しいメールサーバへ挿入します。
これで先方のメールユーザは、「新しいメールサーバで、過去の分を含めた全メールが見えて返信できる」状態になります。これで一安心。
依頼内容は「Webの移管」となっていたので、メールのことは想定外でした。
教訓:サーバ移管時には「メールはどうしますか?」と忘れずに確認すること
以上、ある日の「BRANCH FOR PRO」のお仕事でした。