IT備忘録 サーバ構築

WordPress リカバリー まっさらにして戻ってこれたぜ

投稿日:2017年6月12日 更新日:

先日からブログをやっているが、投稿を重ねれば重ねるほど、ぶっ壊れたときに復旧できるのかが心配になってきた。さくらVPSは、サーバのSSDがぶっ壊れたがデータは知らんという事例があるようだ。ちゃんとバックアップ取ってましたか?説明書きにありますよね?これが管理者の常とう句だ。ああいうサポート連中は実に冷酷だと感じるが、機械は壊れるそういうものだ。ウチの部署でもその言葉はたまに使うしな。

 

なので、試しにわざとぶっ壊してみて(OS再インストール)戻ってこれるかやってみた。

 

ボク手術がんばるよ!!病気には絶対負けないよ!!と言って全身麻酔で眠らされ手術台に上げられたが最後、そのまま目覚めることが無かったような、絵図になるかもしれない。

 

しかし無事帰ってこれた。しかしかなりの大手術だった。本当に死ぬかと思った。備忘録として載せておこう。

 

4種の神器をバックアップ

CyberDuckでデータを取得する

FTPを使えるようにして(過去記事参照)、WordPressフォルダからwp-content直下にある、themesとpluginsとuploadsの3フォルダをローカルに落とす。

WordPressダッシュボードから、xmlファイルを取得。

[ツール]->[エキスポート]->すべてのコンテンツが選択されている状態で、[エキスポートファイルをダウンロード]をクリックして、ローカルに保存。これがWordPressのデータベースの中身になる。

この4つがあればバックアップは完了。

まっさらにする

SSHでサーバにログインし、rootに切り替え、shutdown -h nowでサーバを停止する。

さくらインターネットの会員認証の画面から会員IDとパスワードを使ってログインする。

各種設定からOSインストールの標準OSインストールをクリック、インストールOSはKUSANAGI、新rootパスワードを決めて手術を開始する。

 

KUSANAGIの初期設定

SSHでログインする。IPアドレスはそのままなので、ホストは前回と同じIPアドレスでOK。セキュリティ警告は、SHA256で、鍵を上書きにチェックを入れ、続行。ユーザ名はroot。パスワードはまっさらにするとき決めたパスワードをいれ、OKでログイン。

# yum –enablerepo=remi,remi-php56 update -y
で、システムのアップデートを行う。Complete!になればOK。

# reboot
で再起動を行う。(以前はアップデートかrebootでカーネルパニックらしきものを起こして、コンソールから強制再起動を行っていたが、治っているようだ)

またSSHでログインする。

# kusanagi init
で設定を起動する。キラキラ星が2分くらい表示されて、Finish.Checking…..が出るが、そのまま待つ。

TimeZoneをAsia/Tokyoを選択。
localeを日本語を選択するため2を入れEnter。
キーボードレイアウトは、Japaneseを選択するため、2を入れEnter。
ユーザkusanagiのパスワードを入れる。
SSH鍵認証を行う際のパスフレーズ要するにパスワードを決める。
MySQLのrootパスワードを決める。
Webサーバを1)NGINXか2)Apacheのどちらかを選択する。私はNGINX。
アプリケーションサーバをHHVMかPHP7かPHP5のどれかを選ぶ。私はHHVM(デフォ)。

KUSANAGIのプロビジョニング

WordPressを使用する場合、これをすることにより、WordPress、MySQL、ドキュメントルートなどがプロビジョニング(配置)される。

# kusanagi provision プロファイル名
これで、/home/kusanagi/設定したプロファイル名でディレクトリが作成され、この中にドキュメントルートができる。

言語選択では、2: ja選択するため、2を入れEnterキーを押す。

作成するプロファイルで使用するホスト名(FQDN)を設定する。私の場合は、qryheavy.com

Let’s Encryptの設定でメールアドレスを入力する。一応gmailのアドレスを入れた。

データベース名を入力する。WordPressでいいか。適当に。

データベースのユーザ名を入力する。dbuserでいいか。

データベースユーザのパスワードを入力する。

なんかわからないがワードプレスが入りだす・・・。そして完了。Done.

 

先に秘密鍵を取っておくか

SSH(私の場合はTeraterm)のファイルメニューから、SSH SCPをクリック。上がSend、下がRecieve。今回は鍵をローカルにダウンロードするため下の方。fromに/root/kusanagi.pem。toをデスクトップにして、Recieveで受け取る。

 

SSHのセキュリティを高めておくか

SSHでrootのログインを許しておくと、パスワードを突破されたら終わってしまう。鍵認証かつ一般ユーザでのみログインできるようにする。

# vi /etc/ssh/sshd_config
から設定を開き、
#PermitRootLogin yes を
PermitRootLogin no
に変更する。

さらに、
#PasswordAuthentication yes を
PasswordAuthentication no
に変更する。

:wqで保存する。

# systemctl restart sshd
でsshdを再起動する。

# exit
でログアウトする。

 

一般ユーザでログインしよう

念のため、再度SSHでrootログインを試みて、認証に失敗することを確認する。

確認できたら、一般ユーザで鍵認証を使用してログインする。当然のことながら以前使っていたpemは使用できなくなっていた。差し替えておく。

 

プラグインを入れるときに聞かれるFTP設定

プラグインの追加や削除をするときにFTPのパスワード等を聞いてくる。これを無くす設定のようだ。

$ vi /home/kusanagi/kusanagi_html/DocumentRoot/wp-config.php
でdefine(‘FS_METHOD’,’ftpsockets’)になっているのを、define(‘FS_METHOD’,’direct’)にする。

 

SELINUXが効いているのか、ちなみに確認

$ getenforceで確認したところ、SELINUXはDisableになっていた。kusanagiはCentOS7のはずだが、自動的にSELINUXを停止するようだ。

 

ワードプレス設定

http://qryheavy.comにアクセスするといきなりワードプレス管理画面が。さっきまで稼働してたのに、普通にアクセスしてきた人が見たらビックリするだろうな。勝手に誰かに設定されちゃったりして・・。パスワードが解らないからできないよね。さっさと設定しよ。

データベース名、ユーザ名、パスワードを入力。他の2つは触らず。次へ。

サイトのタイトルは、なんで勉強するの。
ユーザ名は、自分で決めて入力。
パスワードも、自分で決めて入力。これらはWordPressのダッシュボードのログイン設定。
メールアドレスは、ワードプレスの更新とかの都度連絡がくるやつなので、適当なものを。
インデックスは、Google先生に外されたくないので許可する。

ログイン画面が表示されるので、ログインし、ダッシュボードに入る。

 

ダッシュボードから設定

設定、パーマリンク設定から、以前の設定にしておく。私の場合は日付と投稿名だから、それになっているか確認し、なっていたらOKとする。

とりあえず投稿と固定ページのサンプルページを削除しておく。

 

FTPでお引越し

FTPDは起動しているようなので、FTPクライアントソフトでアクセスする。私の場合はFTPSを使いたいので、CyberDuckでログインする。

DocumentRootの中、wp-contentの中にある、plugins・themes・uploadsの3つがあるので削除し、ローカルにバックアップしていたものをwp-contentに入れ置き換える。CyberDuckを終わったら閉じる。

 

uploadsの所有権とパーミッションの変更

この設定はよく解らないんだが、後でインポートするときに使う、WordPress ImporterやAttachment Importerの書き込みがエラーになることがある。というかエラーになる。それがuploadsディレクトリで起こるので、所有者とパーミッションを替えておこうという話だ。

$ su –
ルートに変身。

# cd /home/kusanagi/kusanagi/DocumentRoot/wp-content
ワードプレスコンテンツディレクトリに移動。

# chown -R kusanagi:kusanagi uploads/
所有権を変更。私の場合はhttpdが所有者になっていたので。

# chmod -R 777 uploads/
パーミッションを変更。

 

さらにstyle.cssを触れるようにしておこう

DocumentRootから、さらに

# cd wp-content/themes/stinger8
# chmod 646 style.css

でstyle.cssをその他ユーザから書き込みできるようにする。

 

テーマやプラグインを有効化

 

全てのプラグインをとりあえず有効化。詳細の設定は後でやる。

 

プラグインにAttachment ImporterとWordPress Importerが無ければ、新規追加からインストールして、有効化。

 

テーマを元のテーマに変更する。

 

いよいよインポート作業に(一番のコツどころ)

 

ツール、インポートから、Attachment Importerのインポーターの実行をクリック。参照からxmlファイルを指定して、SelectUserは適当に選んで、Deley file requests by at laeast five secondsのチェックは入れないで、uploadボタンで実行。All done!になればOK。

 

さらにツール、インポートからWordPressのところ、インポータの実行をクリックする。参照でさきほどと同じxmlファイルを選択し、ファイルをアップロードしてインポートボタンをクリックする。あるいは投稿を既存のユーザに割り当てるから、ユーザを選択し、添付ファイルをダウンロードしてインポートするをチェックし、実行ボタンをクリック。存在しますが連発して表示されるが気にしない。最後にすべて完了しました。が表示されればOK。

 

ページを見ると生き返っている。やれやれ。コツはAttachment ImporterとWordPress Importerの両方をやることだ。私の場合はどちらか片方ではうまくいかなかった。ふと思いついて2回インポートしたらうまくいった。

 

広告などヴィジェットを戻そう

アドセンスコードを登録

サイドバートップに、テキストを貼り付け、アドセンスコードのレスポンシブのコードを張り付ける。これでサイト右上の広告が表示される。

 

広告・Googleアドセンス用336pxに336X280のコードを張り付ける。さらに、<div class=”underad”>code</div>でくくる。アンダーアドだな。これでPC画面から見た場合、大きな四角の広告が記事下に現れる。ちなみにレスポンシブコードを貼ると、横長の細い広告が縦に2つ並んで表示される。これはちょっと見栄えが悪いので、やはり336X280だな。ちなみにタイトルはどこにも表示されないので、つけても意味はなさそう。テーマのせいかもしれないが。

 

広告・Googleアドセンスのスマホ用300pxに、同じく336X280のコードを張り付ける。これでスマホの記事下に大きな四角の広告が表示される。ちなみに今まで320X100を貼っていたが、やはり横長の広告が表示され、物足りない。ここも336X280で良いかも。

 

さらにスマホ用記事下のみに、同じく336X280のコードを張り付ける。スマホ用300pxのさらに下に広告が表示される。だから記事下に2つ大きな四角の広告が並ぶわけだな。

 

最後にこのままではアドセンス用336pxPCの記事下に表示される2つの広告が縦に並ぶので、横並びにするため一部変更する。その仕掛けがさきほど<div class=”underad”>でくくったdivだ。外観->テーマの編集から、style.cssを編集する。一番最後で構わない。

これを追加する。前の設定でstyle.cssのパーミッションを変更していないと、書き込みできなくてcodexを見て出直せと怒られることになる。

 

その他設定

サイドバートップの検索・最近の投稿・最近のコメント・アーカイブ・カテゴリー・メタ情報は全て外す。

 

スクロール広告にカスタムメニューを貼り付け、
メニュー「メインコンテンツ」を選択し、タイトルに「なんで勉強するの」と記入し保存する。
さらにメニュー「読んでほしい順」を選択し、タイトルに「読んでほしい順に」と記入し保存する。

 

タイトルを戻す

 

外観、カスタマイズのサイト基本情報から、タイトルとキャッチフレーズを設定する。

 

プラグインの詳細を設定する

まず、Imsanityの設定をしよう。

画像をアップしたときに適度の大きさに補正してくれる便利なツールだ。これがないとバカでかいサイズの画像がそのままアップされてしまう。

ダッシュボード->設定->Imsanityから
Images uploaded within a Page/Post を 640と480を入れる。
Images uploaded directly to the Media Library を 640と480を入れる。

あとは変更を保存ボタンでOKだ。

Akismet Anti-SpamのAPIキーを設定しよう

本当に役に立っているのか解らないが、一応入れている。以前異国の人から英語でコメントが来たが、「あんたのおかげだよ」みたいなコメントで気味が悪くなって、Akismetを入れたんだ。そのときキーを控えていたので、それを入れればOK。

Alismetアカウントを設定をクリックし、APIキーを入れて設定するだけでOK。忘れた場合はログインし、再取得が必要。ログインIDを忘れた場合もforgotから入って面倒な手順を踏めば復旧できる。

 

セキュリティ状況のアラートを直そう

ダッシュボードの下の方に、セキュリティ状況で赤く染まった箇所があれば、直しておいた方がいい。SSHより作業する。私の作業は下記になる。

 

wp-config.phpのファイル権限が666なので、推奨の644にする

まずディレクトリ移動
# cd /home/kusanagi/kusanagi/DocumentRoot/
# chmod 644p-config.php

 

wp-config.phpのオーナーがwww.httpdなのでkusanagiに直す

# chown kusanagi:kusanagi wp-config.php

 

公開ディレクトリにあるwp-config.phpをDocumentRootに置く

# mv wp-config.php ../

 

wp-contentフォルダの権限が777なので755にする

# chmod 755 wp-content

しかしこれをすると、プラグインのインストールができなくなる。TablePressを追加インストールをしようとしたら、できなくてPluginsディレクトリのパーミッションかなと疑ってみたが、777にしてもダメで、よく考えたら今までできていたのにと考えて思いついたのがこれだ。777に戻したらインストールできた。でもこれ常時777だと怒られるので、常時755にしておいて、必要時に777にしよう。

 

wp-content/uploads/.htaccessが777。推奨の644に直す。

# cd wp-content/uploads/
# chmod 644 .htaccess

 

WordPress更新でエラー(補足)

追記日 2017/10/12

上記の.htaccessとwp-contentのアクセス権限を緩め、wordpressをアップデートしようとしたら、やっぱりエラーになる。いちおうエラーの原因として表示されるには、wp-admin/includes/update-core.phpが原因と書いてある。調べてみると、通常は644のようだ。これを一時的に777にしてみる。するともっといっぱい原因がでてきた。調べてみると、wp-adminやincludeなども変更しなければいけないみたい。なので、

chmod -R 707 wp-admin
chmod -R 707 wp-includes
chmod -R 707 wp-config-sample.php

を変更したら更新できるようになった。WordPressはエラー原因も表示してくれるので便利だ。

後は、ダッシュボードのセキュリティ状況で怒られるので、.htaccsssとwp-contentフォルダの権限を推奨に直しておくとする。

 

最後に

説明は以上で終了。コツはAttachment ImporterとWordPress Importerの両方を使ったこと。なぜか私の場合、どちらかではうまくいかなかった。

たとえば、

画像データがIMG5634.jpgなのに、投稿のjpgのパスがIMG5634-1.jpgのように、-1がついて全部直さなければいけない状態になっていた。おそらく重複防止のための機能が働いたのだろう。ありがた迷惑だが。

あと、メディアファイルが空っぽだったり、アイキャッチ画像がブランクだったり、何かが良くて何かがダメのケースがほとんど。

不具合箇所を手動で全投稿分直しても良かったのだが、今後もっともっと投稿が増えたら手に負えなくなるので、これで妥協はできなかった。

 

断片的だが四苦八苦した体験談を下記に明記しておく

後で考えたらやらなくてもいい処理だったのを、載せてるだけなので、初めに言っておくが下記は読まない方がいい。実際の話、OSリカバリまでしなくても、WordPressの再インストールだけでよかったのだ。さらに言うと、データベースやファイルを削除するのではなく、kusanagi removeでよかったのだ。それらを一からやった足跡をゴチャゴチャ言いながら載せているだけだ。意味は無い。

 

プラグインから、WP Multibyte Patchを有効化する。(マルチバイトの不具合累積パッチみたいなもの)

いらなそうなHello Dollyは削除しておく。削除時にFTPの設定を聞かれたら、kusanagiのパスワードを入力する。よく考えたらVSFTPDは起動してたっけ?と思いつつも入れたら通ったので使えるみたい。
# service vsftpd statusで確認したところ、active(runnning)になっていた。

プラグインの新規追加から、ふきだしプラグインSpeech bubbleプラグインをインストール。またFTP設定を聞かれた。毎回か。

Imsanityプラグインをインストール。これはデカい画像の大きさを適度に縮小してアップしてくれる。

Crayon Syntax Highlighterをインストール。プログラムコードを見やすく表示してくれる。

 

追加プラグインを入れていく

All in One SEO Packプラグインをインストールする。やっぱりFTP聞かれる。

続けて他のプラグインを入れたいのに、All in One SEO Packへようこそ画面が表示される。やれやれ。一番下の一般設定を続けるをクリックする。

ややこしそうな画面が出てきたのでパス。プラグインに戻る。

 

Imsanityを設定しておく。
固定ページ/投稿でアップロードされた画像を640×480で、
メディアライブラリへ直接アップロードされた画像を640×480で設定する。
変更を保存ボタンを押し、完了。

WordPress Importerプラグインをインストールする。これが復元作業の本命。今回はFTPの設定が効かれなかった。じわじわ効いてくるようだ(そんなわけないけど)

 

再びダッシュボードから設定を行う

外観、テーマより、元のテーマを選択する。私の場合はStinger8。

プラグインも有効化しておく。

パーマリンクが元通りになっているか確認する。私の場合は日付と投稿名なので、そのままOK。

 

再びSSHより書き込み権限を設定してやる

プラグインよりWordPress Importerをインストールしようとするが、できない。調べたところ出来ない理由は、wp-config.phpのdefine(‘FS_METHOD’,’direct’)とwp-content/upgrade,themes,pluginsにその他ユーザの書き込み権限がないから。

# chmod 707 plugins
で解決してやる。

 

再びダッシュボードからプラグインを取得

WordPress Importerプラグインをインストール。今度はうまくいく。

 

インポート作業

ダッシュボードから、ツール、インポート、一番下にあるであろうWordPressインポーターの実行をクリック。

 

OS再インストールではなく

# mysql -u root -p
からのパスワード入力し、MariaDBに入る。

MariaDB > drop database wordpress;
でデータベースを電子のチリにする。

MariaDB > create database dotinstall_wordpress;
でデータベースを作成する。

MariaDB > grant all on wordpress.* to dbuser@localhost identified by ‘pasword’;
で権限を設定する。

MariaDB > exit;
で抜ける。

# rm -fR /home/kusanagi/プロファイル名
でwordpressフォルダごと電子のチリにする。-Rは階層まるごと。-fがなければ、いちいち削除していいか聞いてくるので超面倒。-fを入れ忘れた場合はCtrl+Cでキャンセルしよう。

# kusanagi provision プロファイル名
をやってみるが、すでに作成されていますとのこと。やっぱダメか。

# kusanagi remove プロファイル名
これで出来るみたい。

# kusanagi provision プロファイル名
できた。設定する。

ここで思ったことは、プロビジョンのコマンドで、データベースの設定からワードプレスのインストールまで全部行うんだということ。プロビジョニング名のディレクトリを作り、それと同じ名前のデータベースを作り、権限設定までする。なるほどremoveですべてが消えそうなのでこれだけでいいかも。

スポンサーリンク




スポンサーリンク




-IT備忘録, サーバ構築

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

FTPができるようにしておかないとな

そろそろバックアップを取らなければならないな。投稿数が伸び悩む中でも、これだけの投稿が一瞬で無くなってしまうのも、ぞっとする。もしバックアップ&復元が失敗したら、今書いている文字すら電子のチリとなって …

【PHP】 WordPressで使ってる意味不明な

今実行しているコードのファイル名を取得

index.phpなら、c:\xampp\htdocs\index.phpとなる。 &nbsp …

このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3D・・・

職業柄パソコンをセッティングする機会が多いのだが、過去にある一台がスクリーンセーバーの設定のとき、 「このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3Dと互換性のあるビデオ …

AS400 長いカラムを途中で折り返しで表示する

長いカラムを画面表示で端で折り返すのは自動的にAS400がやってくれる。同じ長さのカラムをDDS に用意すればいい。 ただ、このやり方では一番右端まで表示してから折り返すことになる。これを途中で折り返 …

【ExcelVBA】Dictionaryオブジェクトを使って連想配列

部署・取引先・売上・差益と並んだエクセルがあるとする。 部署取引先コード売上差益 111000015,000,000500,000 111000023,000,000300,000 111000032 …