CentOS 8にWordPressを移行する手順(プラグイン使用)

はじめに

CentOS 6のサポート終了に伴い、CentOS 8へwordpressで構成されたホームページを移行した際の手順です。

対象者

・ドメインの変更なしでホームページを移行したい方

・移行元がAll-in-one WP migrationが使えるPHP、Wordpressバージョンになっている方

・nginxを他サービスで利用しており、Apacheと共存させたい方

・DNS変更後にSSL設定を行うため、そのときにダウンタイムがあっても良いという方

webサーバのインスト―ル

以下の記事においてnginxをインストールし、80番ポートを開放している。今回はこれをリバースプロキシとして利用し、ファイル構成はApacheの方で行う。

Mastodonサーバを立ててみた【CentOS 8】
はじめに CentOS 8ではDockerのサポートがされていない(2020年9月現在)と思われるので、非DockerでMastodonをインストールする系の記事を参考にしてバージョン3.2.0のサーバーを新規に立ててみました。 注...
[root ~]# dnf install nginx
[root ~]# systemctl start nginx && systemctl enable $_

Apacheをインストールする。

[root ~]# dnf install httpd
[root ~]# httpd -v
Server version: Apache/2.4.37 (centos)

nginxとapacheの設定ファイルを変更する。

[root ~]# vi /etc/nginx/conf.d/reverse_proxy.conf
server {
  listen 80;               
  server_name <独自ドメイン>;   

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect                          off;
    proxy_set_header Host                   $host;
    proxy_set_header X-Real-IP              $remote_addr;
    proxy_set_header X-Forwarded-Host       $host;
    proxy_set_header X-Forwarded-Server     $host;
    proxy_set_header X-Forwarded-Proto      $scheme;
    proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
  }
  location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/html;
    }
}

 

server_nameの部分は、そのリンクを入れるとwebサーバにより構築されたページにアクセスできることを示す。

しかし、ドメイン変更なしで移行する場合は、当然ながら移行後のサーバーに対して名前解決されていないため、ページの動作を確認するためにはHostsファイルの書き換えが必要となる。

Apacheの設定ファイルは、以下の二か所を書き換える。

[root ~]# vi /etc/httpd/conf/httpd.conf

 80
Listen 8080

<Directory "/var/www/html">

 None
AllowOverride All

</Directory>

nginxの設定ファイルで、「80番ポートでアクセスされたら8080番ポートに転送する」としたので、Apacheは8080番ポートで待機する。

最後に80番ポートを開放する。

[root ~]# firewall-cmd --permanent --add-service={http,https} && firewall-cmd --reload

Hostsファイル

先述の通り、移行先のサーバに対して名前解決されていない独自ドメインでの動作確認のために必要となる。

Windows10では以下の手順で行う。

1.左下のスタートを開く

2.アプリ一覧の中から「Windows アクセサリ」を選択

3.「メモ帳」を右クリックし、「その他」→「管理者として実行」

4.メモ帳のファイルタブから「開く」を選択し、「C:\Windows\System32\drivers\etc」と入力

5.ファイルの種類を、「テキスト文書」から「すべてのファイル」に変更すると「hosts」が表示される

6.「hosts」を選択し、最終行に以下を追記

<サーバのIPアドレス> <独自ドメイン>

例: xxx.xxx.xx.xxx kyohju.com

7.上書き保存

以上の手順により、独自ドメインからApacheのテストページが表示されればよい。

PHPのインストール

[root ~]# dnf install php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-mysqlnd php-json

[root ~]# php -v
PHP 7.2.24

 

このタイミングでapacheを起動する。もしすでに起動している場合は、下のコマンドで再起動する必要がある。

[root ~]# systemctl start httpd

##すでに起動している場合
[root ~]# systemctl restart httpd

 

Mysqlのインストール

MysqlとPostgresqlでは使用するポートが異なるので、併用できる。

[root ~]# dnf install @mysql:8.0
[root ~]# mysql --version
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)
[root ~]# systemctl start mysqld && systemctl enable $_
[root ~]# mysql_secure_installation

このコマンドによりmysqlの初期設定を行うことができる。yes/noの質問には基本的に「y」で答えればよい。パスワードの設定は、強度を0から2までで指定でき、それぞれの強度に応じて設定できるパスワードが異なる。

データベースの作成

以下の操作によりDBユーザ「wordpress」を作成できる。

[root ~]# mysql -u root -p
Enter password:<先ほど設定したパスワード>

mysql> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '<DBユーザ用のパスワード>';
mysql> GRANT ALL ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

ここからはDBユーザに切り替える。

mysql> exit
Bye
[root ~]# mysql -u wordpress -p

mysql> CREATE DATABASE wordpress;

これによりデータベース「wordpress」が作成された。

WordPressのインストール

ここからは、ApacheのドキュメントルートにWordpressをインストールしていく。

[root ~]# cd /var/www/html
[root html]# curl -O https://ja.wordpress.org/latest-ja.tar.gz
[root html]# tar xvf latest-ja.tar.gz
[root html]# mv wordpress wp
[root html]# chown -R apache:apache wp
[root html]# rm -f latest-ja.tar.gz

以上の操作により、wordpressがドキュメントルート内のwpフォルダに構成された。

ここでhttp://<IPアドレス>/wp/にアクセスすると、Wordpressのインストール画面が現れる。

「データベース名」「ユーザー名」「パスワード」には、先ほどMysqlの設定の際に作成したものを入れる。それ以外は適当でいい(All-in-one WP migrationを使用すると移行元の設定が基本的には引き継がれるため)。

つまり、移行後は管理画面に、移行前の管理ユーザーおよびパスワードでログインすることになる。

WordPressページをドメイン直下に移動

先ほどWordpressをwpディレクトリにインストールしたので、このままでは「http://<独自ドメイン>/wp/<記事のURL>」といった形になるので、これを「http://<独自ドメイン>/<記事のURL>となるように直していく。

ちなみに、最初からルートディレクトリ直下にWordpressをインストールするとその手間を省けるが、SEO的にルートディレクトリ直下に配置するファイルは少ない方がいいらしく、多くのサイトでサブディレクトリ以下にWordpressをインストールする方法を採用している。

[root html]# cp wp/index.php index.php
[root html]# cp wp/.htaccess .htaccess
[root html]# vi index.php

(‘./wp-blog-header.php’);
require(‘./wp/wp-blog-header.php’);
[root html]# vi .htaccess


# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます
。
<IfModule mod_rewrite.c>
RewriteEngine On
 /wp/
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 . /wp/index.php [L]
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

.htaccess、index.phpともに、コピー後に一部を書き換える。

最後にWordpressでの設定を行う。「設定」タブから「一般」を表示すると、以下のようになっている。

WordPressアドレス(URL) http://独自ドメイン/wp

サイトアドレス(URL)http://独自ドメイン/wp

このうち、「サイトアドレス」の方を、以下のように変更する。

WordPressアドレス(URL) http://独自ドメイン/wp

サイトアドレス(URL)http://独自ドメイン/

「変更を保存」を押して設定を反映する。

パーマリンクの設定

以上の操作により、パーマリンクが初期化されてしまうため、このままでは記事を開くと404エラーになってしまう。

「設定」タブから「パーマリンク設定」を開き、元のサイトのリンクの形に合うパーマリンクを設定する。

このサイトであれば以下のような設定となっている。

「カスタム構造」http://<独自ドメイン>/article/%postname%.html 

プラグインの導入

All-in-one WP migrationを「プラグイン」タブの「新規追加」から検索して、移行元のサイト、移行先のサイトに入れる。両方での操作をここから簡単に説明していくが、説明の都合上、Hostsファイルの書き換えなどは省略する。

①移転元

「All-in-One WP Migration」タブから「エクスポート」を選択する。別のプラグインを導入することでインポート可能サイズを512MBまで増やすことができるため、その制限を超えていない場合は「高度な設定」で設定する必要はない。

超えている場合、画像をエクスポートせず、後でFTPソフトを利用して移動する方法を紹介するため、「高度な設定」で「メディアライブラリをエクスポートしない」にチェックを入れる。それでも超える場合は有料版を使用するか、プラグイン不使用の手順となる。

②移転先

「All-in-One WP Migration」タブから「インポート」を選択する。

先ほどエクスポートしてダウンロードしたサイズが、最大容量に足りない場合は、以下の手順でプラグインを導入する。

1.https://import.wp-migration.com/ から「Basic」をダウンロードする。

2.「プラグイン」タブから「新規追加」を選択し、「プラグインのアップロード」から、1.でダウンロードしたファイルを参照する。

3.再び「All-in-One WP Migration」の「インポート」を確認すると、最大容量が512MBになっている。

インポート方法は、エクスポートしたデータを「ドラッグ&ドロップ」するだけである。ファイルを参照することもできる。

画像データの移行

画像はwordpressディレクトリ内のwp-content/uploadsに入っている。これを、移転後サーバの対応するフォルダに入れればよい。今回の設定では、/var/www/html/wp/wp-content/uploads/である。

uploadsフォルダごとダウンロードし、/var/www/html/wp/wp-content/にアップロードすると分かりやすい。

なお、権限の関係でアップロード(上書き)できない場合は、以下のコマンドで対応する。

[root ~]# chmod -R 777 /var/www/html/wp/wp-content/uploads

アップロード後は必ず権限を修正すること。

[root ~]# chmod -R 775 /var/www/html/wp/wp-content/uploads

DNSの変更

契約しているVPSに変更がない場合は、VPS上で、ドメインのゾーン編集においてIPアドレスを移転元のものから移転先のものに変更すればよい。

変更前には最小TTLが3600などの数字(秒数を表す)になっているが、それを60に変更することで、DNSの変更が反映されやすくなる。DNS変更が完了したら、元の数字に戻しておく。

VPSに変更がある場合は、ネームサーバの変更も行う必要がある。

DNS変更後、Windowsのコマンドプロンプトなどでnslookup <ドメイン名> を実行し、移転後のサーバのIPアドレスが表示されることを確認する。

SSL証明書の導入

DNSの変更が完了したら、速やかにSSL証明書を導入する。すでにドメインは移転先のサーバに対して名前解決されているため、以下のコマンドでSSL証明書が導入できる。

[root ~]# certbot-auto certonly --webroot -d kyohju.com

kyohju.comの部分にドメイン名を入れることで、その名前に対応したフォルダが作られる。

最後にhttps転送の設定をnginxで行う。

先ほど設定したreverse_proxy.confの中身を以下のように書き換える。

[root ~]# vi /etc/nginx/conf.d/reverse_proxy.conf
server {
  listen 80;               
  server_name <独自ドメイン>;   

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect                          off;
    proxy_set_header Host                   $host;
    proxy_set_header X-Real-IP              $remote_addr;
    proxy_set_header X-Forwarded-Host       $host;
    proxy_set_header X-Forwarded-Server     $host;
    proxy_set_header X-Forwarded-Proto      $scheme;
    proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
  }
  location ^~ /.well-known/acme-challenge {
        default_type "text/plain";
        root /var/www/html;
    }
return 301 https://<独自ドメイン>$request_uri;
}
server {
listen 443 ssl;
server_name kyohju.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/kyohju.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kyohju.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSV1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 20M;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
}
}

以上の設定が完了したら、nginxを再起動させて設定を反映させる。

[root ~]# systemctl restart nginx

まとめ

WordPressのインストールだけでなく、各記事のリンクが移転前のものと一致しているかの確認をした上で、満を持してDNS変更に移ろう。

タイトルとURLをコピーしました