昨日(2017/1/14)の夕方から夜中まで、本ブログが落ちていて見られなかったと思います。申し訳ありませんでした。

原因はサーバーのアップデート(yum update)のせいだと思うんですけど、自分がサーバーにログインできなくなってしまいました(sshで入れなくなった)。さらにOS再起動しようとしたら、OSが起動しなくなってしまいました。

どうしようもないのでOSインストールからやり直して復旧させました。ついでなので、復旧の際にしたことをメモしておきますね。その間6時間ぐらいずっとブログ落ちてましたが、商用のサーバでこんなにダウンさせてたらニュースになりかねなくて超やばいです。

ブログのサーバー復旧でやったこと

このブログはレンタルサーバじゃなくてVPSを使っているので、OSインストールするところから復旧しました。ブログの記事や設定ファイルなどのバックアップを取っておいて助かった・・・。

  1. VPSにCentOS 7のインストール
  2. 最初にCentOSのアップデート
  3. OSの設定(ユーザ作成、セキュリティ(SSHやファイアーウォール)、時刻同期(NTP)など)
  4. ブログを動かすためのソフトウェアインストール(PHP7.1、mariadb、nginx、opensslなど)
  5. WordPressインストール
  6. WordPressのデータ(記事などのデータベース、画像ファイル、テーマ)をリストア
  7. WordPressのプラグインインストール
  8. メールサーバの設定(dovecot、postfix)

こうして書いてみると、バックアップがあったとは言え、これらを6時間ぐらいでやったのはなかなかですね。普通に構築すると苦労するOSや各種ソフトウェアなどの設定も、バックアップから設定ファイルや鍵・証明書のファイルなどを戻したのですぐ終わりました。いままでPHPは7.0を使っていたのですが、7.1にアップデートできたのも良かったです。

サーバー復旧で苦労した点

サーバー復旧で特に苦労した点が2つあります。ググってこのブログにたどり着いた方の参考になることもあるかと思うので書いておきますね。

1.opensslのインストール

性能がいいらしいAPサーバのnginxを使うために、opensslというソフトウェアの新しいバージョンをソースファイルからインストールしないといけないのですが、そこで苦労しました。ついでだから、前回構築したときよりも新しいopensslのバージョン(1.1.0c)を使おうとしたところに落とし穴がありました・・・。

インストールした後に、ライブラリの参照がうまく行かなくて、opensslのバージョン確認すらできなかったんですよね。opensslを解凍したフォルダにあるINSTALLというファイルを見て解決できました。

/etc/yum.confでkernel*を除外しない状態で必要なソフトウェアのインストール。最初perlをインストールしたのですが、opensslのコンパイルに失敗しました。perl-coreが必要だそうです。
# yum install -y gcc make perl-core zlib-devel

opensslのコンパイルとインストール。./configの行が大事っぽい?
# wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
# tar zvxf openssl-1.1.0c.tar.gz
# cd openssl-1.1.0c
# ./config --prefix=/opt/openssl --openssldir=/usr/local/ssl
# make
# make test
# make install

ちなみにOS付属のopensslはアンインストールしてないです。

2.WordPressのデータのリストア

よく、バックアップは大事なので取っておきましょう的な記事を見ますが、バックアップから実際にリストアする準備までしている人は少なかったりするのではないでしょうか?私ももしリストア必要になったらグーグル先生に聞きながらやればいいやと思ってたりしましたよ。。。

今回やったリストアの手順を書いておきますね。(3)をするとブログ記事にアクセスできるようになるため、順番的には(1),(2),(4),(5),(6),(3)の方がいいかもしれません。
(1)WordPressのインストール・・・これは普通にインストール。データベース名やテーブル接頭辞はバックアップ時と同じにする。

(2)wp-config.phpの設定・・・アクセス権を600にする。使用するメモリ量WP_MEMORY_LIMITの設定などはバックアップしたファイルからコピーした。

(3)WordPressのプラグイン「BackWPup」で取得したデータベースのリストアをした。バックアップのデータベース名.sqlを実行する。
$ mysql データベース名 -u DBユーザ名 -p < データベース名.sql
この時点で、記事の文章(画像はまだ)、プラグインの設定、WordPressにログインするときのユーザとパスワードもバックアップ時点のものに戻ります。

(4)テーマファイルのリストア
「WordPressインストールディレクトリ/wp-content/themes/」の下に、バックアップしたテーマをテーマ名のフォルダごとアップロードした。

(5)プラグインのインストール
(3)ではプラグインの設定は戻っても、プラグインのそのもののファイルは戻っていないので、WordPressの管理画面から再度インストールしました。プラグインのリストも「BackWPup」でバックアップできます。

(6)画像ファイルのリストア
「WordPressインストールディレクトリ/wp-content/uploads/」の下に、「BackWPup」でバックアップしてあった画像ファイルをアップロードした。「WordPressインストールディレクトリ/wp-content/uploads/2016/12/xxxx.jpg」という構造です。

ここまでやると、バックアップ前にほぼほぼ戻ったんですけど、当たり前ですが、バックアップ取得後に更新した記事は消えてます。この記事の一つ前のねこあつめの記事が消えてしまって、同じような内容で再び書き直しました。自分が書いた記事といってもまったく同じ記事は書けません。いちばん大事なバックアップは記事の文章と画像ファイルだと思います。

バックアップすべきデータについて

私の独断と偏見ですが、WordPressブログのサーバでバックアップすべきファイルについて書いておきますね。

  • OS(CentOS)とソフトウェアの設定・・・/etc  ※たいていのソフトウェアの設定ファイルをバックアップしたことになるはず。
  • WordPressの記事の画像ファイル・・・「WordPressインストールディレクトリ/wp-content/uploads/」(BackWPupで取得)
  • WordPressのデータベース(BackWPupで取得)
  • WordPressのテーマファイル・・・「WordPressインストールディレクトリ/wp-content/themes/テーマ名/」(BackWPupで取得)

画像ファイルについては容量が大きいので、悩ましいところですよね。アップロードする前の画像ファイルがローカルに保存してあると割り切れれば、毎日バックアップするのでなくてもいいかもしれませんね。

記事データのxmlのエクスポートについては、データベースのバックアップがあればいらないかもしれません。今回使わなかったですし。ただ、VPSではなくて普通のレンタルサーバの場合は、記事データだけをリストアしたいケースもあるのかもしれません。

おわりに

ブログが落ちてしまって、申し訳ありませんでした。何かを検索してて、うちのブログに書いてあることが必要な人もいたのかもしれないですし。

yum updateは怖いですね。ただアップデートしないと逆にセキュリティー的なリスクがあったりするので、もう1台検証用のサーバ立てたりした方がいいのでしょうか。個人のブログでそこまでする必要あるかというのもあるし、そもそもVPSでなくて、普通のWordPressが使えるレンタルサーバかはてなブログで十分という説もありますね。

とりあえず、バックアップの重要性を再認識するとともに、リストアを実際に試してみることができて良かったとプラスに考えていこうかなと思います。