WordPress構築サイトを自宅サーバへ移行

既存のWordpressにて構築されたWEBサイトを自宅サーバに移行する

  1. セキュリティ対策をする.
  2. 自宅サーバにWordpressサイトを移行する.
  3. HTTPS化する.

めっちゃうろ覚えかつ自宅鯖向けなんで実用性は皆無.走り書き程度の内容.

[構成]
・Ubuntu 20.04
・MariaDB
・Nginx

作業内容

事前作業

・公開中のWEBサイトを非公開にする.

WP Maintenance Mode」をインストール->有効化して非公開とする.

・サイト中身をWEBサーバからダウンロード

FTP経由でサーバにアクセスし「public_html/WEBサーバ名」ファイルをダウンロード.
WEBサーバのGUIから「phpMyAdmin」にログイン,データベースをエクスポートする.

セキュリティ設定

・ポート制限

$ sudo ufw enable # ここでssh途切れるので注意
$ sudo ufw allow Nginx-Full
$ sudo ufw allow 22 # ここでssh再度つながる

・SSH制限

ログインの公開鍵認証化をする.
Windowsにて「ssh-keygen -r 2048***」を実行.id_rsa・id_rsa.pubが生成される.
id_rsa.pubを「/home/【ユーザ名】/.ssh」に置く.

$ cat id_rsa.pub >> /home/【ユーザ名】/.ssh/authorized_keys

クライアントからSSHログイン

$ ssh 【ユーザ名】@192.168.1.3

ルートログイン,パスワードログインを禁止

$ sudo vim /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no

・ルータのポートフォワーディング

RT-AC65Uの設定を記載.

http://192.168.1.1」にアクセスし,ルータの管理画面を表示.

「WAN->ポートフォワーディング」へ進み,自宅サーバのIPアドレスとHTTP・HTTPSのポート番号を追加.

・パッケージの自動アップデート

$ sudo crontab -e
0 4 * * 0 apt update && apt upgrade -y

サイト構築

・ダウンロードしたWordpressをインストール

$ mkdir -r ~/www/html
$ mv 【ダウンロードしたWordpressサイト】~/www/html/murinishimori.net
$ sudo chown -R www-data:www-data ~/www/html/murinishimori.net

・PHP,Nginxインストール

$ sudo apt install -y php-fpm php-mysql php-mbstring
$ sudo apt install -y nginx

・Nginxを設定

$ cd /etc/nginx
$ sudo touch sites-available/murinishimori.net
server {
    listen 80;
    server_name 192.168.1.3;
    client_max_body_size 1000M;

    root /home/【ユーザ名】/www/html/murinishimori.net;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}
$ sudo ln -s sites-available/murinishimori.net sites-enable/murinishimori.net
$ sudo vi /etc/php.ini
post_max_size = 1000M # 1POSTの最大容量
upload_max_filesize = 1000M # 1ファイルの最大容量

・DBを作成

$ sudo apt install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
$ sudo mysql -u root
create database murinishimori; # サイト用のDBを作成.名前はなんでも良い.
create user 'murinishimori'@'localhost' identified by 'hogehoge'; # サイト用のユーザを作成.
grant all privileges on murinishimori.* to 'murinishimori'@'localhost'; # サイト用のDB全権限をユーザに付与

・DBをインポート

$ mysqlimport -u root --local murinishimori 【DBファイル名】

・”wp-config.php”でテーブル名を変更

$ cd ~/www/html/murinishimori.net
$ sudo cp wp-config-sample.php wp-config.php
define( 'DB_NAME', 'murinishimori');
define( 'DB_USER', 'murinishimori');
define( 'DB_PASSWORD', 'hogehoge');
define( 'DB_HOST', 'localhost');

・”wp-config.php”にサイトアドレスを記載

define( 'WP_HOME', 'http://192.168.1.3');
define( 'WP_SITEURL', 'http://192.168.1.3');
$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm

・「http://192.168.1.3/wp-admin」にアクセスしてログイン

サイトが表示されることを確認する.この時点ではドメイン名が異なるため画像が表示されないなどの不具合が生じている.

・DNSを変更

お名前ドットコムの手順を記載.
 - 「お名前.com Navi->ドメイン->ドメイン設定->ネームサーバ設定->ネームサーバの変更」から「お名前.comのネームサーバを使う」にチェックを入れ更新.
 - その後,「お名前.com Navi->ドメイン->ドメイン設定->ネームサーバ設定->DNSレコード設定を利用する」から「Aレコード」に自宅グローバルIPアドレスを設定し更新.
 - DNS設定が更新されるまで最大72時間かかるらしいので待機.

・”wp-config.php”に追記した部分をHTTPドメイン名に変更

define( 'WP_HOME', 'http://www.murinishimori.net');
define( 'WP_SITEURL', 'http://www.murinishimori.net');

⇒ドメイン名でアクセスして表示されることを確認

HTTPS設定

・Let’s EncryptにてSSL(HTTPS)証明書作成

$ sudo apt -y install certbot
$ sudo certbot certonly --webroot -w ~/www/html/murinishimori.net

・NginxでHTTPS設定

server {
    listen 80;
    server_name www.murinishimori.net;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name www.murinishimori.net;
    client_max_body_size 1000M;
    ssl_certificate /etc/letsencrypt/live/www.murinishimori.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.murinishimori.net/privkey.pem;

    root /home/【ユーザ名】/www/html/murinishimori.net;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

・”wp-config.php”をHTTPS準拠に変更

define( 'WP_HOME', 'https://www.murinishimori.net');
define( 'WP_SITEURL', 'https://www.murinishimori.net');
$ sudo systemctl restart nginx

⇒サイトを表示し,画像まで問題なく表示されることを確認.

最終確認

  • キャッシュ類は全て削除
  • プラグインが動作しているか確認
    ライブラリ未インストールで動かないことがある(HighlightCodeとか)

最後に

  • All-in-One WP Migration」を試したがエラーにより失敗した.
  • お名前ドットコムでのDDNS化したい.

[参考]