WordPressの管理画面での作業
WP-Optimizeプラグインをインストール
WP-Optimizeでデータベースを最適化
DBのサイズが大きすぎると移行に失敗することがある
WP-Optimizeでリビジョン(投稿の編集履歴)などを削除するとデータベースの容量を大幅に縮小できる
WordPressをバックアップ・リストアする方法を参考に、WordPressのデータベースとファイルをバックアップ
cp /etc/letsencrypt/live/example.com/fullchain.pem /home/user1/fullchain.pem cp /etc/letsencrypt/live/example.com/privkey.pem /home/user1/privkey.pem
WordPressサイトをhttps化するための、SSL証明書(fullchain.pem)と鍵(privkey.pem)をコピーする
/etc/letsencrypt/live/example.comのようなディレクトリにある
fullchain.pemとprivkey.pem自体は、ただのシンボリックリンクなので注意
cpコマンドを使うと、実体の方を複製できる
旧サーバーで取得した
wp_example.sql(データベースのバックアップ)example.com.tar.xz(ファイルのバックアップ)fullchain.pemprivkey.pemの4つのファイルを新サーバーにアップロードする
を事前にインストールしておく
mkdir -p /home/user1/WordPress/ mv example.com.tar.xz /home/user1/WordPress/ cd /home/user1/WordPress/ tar xJf example.com.tar.xz
/home/user1/WordPress/のようなディレクトリを作成し
その中でexample.com.tar.xzを解凍する
/home/user1/WordPress/example.comのようなディレクトリが生成される
ここをWordPressサイトのドキュメントルートとする
cd /home/user1/WordPress/example.com chown -R nginx:nginx .
example.comディレクトリの所有者・グループをnginx:nginx(nginxの実行ユーザー)に変更
mysql -u root -p < wp_example.sql
rootユーザーでmysqlへログイン
wp_example.sql(データベースのバックアップ)内のSQLコマンド群を一括で実行する
vi /home/user1/WordPress/example.com/wp-config.php
wp-config.phpを開く
define( 'DB_NAME', "wp_example" ); define( 'DB_USER', "uuuu" ); define( 'DB_PASSWORD', "pppp" ); define( 'DB_HOST', "localhost" );
DB_NAMEDB_USERDB_PASSWORDDB_HOSTなどの値を確認する
mysql -u root -p
MariaDB [(none)]> CREATE USER uuuu@localhost IDENTIFIED BY 'pppp';
wp-config.phpで確認した
DB_USERDB_PASSWORDDB_HOSTの値を元に、ユーザーを作成
uuuuの部分は、DB_USERから
localhost の部分は、DB_HOSTから
ppppの部分は、DB_PASSWORDから
MariaDB [(none)]> GRANT ALL ON wp_example.* TO uuuu@localhost;
wp-config.phpで確認した
DB_NAME
の値を元に、データベースに対するユーザーのALL権限を設定
wp_exampleの部分は、DB_NAMEから
uuuu@localhostの部分は、先ほど作成したユーザー
MariaDB [(none)]> SHOW GRANTS FOR uuuu@localhost;
+-------------------------------------------------------------------------+ | Grants for uuu@localhost | +-------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `uuu`@`localhost` IDENTIFIED BY PASSWORD '*xxxxx' | | GRANT ALL PRIVILEGES ON `wp_example`.* TO `uuu`@`localhost` | +-------------------------------------------------------------------------+
GRANT ALL PRIVILEGES ON `wp_example`.* TO `uuu`@`localhost`のような表示があればOK
mkdir -p /home/user1/tmp/example.com mv fullchain.pem /home/user1/tmp/example.com/ mv privkey.pem /home/user1/tmp/example.com/
旧サーバーからコピーしてきたfullchain.pemとprivkey.pemを適当なディレクトリに保管
この2つのファイルは、nginxの.confファイルで
ssl_certificateとssl_certificate_keyに設定する
しかし、これは一時的な措置
サーバー移転後(DNS切替完了後)に
certbot certonlyコマンドで、別のfullchain.pemとprivkey.pemを生成し
旧サーバーから持ってきた方のfullchain.pemとprivkey.pemは削除する
DNSの切り替えが完了しないと、certbot certonlyコマンド時のACMEチャレンジが通らないため
一時的な措置として旧サーバーからコピーしてきたfullchain.pemとprivkey.pemを使う
vi /etc/nginx/conf.d/example.com.conf
example.com.confのようなファイルを新規作成する
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /home/user1/WordPress/example.com;
index index.php index.html index.htm;
ssl_certificate /home/user1/tmp/example.com/fullchain.pem;
ssl_certificate_key /home/user1/tmp/example.com/privkey.pem;
#ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
}
location ~* /\.well-known {
allow all;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /\. {
deny all;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
log_not_found off;
}
}
WordPressが使えるように、fastcgiなどの設定を行う
server_nameとrootの部分は各自の環境に合わせて設定
ssl_certificateとssl_certificate_keyには
旧サーバーからコピーしてきたfullchain.pemとprivkey.pemのパスを指定
nginx -t systemctl restart nginx
Windowsのhostsを設定して
example.comのようなドメインから
新サーバーのIPアドレスへ名前解決させる
ブラウザで
http://example.com
のようなURLへアクセス
WordPressのサイトが正常に表示されていればOK
WordPressの管理画面へログインし
サイト名に(新)のような表示を入れる
hostsの設定を元に戻して
ブラウザでアクセスしたときに(新)の表示が消えることを確認する
(旧サーバーの方が表示されることを確認)
旧サーバーでWordPress管理画面にログインし
サイト名に(旧)のような表示を入れる
DNSの設定を変更し、旧サーバーから新サーバーに切り替える
DNSの設定が浸透するまでに数時間~数日待つ
DNSが浸透して、完全に新サーバーに切り替わったら、https用の証明書を発行する
certbot certonly --webroot -w /home/user1/WordPress/example.com -d example.com -d www.example.com --email admin@example.com --dry-run
certbot certonly --webroot -w /home/user1/WordPress/example.com -d example.com -d www.example.com --email admin@example.com
vi /etc/nginx/conf.d/example.com.conf
ssl_certificate /home/user1/tmp/example.com/fullchain.pem;
ssl_certificate_key /home/user1/tmp/example.com/privkey.pem;
上記のような部分を
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
上記のようなものに書き換え
ssl_certificateとssl_certificate_keyを
certbot(letsencrypt)で発行したものに変更している
/home/user1/tmp/example.comディレクトリの
fullchain.pemとprivkey.pemはもう使わないので削除しておく
nginx -t systemctl restart nginx
cronでcertbot renewを定期実行する方法を参考に
SSL証明書が定期的に更新されるように設定する