自宅のwebサーバをラズパイ最新OSであるBusterでセッティングした

現在、ブログ運営のサーバのOSは、2世代前の Jessie となっています。ブログの立ち上げが、2017年2月だった関係ですが、さすがに古くなってきました。

PHP や apache のバージョンも低いので、最新のソフトを使用したいときなど支障が出始めています。

以前、電光掲示板を動かすラズパイのOSを Stretch に変えています(ラズパイ電光掲示板用のOSをJessieからstretchにバージョンアップした)ので、ブログ運営のサーバ(ウェブサーバ)も同様に Stretch に格上げしたいと思います。

何故、最新OSであるBuster ではなく、一世代前のOSなのでしょうか?実は、60爺にとって最新OSでは敷居が高いと思っていたのです。

しかし、実際やってみると思いのほかに問題なく Stretch でウェブサーバを運用するところまでできたことで、更なるアップを目指したくなりました。

その理由は、Stretch ですと、PHP が標準で 7.0.33 であり、wordpress 5.4.1 のサイトヘルスで、「PHP を最新版にしろ」と言われたことです。

そこで、ウェブサーバは stretch で運用させておき、裏側で Buster のセットアップを実施してみました。

手順は、OSが変わっただけで Stretch のセットアップと変わりません。

  1. ラズパイOSインストール(パスワード変更含む)
  2. ラズパイID変更、rootパスワード設定
  3. apache2インストール
  4. phpインストール
  5. MySQLインストール
  6. バックアップ内容コピー
  7. wordpressリストア
  8. MySQLリストア
  9. apache2 virtual host設定
  10. indexファイル設定
  11. bind設定
  12. IPアドレス固定
  13. バックアップの設定

1.ラズパイOSインストール

busterは、このページからダウンロードしました。

ECHERを使用して、ZIPから直接microSDカードへ書き込みます。

書き込み終了まで、しばし待った後、ラズパイにセットして電源をオンし初期設定(地域の設定、パスワード変更、wifi設定)を行います。

この時、忘れずにパスワードを変更しましょう。

最後に、ソフトウェアのアップデートが行われます。

これが終わると、OSのインストールは終了です。

sshを設定したのち、rebootします。

rebootの後、ラズパイのディストリビューションとバージョンを確認しましょう。lsb_release -aとcat /etc/os-releaseですね。

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
pi@raspberrypi:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

現在稼働中のカーネルについての名前と情報をみておきましょう。

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l GNU/Linux

2.ID変更、rootパスワード設定

標準のIDであるpiをサーバ向けのIDに変更します。詳細は、「ラズパイ ID(ユーザ名)、パスワードの変更忘れに注意」に詳しいです。

【作業用ID作成】

sudo useradd -M temp
sudo gpasswd -a temp sudo
sudo passwd temp

【CLI設定】

sudo raspi-config (ラズパイ初期設定メニュー起動)
3 のBoot Option 選択
B1のDesktop / CLI 選択
B1 Console 選択
<了解>クリック

【ID設定】

temp@raspberrypi:/$ sudo usermod -l XXXXXXX pi
[sudo] temp のパスワード:
temp@raspberrypi:/$ sudo usermod -d /home/XXXXXXX -m XXXXXXX
temp@raspberrypi:/$ sudo groupmod -n XXXXXXX pi

【作業用ID削除】

mizutan@raspberrypi:~ $ sudo userdel temp
[sudo] XXXXXXX のパスワード:

【rootパスワード更新】

rootパスワードを設定します。

mizutan@raspberrypi:~ $ sudo passwd root
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました

3.apache2インストール

まずは、インストールされるバージョンを見てみましょう。

mizutan@raspberrypi:~ $ apt-cache policy apache2
apache2:
インストールされているバージョン: (なし)
候補: 2.4.38-3+deb10u3
バージョンテーブル:
2.4.38-3+deb10u3 500
500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

apacheをインストールします。

mizutan@raspberrypi:~ $ sudo apt install -y apache2

インストールされたapacheのバージョンを見ます。事前に見ておいたものと一緒ですね。

mizutan@raspberrypi:~ $ apachectl -v
Server version: Apache/2.4.38 (Raspbian)
Server built: 2019-10-15T19:53:42

4.PHPインストール

次は、PHPのインストールです。apacheと同様に、インストールされるバージョンを見てみましょう。

pi@raspberrypi:~ $ apt-cache policy php
php:
インストールされているバージョン: (なし)
候補: 2:7.3+69
バージョンテーブル:
2:7.3+69 500
500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages

バージョンは 7.3 です。wordpressで推奨されているバージョンですね。

それでは、インストールしていきます。合わせて、wordpressで必要となるライブラリもインストールします。

mizutan@raspberrypi:~ $ sudo apt-get install php7.3
mizutan@raspberrypi:~ $ sudo apt install -y php7.3-fpm php7.3-mysql php7.3-dom php7.3-simplexml php7.3-ssh2 php7.3-xml php7.3-xmlreader php7.3-curl php7.3-exif php7.3-ftp php7.3-gd php7.3-iconv php7.3-imagick php7.3-json php7.3-mbstring php7.3-posix php7.3-sockets php7.3-tokenizer php7.3-zip

参考
How To Install PHP 7.4 / 7.3 / 7.2 / 7.1 on Debian 10 / Debian 9

最後に、バージョンの確認をします。バージョン 7.3.14 ですね。

mizutan@raspberrypi:~ $ php -v
PHP 7.3.14-1~deb10u1 (cli) (built: Feb 16 2020 15:07:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.14-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies

5.MySQLインストール

インストールするのは、無償版のmariadbです。

sudo apt install mariadb-server

インストール後、mysqlの内容を見ようとしたところ、パスワード要求が来てしまいました。

インストール時、パスワード設定していないので、途方に暮れてしまい、何とか参考の記事を見つけ対応しました。

一つ目の記事だけでは対応しきれない場合は、二番目の記事もご覧ください。下記コマンドでパスワードが設定できました。

ALTER USER 'root'@'localhost' IDENTIFIED BY "XXXXXXXX";

参考資料
ラズベリーパイにMariadbをインストールした時のメモ
MariaDBの初期パスワード変更方法

6.バックアップ内容のコピー

別のラズパイに設定してある、MySQLとwordpressのバックアップ内容を、本サーバにコピーします。

【MySQL】

mizutan@raspberrypi:~ $ scp pi@192.168.XXX.ZZZ:/tmp/dump.sql /tmp
pi@192.168.254.203's password:
dump.sql 100% 33MB 1.2MB/s 00:27

wordpressは三つ持っていますので、全てコピーします。

【wordpress】

mizutan@raspberrypi:~ $ scp pi@192.168.XXX.ZZZ:/tmp/wordpress* /tmp
pi@192.168.XXX.ZZZ's password:
wordpress.tar.gz 100% 183MB 1.1MB/s 02:46
wordpress_book.tar.gz 100% 50MB 1.0MB/s 00:48
wordpress_okusama.tar.gz 100% 21MB 1.0MB/s 00:20

7.wordpressリストア

wordpressをそれぞれリストアします。

mizutan@raspberrypi:/var/www $ sudo tar zxvf /tmp/wordpress.tar.gz
mizutan@raspberrypi:/var/www $ sudo tar zxvf /tmp/wordpress_book.tar.gz
mizutan@raspberrypi:/var/www $ sudo tar zxvf /tmp/wordpress_okusama.tar.gz

8.MySQLリアストア

次に、MySQLをリストアします。

mizutan@raspberrypi:~ $ mysql -uroot -p -hlocalhost < /tmp/dump.sql
Enter password:

パスワード入力後、しばらく待ちましょう。

正しくリストアされたか、MySQLに入って DATABASE が構築されているかを確認します。

mizutan@raspberrypi:~ $ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 67
Server version: 10.3.22-MariaDB-0+deb10u1 Raspbian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
| wordpress_book |
| wordpress_o |
+--------------------+
6 rows in set (0.002 sec)

MariaDB [(none)]> quit
Bye

データベースとして、wordpress、wordpress_book、wordpress_oが作成されていますね。無事にリストアできたようです。

9.apache2 virtual host 設定

www.mizutan.com、book.mizutan.com、okusama.mizutan.comの三つを virtual host として運営しているので、その設定をします。

【confのコピー】

旧サーバの/etc/apache2/sites-available/にあるconfをコピーします。

mizutan@raspberrypi:~ $ cd /etc/apache2/sites-available/
mizutan@raspberrypi:/etc/apache2/sites-available $ ls
000-default.conf default-ssl.conf
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo scp mizutan@192.168.XXX.YYY:/etc/apache2/sites-available/www.mizutan.com.conf www.mizutan.com.conf
The authenticity of host '192.168.XXX.YYY (192.168.XXX.YYY)' can't be established.
ECDSA key fingerprint is SHA256:M/Z3ghCdSck7fyzrbGmUFQ1cjte3shpQnT8T48YWmvQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.XXX.YYY' (ECDSA) to the list of known hosts.
mizutan@192.168.XXX.YYY's password:
www.mizutan.com.conf 100% 354 101.5KB/s 00:00
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo scp mizutan@192.168.XXX.YYY:/etc/apache2/sites-available/book.mizutan.com.conf book.mizutan.com.conf
mizutan@192.168.XXX.YYY's password:
book.mizutan.com.conf 100% 375 100.9KB/s 00:00
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo scp mizutan@192.168.XXX.YYY:/etc/apache2/sites-available/okusama.mizutan.com.conf okusama.mizutan.com.conf
mizutan@192.168.XXX.YYY's password:
okusama.mizutan.com.conf 100% 390 94.6KB/s 00:00

【シンボリックリンク作成】

今、設定したconfファイルに対するシンボリックリンクを作成します。作成場所は、/etc/apache2/sites-enabled/です。

現時点では、設定したconfに対するシンボリックリンクはありません(当たり前^^;)

mizutan@raspberrypi:/etc/apache2/sites-available $ cd ../sites-enabled/
mizutan@raspberrypi:/etc/apache2/sites-enabled $ ls
000-default.conf
mizutan@raspberrypi:/etc/apache2/sites-enabled $ ls -l
合計 0
lrwxrwxrwx 1 root root 35 6月 12 13:25 000-default.conf -> ../sites-available/000-default.conf

それでは、シンボリックリンクを作成していきます。a2ensiteコマンドを使用します。

mizutan@raspberrypi:/etc/apache2/sites-enabled $ cd ../sites-available/
mizutan@raspberrypi:/etc/apache2/sites-available $ ls
000-default.conf default-ssl.conf www.mizutan.com.conf
book.mizutan.com.conf okusama.mizutan.com.conf
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo a2ensite www.mizutan.com.conf
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo a2ensite book.mizutan.com.conf
mizutan@raspberrypi:/etc/apache2/sites-available $ sudo a2ensite okusama.mizutan.com.conf

シンボリックリンクが出来ているか確認します。

mizutan@raspberrypi:/etc/apache2/sites-available $ ls -l ../sites-enabled/
合計 0
lrwxrwxrwx 1 root root 35 6月 12 13:25 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 40 6月 12 14:34 book.mizutan.com.conf -> ../sites-available/book.mizutan.com.conf
lrwxrwxrwx 1 root root 43 6月 12 14:35 okusama.mizutan.com.conf -> ../sites-available/okusama.mizutan.com.conf
lrwxrwxrwx 1 root root 39 6月 12 14:34 www.mizutan.com.conf -> ../sites-available/www.mizutan.com.conf

【apache2 restart】

各 conf ファイルに a2ensite すると、次の文言が出て、apache2 の reload を促されます。

Enabling site okusama.mizutan.com.
To activate the new configuration, you need to run:
systemctl reload apache2

60爺は、apache2 を restart しました。

mizutan@raspberrypi:/etc/apache2/sites-available $ sudo systemctl restart apache2

10.indexファイル設定

wordpressのトップページとして、index.htmlを指定しているため、www.mizutan.com、book.mizutan.com、okusama.mizutan.comの三つのファイルが必要です。

これらを、旧サーバより、該当の html へコピーします。

/var/www の中を見てみます。最初は、htmlフォルダしかありません。

mizutan@raspberrypi:/etc/apache2/sites-available $ cd /var/www
mizutan@raspberrypi:/var/www $ ls
html wordpress wordpress_book wordpress_okusama

【www.mizutan.com】

mizutan@raspberrypi:/var/www $ cd html
mizutan@raspberrypi:/var/www/html $ sudo scp mizutan@192.168.XXX.YYY:/var/www/html/index.html /var/www/html/
mizutan@192.168.XXX.YYY's password:
index.html 100% 204 61.0KB/s 00:00

【book.mizutan.com】

最初に、book及びokusama用のディレクトリ html_book,html_okusamaを作成後、index.htmlをコピーします。

mizutan@raspberrypi:/var/www $ sudo mkdir html_book
mizutan@raspberrypi:/var/www $ sudo mkdir html_okusama
mizutan@raspberrypi:/var/www $ cd html_book/
mizutan@raspberrypi:/var/www/html_book $ sudo scp mizutan@192.168.XXX.YYY:/var/www/html_book/index.html /var/www/html_book/
mizutan@192.168.XXX.YYY's password:
index.html 100% 205 42.8KB/s 00:00

【okusama.mizutan.com】

mizutan@raspberrypi:/var/www/html_book $ cd ../html_okusama/
mizutan@raspberrypi:/var/www/html_okusama $ sudo scp mizutan@192.168.XXX.YYY:/var/www/html_okusama/index.html /var/www/html_okusama/
mizutan@192.168.XXX.YYY's password:
index.html 100% 208 59.5KB/s 00:00

11.bind設定

DNSの解決に bind9 を使用しています。まずは、インストールします。

mizutan@raspberrypi:~ $ sudo apt-get install bind9

次に、/etc/bind/の環境ファイルを移行します。これも、旧サーバから移行します。

mizutan@raspberrypi:~ $ sudo scp mizutan@192.168.XXX.YYY:/etc/bind/* /etc/bind/
mizutan@192.168.XXX.YYY's password:
254.168.192.in-addr.arpa 100% 305 23.2KB/s 00:00
bind.keys 100% 3923 358.8KB/s 00:00
book.mizutan.com.lan 100% 318 38.4KB/s 00:00
db.0 100% 237 12.1KB/s 00:00
db.127 100% 271 25.6KB/s 00:00
db.255 100% 237 4.8KB/s 00:00
db.empty 100% 353 84.3KB/s 00:00
db.local 100% 270 67.2KB/s 00:00
db.root 100% 3048 428.5KB/s 00:00
mizutan.com.lan 100% 257 60.3KB/s 00:00
mizutan.com.lan.bk 100% 257 7.6KB/s 00:00
mizutan.com.lan.org 100% 234 53.0KB/s 00:00
named.conf 100% 463 71.1KB/s 00:00
named.conf.default-zones 100% 966 144.4KB/s 00:00
named.conf.default-zones.bk 100% 662 101.5KB/s 00:00
named.conf.default-zones.org 100% 658 153.9KB/s 00:00
named.conf.default-zones190414 100% 764 174.3KB/s 00:00
named.conf.local 100% 165 41.4KB/s 00:00
named.conf.options 100% 1122 211.1KB/s 00:00
named.conf.options.org 100% 890 198.6KB/s 00:00
okusama.mizutan.com.lan 100% 330 79.2KB/s 00:00
scp: /etc/bind/rndc.key: Permission denied
www.mizutan.com.lan 100% 245 54.3KB/s 00:00
www3.mizutan.com.lan 100% 249 29.3KB/s 00:00
zones.rfc1918 100% 1317 179.6KB/s 00:00

12.IPアドレス固定

新サーバとして稼働するために、有線LANを使用した際に、IPアドレスを固定します。

ラズパイの場合は、/etc/dhcpcd.confに下記の4行を追加します。

interface eth0
static ip_address=192.168.XXX.YYY/24
static routers=192.168.254.1
static domain_name_servers=192.168.XXX.YYY

13.バックアップの設定

以前のバックアップシェル blog_backup.sh では、bookとokusamaのwordpressをバックアップしていないことがわかりました。このため、これらを追加して次のようになりました。

#!/bin/sh
mysqldump -u root -pPPPPPPPPPPP -x --all-databases > /tmp/dump.sql
cd /var/www
tar cvzf /tmp/wordpress.tar.gz wordpress
tar cvzf /tmp/wordpress_book.tar.gz wordpress_book
tar cvzf /tmp/wordpress_okusama.tar.gz wordpress_okusama

cp /tmp/dump.sql /root/Raspi_214
cp /tmp/wordpress.tar.gz /root/Raspi_214
cp /tmp/wordpress_book.tar.gz /root/Raspi_214
cp /tmp/wordpress_okusama.tar.gz /root/Raspi_214

chown root.root /tmp/dump.sql
chown root.root /tmp/wordpress.tar.gz
chown root.root /tmp/wordpress_book.tar.gz
chown root.root /tmp/wordpress_okusama.tar.gz

chmod 700 /tmp/dump.sql
chmod 700 /tmp/wordpress.tar.gz
chmod 700 /tmp/wordpress_book.tar.gz
chmod 700 /tmp/wordpress_okusama.tar.gz

実行権を与えます。

root@raspberrypi:~/blog_backup# chmod 755 blog_backup.sh
root@raspberrypi:~/blog_backup# ls -l
合計 4
-rwxr-xr-x 1 root root 714 6月 12 15:11 blog_backup.sh

また、フォルダ Raspi_214 は、LAN内の別のラズパイのフォルダにマウントしました。

sshfs /root/Raspi_214 pi@192.168.XXX.ZZZ:/tmp

以上で設定が完了です。

これで、Buster による新サーバが動き出します。