先日書いた通り、Lightsailのインスタンスを新たに作り直して、このブログのサーバをCentOS 7からCentOS 9 Streamに移行しました。その時やった手順など、こちらの記事に残したいと思います。
インスタンスを作るところや、OSのセットアップについては省略します。
必要ソフトウェアのインストール
ApacheとPHPが必要なのでインストールします。
Apacheのインストール
インストールコマンドは以下です、パッケージ管理ツールがyumからdnfに変わっています。
/* インストール */
# dnf -y install httpd
/* 自動起動設定 */
# systemctl enable httpd
PHPのインストール
インストールコマンドは以下です。
/* リポジトリの追加 */
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
# dnf config-manager --set-enabled remi
# dnf update
/* インストール可能バージョンの確認 */
# dnf module list php
CentOS Stream 9 - AppStream
Name Stream Profiles Summary
php 8.1 common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 [e] common [d], devel, minimal PHP scripting language
/* インストールバージョンの指定 */
# dnf module enable php:remi-8.3 -y
/* インストール */
# dnf install php
/* バージョンの確認 */
# php -v
PHP 8.3.0RC2 (cli) (built: Sep 12 2023 11:29:39) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.0RC2, Copyright (c) Zend Technologies
with Zend OPcache v8.3.0RC2, Copyright (c), by Zend Technologies
/* 残りのパッケージのインストール */
# dnf install php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql
データベースの移行
WordPressの移行にあたり、まずはDBを移行します。同じCentOSなので、DBも同じMariaDBを使います。移行といっても流れは簡単で、移行元でバックアップしたDBを移行先にインポートするだけの手順となります。
MariaDBインストール
インストールコマンドは以下です。
/* インストール */
# dnf -y install mariadb-server
/* 自動起動設定 */
# systemctl enable mariadb
MariaDBの初期設定
MariaDBの初期設定を行います。途中の文言は省略して、応答する部分だけ抜粋します。
# mysql_secure_installation
/* unix_socket 認証を使うか。noでOK */
Switch to unix_socket authentication [Y/n] n
... skipping.
/* rootパスワードを設定するか。noでOK */
Change the root password? [Y/n] n
... skipping.
/* 匿名ユーザを削除するか。yesでOK */
Remove anonymous users? [Y/n] y
... Success!
/* rootユーザのリモートログインを無効にするか。yesでOK */
Disallow root login remotely? [Y/n] y
... Success!
/* テスト用のデータベースを削除するか。yesでOK */
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
/* 特権情報をリロードするか。yesでOK */
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
最後の “Thanks for using MariaDB!” が表示されたら完了です。
移行元DBのバックアップ
移行元のサーバ側で、DBのデータをバックアップします。DBにログインする必要はありません。
ファイル名などは以下の通り読み替えてください。
- データベース名:wordpress
- 出力ファイル名:wp_backup.sql
# mariadb-dump --databases wordpress > wp_backup.sql
移行先DBのインポート
移行先のサーバで、バックアップしたデータをインポートします。適宜SCP等で転送してください。
# mariadb < wp_backup.sql
インポートできたら、mariadb側でも読み込まれている事を確認します。以下は表示例なので環境によって異なります。
# mariadb
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
+--------------------+
4 rows in set (0.002 sec)
MariaDB [(none)]>
ユーザ作成
DBのユーザを作成します。ここでは、移行元で使っていたユーザと同じ名前にします。
ユーザ名とパスワードは以下の通り読み替えてください。
- ユーザ名:user_name
- パスワード:password
MariaDB [(none)]> grant all privileges on wordpress.* to user_name@localhost identified by 'password';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
ユーザを表示して作成されたことを確認します。
MariaDB [(none)]> select user,host,password from mysql.user;
+-------------+-----------+-------------------------------------------+
| User | Host | Password |
+-------------+-----------+-------------------------------------------+
| mariadb.sys | localhost | |
| root | localhost | invalid |
| mysql | localhost | invalid |
| user_name | localhost | 暗号化されたパスワード |
+-------------+-----------+-------------------------------------------+
4 rows in set (0.002 sec)
MariaDB [(none)]>
DB周りはこれで以上です。
WordPressの移行
ここからはWordPressの移行です。WordPressも、基本的には移行元のサーバから丸ごとデータを移して移行します。
移行元サーバでデータを圧縮
そのままSCPで転送してもいいのですが、ファイルが多いためzipで圧縮してファイルを移行します。
WordPress本体が /var/www/html/wordpress のパスに格納されている前提で進めます。
# cd /var/www/html
/* 圧縮コマンド */
# zip -r wordpress.zip ./wordpress
/* lsでwordpress.zipが存在することを確認します */
# ls -ltr
圧縮出来たら、移行先サーバにSCP等で転送します。
移行先サーバで解凍
ファイルが転送出来たら、移行先サーバでファイルを解凍します。所有者・グループなどが変わっている場合は、そちらも変更します。
# cd /var/www/html
/* zipを解凍 */
# unzip wordpress.zip
/* 所有者とグループの変更 */
# chown -R apache:apache .
各種設定ファイルについて
httpd.confや、.htaccess等の設定ファイルについても、移行元サーバから適宜SCPで変更、パーミッションの修正をして移行元・先のサーバで同じ設定になるようにします。(手順は割愛)
SSL証明書の移行
本ブログはLet’s EncryptでSSL証明書を発行しているので、そちらも移行する必要があります。
元の証明書を失効させて新たに発行することも可能ですが、同じブログを同じドメインで移行するだけなので、証明書ファイルごと移行する方法をとりたいと思います。
Certbotクライアントのインストール
まずはインストールからです、コマンドは以下になります。
# dnf install epel-release
# dnf install certbot
証明書関連ファイルのバックアップ
Let’s Encrypt関連のファイルは移行元サーバの以下に格納されているので、こちらを丸ごとzip圧縮します。
# cd /etc
# zip -r letsencrypt.zip ./letsencrypt
移行先サーバで解凍
圧縮したファイルを移行先サーバに移し、同じディレクトリ構造となるように解凍します。
# cd /etc
# unzip letsencrypt.zip
シンボリックリンク再作成
証明書ファイルですが、/letsencrypt/live/xxxx.xxx の中にあるファイルはシンボリックリンクとなっています。ファイルの実体は /letsencrypt/archive/xxxx.xxx に入っているので、シンボリックリンクを再度紐づける必要があります。
ドメインは以下に読み替えてください。
- ドメイン名:xxxx.xxx (siriusblue.netなど)
# cd /etc/letsencrypt/live/xxx.xxx
/* シンボリックリンクから実ファイルに変わっているため、以下4ファイルを削除する */
# rm -i ./*
rm: remove regular file 'cert.pem'?y
rm: remove regular file 'chain.pem'?y
rm: remove regular file 'fullchain.pem'?y
rm: remove regular file 'privkey.pem'?y
/* シンボリックリンクを再作成する */
# ln -s ../../archive/xxx.xxx/cert99.pem cert.pem
# ln -s ../../archive/xxx.xxx/chain99.pem chain.pem
# ln -s ../../archive/xxx.xxx/fullchain99.pem fullchain.pem
# ln -s ../../archive/xxx.xxx/privkey99.pem privkey.pem
数字で”99″とした箇所は、証明書を更新した回数によって環境ごとに数が変わるため、最新の数字に置き換えてください。
証明書更新確認
証明書更新が正しく行われるか確認します。
この確認までに、DNS側の設定でIPアドレスのレコード修正をしておくことをお勧めします。というか、私の環境ではドメインを移行しない状態で動作確認ができませんでした。
/* 更新コマンド */
# certbot renew
更新までまだ期間があり、更新されなかった場合は、以下のように表示されます。前回更新から60日経っていないと更新されないようです。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/xxx.xxx.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
/etc/letsencrypt/live/xxx.xxx/fullchain.pem expires on yyyy-mm-dd (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
更新されない場合は、テストコマンドで確認します。
/* テストコマンド */
# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/xxx.xxx.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for xxx.xxx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/xxx.xxx/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(success) と表示されればOKです。
おわりに
細かい手順など抜けがあるかもしれませんが、ここまでやればおおよそアクセスできるようになっているはずです。何か思い出したら追記していきたいと思います。
著者について