WordPressを自宅サーバーに引越しする

Linux
スポンサーリンク
[ad01]

古いThinkPad X61にAlmaLinuxをインストールして自宅サーバーを構築したので、カゴヤVPSで運用していたWordpressをドメインそのままで自宅サーバーに引越しをした。

その時の作業手順を記録に残します。

自宅サーバーにLAMP環境を構築する

(1)Apache+PHP7.4(Wordpressの推奨するバージョン)をインストールする

インストール可能なPHPのバージョンを確認
# dnf module list php

メタデータの期限切れの最終確認: 0:26:55 時間前の 2021年05月17日 01時01分55秒 に実施しました。

AlmaLinux 8 - AppStream
Name                       Stream                        Profiles                                         

php                        7.2 [d]                       common [d], devel, minimal                       

php                        7.3                           common [d], devel, minimal                       

php                        7.4                           common [d], devel, minimal

デフォルト(7.2)をリセットしてデフォルト(7.4)にセットする
# dnf module reset php 
# dnf module enable php:7.4

インストール
# dnf install httpd php php-{devel,mbstring,opcache,gd,curl,mysqlnd,fpm}

SSL証明書を更新するための準備
# dnf install certbot python3-certbot-apache

バージョン確認
# php -v
PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS )

Copyright (c) The PHP Group

Zend Engine v3.4.0, Copyright (c) Zend Technologies

    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

Webサーバーを起動
# systemctl start httpd
# systemctl enable httpd

# systemctl start php-fpm
# systemctl enable php-fpm
                      

(2)データベースをインストールして初期化する

インストール
# dnf install mariadb-server mariadb

デフォルトの文字コードをUTF8に設定
# vi /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
character-set-server = utf8         ← 追記する

データベース起動

# systemctl start mariadb

# systemctl enable mariadb

データベース初期設定
# mysql_secure_installation

(3)ファイアウォールの設定

# firewall-cmd --zone=public --add-service=http --permanent
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload

設定内容を確認する
# firewall-cmd --zone=public --list-service
cockpit dhcpv6-client dns http https ssh

(4)ルーターの設定

静的IPマスカレード設定に以下の設定を追加する

TCP/www → 自宅サーバーのIPアドレス/www
TCP/https → 自宅サーバーのIPアドレス/https

(5)接続確認

# vi /var/www/html/index.php

<?php 
phpinfo();

アクセスしてPHP情報が見れたら、ここまでの設定はOK。

http://自宅サーバー・グローバルIPアドレス/index.php

KAGOYAのVPSサーバーのバックアップ作業

(1)VPSサーバーから自宅サーバーにssh接続出来るようにする

VPSサーバーから自宅サーバーに接続するための秘密鍵をVPSサーバーに送信

自宅のローカル作業端末の接続設定
# cat .ssh/config
host kagoya
    user root
    hostname 133.xxx.xxx.xxx
    Identityfile ~/.ssh/KAGOYA_ログイン用認証キー_20190103102000.key
    TCPKeepAlive yes

秘密鍵を送信
# scp .ssh/id_rsa latoya:/root/.ssh/

VPSサーバーから自宅サーバーにログイン出来ることを確認する

自宅サーバーに接続するためのssh設定
# cat .ssh/config
host x61
    user root
    Port 接続用ポート番号
    HostName xxx,xxx,xxx,xxx   ← 自宅サーバーのグローバルIPアドレス
    TCPKeepAlive yes

ログイン出来ることを確認する
# ssh x61

(2)VPSサーバーのバックアップ作業

WordPressバックアップ
# cd /var/www
# tar zcvf ~/wordpress.tgz wordpress

SSL証明書バックアップ
# cd /etc
# tar zcvf ~/letsencrypt.tgz letsencrypt

Apache設定ファイル
# tar zcvf ~/apache.tgz https

データベースバックアップ
# cd
# mysqldump -uroot -pパスワード DB名 > DB名.dump

自宅サーバーにバックアップしたファイルを送信する(XXXXは接続ポート番号)
# scp -PXXXX wordpress.tgz x61:/root/
# scp -PXXXX letsencrypt.tgz x61:/root/
# scp -PXXXX apache.tgz x61:/root/
# scp -PXXXX DB名.dump x61:/root/

自宅サーバーのリストア作業

(1)データベースを作成する。

事前に、/var/www/wordpress/wp-config.phpを開いて、データベース名・接続ユーザ・接続パスワードをメモしておく。

# mysql -uroot -p{rootパスワード}

# create database {データベース名};

# GRANT ALL PRIVILEGES ON {データベース名}.* TO {接続用ユーザ}@localhost IDENTIFIED BY '{接続パスワード}' WITH GRANT OPTION;

(2)リストア作業

# cd

Wordpressのリソース
# tar zxvf wordpress.tgz

# mv wordpress /var/www/

データベース
# mysql -uroot -p{rootパスワード} wordpress < wordpress.dump

SSL証明書
# tar zxvf letsencrypt.tgz
# mv letsencrypt /etc/

Apache設定ファイル
# tar zxvf apache.tgz
# mv httpd/conf/httpd.conf /etc/httpd/conf/
# mv httpd/conf.d/*.conf /etc/httpd/conf.d/

(3)Apache再起動

# systemctl restart httpd

(4)host設定

外部DNSのアドレス変更する前に動作確認をする必要があるので、ローカル端末でhostsを設定する

# sudo vi /private/etc/hosts

次の行を追記
192.168.xxx.xxx  life60.net

(5)動作検証してからKAGOYAのVPSサーバー停止

  • 自宅の端末からブラウザでホームページにアクセス出来ることを確認する。
  • 外部DNSのAレコードを自宅サーバーのグローバルIPアドレスに変更する。
  • 外部DNSの変更が反映されるまで数時間が掛かるので、半日ほど置いてから、自宅の外からスマホ等を使用してホームページにアクセス出来ることを確認する。
  • KAGOYAのVPSサーバーを停止する

(6)SSL証明書の自動更新設定

手動で更新処理を試す

# certbot renew --post-hook "systemctl restart httpd"
Saving debug log to /var/log/letsencrypt/letsencrypt.log


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Processing /etc/letsencrypt/renewal/life60.net.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Cert not yet due for renewal



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:

  /etc/letsencrypt/live/life60.net/fullchain.pem expires on 2021-07-03 (skipped)
  
No renewals were attempted.

No hooks were run.


クーロン設定
# vi /etc/crontab


0 2 * * * root certbot renew --post-hook "systemctl restart httpd"

以上


コメント