今回はWordpressを移設したため、その手順について紹介します。元々設置されていた環境は、Ubuntu 16.04 Serverでした。それをUbuntu 18.04 Serverとほぼ環境が変わらないので、30分ほどで作業は終わりました。また、今回は、サーバにnginxを利用しました。
移設の手順は、次の通りです。
- 新しいマシンにWordpressをインストールする
- 古いマシンから必要なファイルをダウンロードする
- 新しいマシンに必要なファイルを展開する
- DNSの設定を変更する
- 証明書を取得する
- 自動で証明書が更新されるようcronを設定する( certbotで証明書を生成する場合のみ必要 )
全ての作業が完了するまでに30分から1時間程度の時間を要しました。
目次
1.新しいマシンにWordpressをインストールする
今回は、次のようにインストールしました。
既存のライブラリを最新のものにアップデート
# sudo apt update # sudo apt upgrade -y
データベースのインストール
# apt-get update # apt-get install mysql-server mysql-client
インストールしたデータベースにwordpressでアクセスするユーザを作成し、そのユーザがアクセスできるデータベースを作成
# sudo mysql -u root -p > CREATE DATABASE wordpress CHARACTER SET UTF8 COLLATE UTF8_BIN; > CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; > GRANT ALL PRIVILEGES ON wordpress.* TO 'user'@'localhost'; > FLUSH PRIVILEGES; > QUIT;
ここで、rootアカウントでmysqlにアクセスするためには、sudoでmysqlコマンドを実行する必要があります。
サーバ ( nginx )をインストール
# sudo apt install nginx
PHP7.2と必要なコンポーネントをインストール
# sudo apt install php7.2-fpm # sudo apt install php7.2-xml php7.2-curl php7.2-gd php7.2-mbstring php7.2-readline # sudo apt install php7.2-bz2 php7.2-zip php7.2-json
次にPHPの設定ファイル( /etc/php/7.2/fpm/php.ini )を変更します。インストール時の初期状態から、変更が必要な項目は次の通りです。それ以外はそのままにしておきます。
memory_limit = 256M post_max_size = 32M max_input_vars = 4440 upload_max_filesize = 32M
2.古いマシンから必要なファイルをダウンロードする
古いマシンから移動が必要なファイルは、mysqlに格納されているデータとwordpressのフォルダ一式です。ここでの手順は全て、古いマシンで実行します。
次のコマンドを実行して、mysqlから必要なデータを取り出します(ダンプ)
# mysqldump -u user wordpress > wordpress.sql
ここで、ユーザ名( user )、データベース名( wordpress )は先ほど作成した情報ではなく、古いマシンで設定した情報を使います。
次のコマンドを実行して、wordpressのファイル一式を圧縮ファイルにします。( /var/www/wordpress というフォルダにインストールされていると想定します )
# cd /var/www # sudo tar cfvz wordpress.tar.gz wordpress/
作成した2つのファイルをscpなどを用いて、新しいマシンに移動します。
3.新しいマシンに必要なファイルを展開する
ここでの作業は、全て新しいマシン上で実施します。また、古いファイルから取り出したファイルは、ホーム( ~/ )に移動したと想定しています。
まず、mysqlへのデータの挿入は次のコマンドで実行します。
# mysql -u user -p -D wordpress < ~/wordpress.sql
次に、wordpressのファイルを展開します。新たな展開先として、/var/wwwの下にwordpressというフォルダを作成して、その下に設置すると想定します。
# cd /var/www # sudo tar fxvz ~/wordpress.tar.gz # sudo chown www-data:www-data -R wordpress
単純に展開しただけだと、rootが所有者となってしまい、アクセス権限でファイルをアップロードできないといった問題が発生する可能性があるため、nginxの実行ユーザ( www-data )が所有者になるように変更しておきます。
4.DNSの設定を変更する
DNSサーバで設定しているwordpressを設置したマシンのIPアドレスを古いマシンのIPアドレスから、新しいマシンのIPアドレスに変更します。ここは、利用しているDNSサービスによって、操作手順が異なるため、手順の説明は省略します。
5.証明書を取得する
古いマシンから必要な証明書ファイルを移動させても良いです。しかし、ここでは、certbotを利用して、無料で必要な証明書を取得するようにします。
# sudo apt install certbot # sudo service nginx stop # certbot certonly --standalone -d www.haneca.net
ここで、nginxが稼働していると、外部からURLを検証するための仮サーバを稼働させられなくなるため、サービスを確実に停止させておきます。
次に、生成した証明書を読み込んで、HTTPSでアクセスできるようにするため、nginxの設定ファイル( /etc/nginx/site-available/default )を次のように変更します。
server { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name www.haneca.net; ssl_certificate /etc/letsencrypt/live/www.haneca.net/cert.pem; ssl_certificate_key /etc/letsencrypt/live/www.haneca.net/privkey.pem; ssl_session_timeout 60s; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE+AESGCM DHE+AESGCM !AES128 !aNULL !eNULL !SSLv2 !SSLv3'; ssl_prefer_server_ciphers on; root /var/www/wordpress; index index.php index.html index.htm index.nginx-debian.html; client_max_body_size 32M; charset utf-8; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_split_path_info ^(/)(/.*)$; } location ~* /wp_config.php { deny all; } location ~ /.well-known { allow all; } }
設定が完了したら、次のコマンドを実行して、設定ファイルが正しく設定されていることを確認します。
# sudo nginx -t
ここで、test failedと表示される場合、証明書のパスが間違っている、php-fpmのバージョンが7.2ではない、rootフォルダのパスが違うといったことが原因になりうると考えられます。
以上の作業で、ブラウザでアクセスして問題なく動作することが確認できると思います。
6.自動で証明書が更新されるようcronを設定する
ここでの作業は、certbotで作成した証明書を使っている場合のみ必要な作業です。certbotで作成した場合、証明書の有効期間は90日です。そのため、90日ごとに証明書を更新する必要があるのですが、忘れてしまうことが多く、そういった場合にこの設定をしておけば、証明書の有効期限を気にすることなく、サーバを運用することができます。
まず、5ではnginxを停止した状態で証明書を生成しました。しかし、証明書を更新する度に、運用しているnginxを停止することは難しいと思います。そこで、nginxを稼働したまま、証明書が更新する次のコマンドを実行して、証明書を生成しなおします。
# sudo certbot certonly --webroot -w /var/www/wordpress -d www.haneca.net
この時、次のように既存の証明書を利用するか、生成し直すかと聞かれるので、2を選択して、新たに生成し直すよう選択します。
1: Keep the existing certificate for now 2: Renew & replace the cert (limit ~5 per 7 days)
これで、certbot renewでnginxを停止する必要なく、証明書を更新することが可能になります。次にcronの設定を、/etc/cron.d/certbotファイルに次の1行を追記します。
0 0 * * 0 root certbot renew && service nginx reload