以前、ラズパイ4(Raspberry Pi 4)のApache上でローカル専用WordPressサイトを作る記事を書きました。
今回はnginx(エンジンエックス)上でWWW公開するためのWordPressサイト(Let’s EncryptでSSL化済)の作り方を書いてみます。
あちらこちら調べ回ったため、この記事は私自身のメモとして残すのを目的としています。
- はじめに結論:ラズパイは公開用Webサーバとして運用していけるのか?
- なぜ、nginx(エンジンエックス)でWebサーバを作るのか?
- 前提
- 手順概要・所要時間
- 事前準備
- LAMPの順序のようにインストール(4分)
- nginx 設定(6分)
- ルータのポート開放(1分)
- MyDNS取得ドメインのSSL化:certbot インストール・Let’s Encrypt 取得(3分)
- ルータのポートを閉じる
- phpをWordPress仕様に調整(11分)
- WordPressサイト作成
- ルータのポート開放して、スマホでサイトを確認
- WordPressサイト設置後にやること
- SSD起動のラズパイが再起動後、起動しなくなった時の対処方法
- 脚注
はじめに結論:ラズパイは公開用Webサーバとして運用していけるのか?
- 結論:WWWからのサーバレスポンスを仮に許容しても、目の届かないタイミングでサーバダウンに不安を感じ、ラズパイ4をWebサーバとして運用していく気にならない(個人の感想)
私のラズパイ4が32-bitだからかもしれませんが、スマホでWWWからアクセスするとサーバレスポンスが「やっぱりな」という程度のもたつき感があります。
恐らく、一般ユーザがアクセスすると、サイト内ページ遷移が遅く感じ、
「ユーザに迷惑が掛かることになる」と思います。
大事なデータやコンテンツは、とても安心してラズパイサーバに置けないので、
潰れても良いコンテンツを置くのが無難な使用法になると思います。
実用的な用途としては、
<ラズパイサーバの実用例>
- Linuxでnginxサーバの構築手順を覚える練習(apacheよりは、設定工程が少なく済みます)
- サーバ構築手順を理解すると、ハイスペックLinuxマシンを入手したときに、実用化できるかもしれません。
- Duplicatorでのサーバ移転の練習(今回、10回近くやり直しました)
- サーバまるごと不具合起こしても構わない気構えのサイト設置(2週間で2回、SSDを作り直しました)
- 月1回も更新しない頻度のWordPressサイトの設置
- 1日に0〜2アクセス程度のWordPressサイトの設置
後述でサーバまるごとバックアップする方法も書いているので、復旧は可能ですが、
毎日、サーバダウンに怯えるよりは、
のプランを契約する方が日々のメンタルには良いと思います。
特に、サーバの月額電気代が220円を超える場合は、上のレンタルサーバを契約する方が、
サーバセキュリティやサーバダウンなど気にせずに済むので、
精神衛生的にもベターだと思います。
なぜ、nginx(エンジンエックス)でWebサーバを作るのか?
- 公式サイト:https://nginx.org/
- Wikipedia
- apacheよりnginxの方が速いから
- apacheより設定工程が少なく、シンプルだから
前提
- 本記事のサーバ知識は全て独学であり、専門的に学んでおりません。出来る限りの検証を繰り返した上で内容を書いていますが、故障や不具合が発生した場合には一切責任を負えません。予めご了承ください。
- ラズパイOS Lite を使用(サーバの軽量化目的)
- SSH有効化を済ましている
- Timezoneの設定を済ましている(Timezoneが異なるPCからSSH接続すると、弾かれました)
sudo apt update
,sudo apt upgrade
を済ましている
- ラズパイSSD起動化済(サーバの処理速度を高める目的)
- 有線LANで接続(有線LANの方がWi-Fiより速いので。有線にできない場合はこちらを検討ください)
- Bluetooth, Wi-Fi共に無効化を済ましている
- IPアドレス固定化を済ましている
- DebianからSSH接続でラズパイサーバ構築します
- MyDNSで無料ドメインを取得済(独自ドメインの場合は、DNS設定を済ましておく)
- nginx, mariadb, phpは、ラズパイ公式リポジトリのバージョンを使用(基礎理解を目的のため)
- DocumentRootは
/var/www/html
を使用(基礎理解を目的のため) - SSHで入力するコマンドを赤字、ユーザ環境に応じて変更する箇所を黄色ラインで示しています。
手順概要・所要時間
- 所要時間:40〜60分
- 事前準備(6分)
- SSHのセキュリティ対策
- Auto Login をconsole text(1分)
- SSHのポート変更(2分)
- ufwをインストール・変更ポートを許可(3分)
- SSHのセキュリティ対策
- LAMPの順序のようにインストール(4分)
- nginx インストール(1分)
- mariadb-server インストール(1分)
- php インストール(2分)
- nginx 設定(6分)
/etc/nginx/sites-available/default
をバックアップ(1分)/etc/nginx/sites-available/default
を編集(2分)- ufw で’Nginx Full’を許可(1分)
- nginx 動作確認(2分)
- ルータのポート開放(1分)
- MyDNS取得ドメインのSSL化:certbot インストール・Let’s Encrypt 取得(3分)
- ルータのポート閉じる(1分)
- phpをWordPress仕様に調整(11分)
- WordPressサイト作成(5分)
- ルータのポート開放(1分)
- スマホでサイトを確認(1分)
事前準備
SSHのセキュリティ対策(6分)
起動後のログイン時にユーザー名・パスワードを必須に設定(1分)
sudo raspi-config
System Options>Boot / Auto Login>B1 Console
を選択し、Tabキー、OKでEnterキーを打鍵。
raspi-config のトップメニューに戻るので、Tabキー2回、FinishでEnterキーを打鍵。
「Would you lik to reboot now(今すぐ再起動しますか?)」と尋ねられるので、
YesでEnterキーを打鍵。
ラズパイが再起動後、再度DebianからSSHで接続。
SSHのポート変更(2分)
- 関連記事:
SSHのポート番号はデフォルトでは22です。このまま使用すると危険なので、下記の範囲でポート番号を変更します(黄色)。
5桁だと複雑なポート番号が作れるので、ベターだと思います。
You should run SSH on an unprivileged port number, i.e. from 1024 to 65535
引用:https://unix.stackexchange.com/questions/196484/what-it-the-min-max-port-range-for-ssh
cd /etc/ssh #ディレクトリ移動
sudo cp sshd_config sshd_config.org #元のsshd_configファイルをバックアップ。「.org」はorignalの略。
sudo nano /etc/ssh/sshd_config #nanoでファイルを開き、編集
Port xxxxx #行頭の「#」を削除してポート番号を上記の範囲で変更する
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
sudo reboot
ssh -p xxxxx username@ラズパイIPアドレス #新しいポート番号へSSH接続する
ufwをインストール・変更ポートを許可(3分)
- 関連記事:ラズパイのufw設定
ufwをインストールし、SSH変更ポートに適用して、有効化します。
1行ずつ実行してください。
sudo apt install ufw
sudo ufw limit xxxxx
sudo ufw enable
sudo ufw status
Status: active
To Action From
-- ------ ----
xxxxx LIMIT Anywhere
xxxxx (v6) LIMIT Anywhere (v6)
IPv6からのSSH接続は不要なので、以下のコマンドで削除します。
sudo ufw delete 2
再度、ufwの状況を確認します。
sudo ufw status
Status: active
To Action From
-- ------ ----
xxxxx LIMIT Anywhere
LAMPの順序のようにインストール(4分)
- 関連記事:LAMPとは?
ここでは先にインストールを一式に行い、後で細々と設定します。
nginx インストール(1分)
sudo apt install nginx
mariadb-server インストール(1分)
- 関連記事:ラズパイにmariaDBをインストール
sudo apt install mariadb-server
php インストール(2分)
apacheでWordPressを動かすPHPに、php-fpm
を追加して記述しています。
apache関連は不要と思われるかもしれませんが、大した容量でもないので、
念の為インストール内容に入れています。
WordPressプラグインの中には、以下のどれかのphp不足が原因で正しく機能しない場合があります。
私の体験では、php-gdのインストールが抜け落ちて、SiteGurad WP Pluginの画像認証が動作しなくなりました。
一通りのphpをインストールしておくのが無難だと思います。
sudo apt install php libapache2-mod-php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl
apacheプログラムをインストールしていないのに、nginxより優先して有効化され、apacheが先にポートを占有し、nginxが起動できないエラーが生じました。
そのため、ラズパイ起動してもapacheが起動しない設定にしておきます。
sudo systemctl disable apache2
nginx 設定(6分)
/etc/nginx/sites-available/default のバックアップ(1分)
cd /etc/nginx/sites-available #ディレクトリ移動
sudo cp default default.org #defaultファイルをバックアップ
/etc/nginx/sites-available
配下でバックアップファイルが作成されたのを確認
ls
default default.org
/etc/nginx/sites-available/default ファイルを編集(2分)
sudo nano /etc/nginx/sites-available/default
このステップで3箇所の赤字部分を入力してください。
- index.php: index.php でのトップページ表示を可能にする
- xxx.mydns.jp: MyDNS で取得したドメインを入力する
- /index.php?$args: WordPressでのパーマリンク変更を可能にする[1]出典:https://hacknote.jp/archives/57635/
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name xxx.mydns.jp;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
nginx の文法チェック。
sudo nginx -t
以下のような結果になればOKです。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx に設定を再読込。
sudo nginx -s reload
nginx を再起動。
sudo systemctl restart nginx
ufw で’Nginx Full’を許可(1分)
ufwの設定は、nginx をインストールしてから行ってください。
nginxインストール時にプロファイルが作られるので、’Nginx Full’が可能となります。
ポート番号80, 443にufwを適用します。
sudo ufw allow 'Nginx Full'
~ $ sudo ufw status
Status: active
To Action From
-- ------ ----
xxxxx LIMIT Anywhere
Nginx Full ALLOW Anywhere
Nginx Full (v6) ALLOW Anywhere (v6)
nginx 動作確認(2分)
nginxの動作がactiveになっているのか状況を確認します。
sudo systemctl status nginx
active(running) の緑字ならOKです。
Qキーを打鍵して抜けます。
ufwを適用したら、DebianのブラウザにラズパイのIPアドレスを入力します。
初めはApacheのDefault Pageが表示されると思います。
以下のコマンドでDebian Default Pageを削除します。
sudo rm /var/www/html/index.html
上のブラウザを再読込すると、nginxのdefault pageが表示されると思います。
これでnginxサーバが作動しているのが確認できました。
ラズパイが起動する都度、nginxが起動するように有効化。
sudo systemctl enable nginx
ルータのポート開放(1分)
次のステップのSSL化のために、一時的にルータのポートを開放します。
- 契約しているISPからレンタル中のルータ機にログイン
- ポートマッピングまたはポートフォワードの設定:
- ラズパイのIPアドレスを入力
- ポート:80-80
- ポート:443-443
初めてポート開放したときは、やり方をかなり調べました。
「契約しているISP名 ルータ ポートマッピング」などで検索すると、情報に辿り着くと思います。
この段階でのセキュリティは、ポート番号80と443だけufwで許可しています。
MyDNS取得ドメインのSSL化:certbot インストール・Let’s Encrypt 取得(3分)
- 参考:https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ja
- Let’s Encryptの期限更新のコマンドについては後述しています。
狙い:WordPressデータを流し込む入れ物(ディレクトリ)を先にSSL化する
certbotをnginx用プラグインと一緒にインストールします。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d xxx.mydns.jp
下記の手続きの途中、「メーリングリストに登録しますか?」と尋ねられます(赤線)。私は無料で使わせてもらっているので、yesにしました。この判断は任意です。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): xxx@xxx.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for xxx.mydns.jp
Performing the following challenges:
http-01 challenge for xxx.mydns.jp
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://xxx.mydns.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subscribe to the EFF mailing list (email: xxx@xxx.jp).
We were unable to subscribe you the EFF mailing list. You can try again later by visiting https://act.eff.org.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/xxx.mydns.jp/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/xxx.mydns.jp/privkey.pem
Your certificate will expire on 2023-06-09. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again with the "certonly" option. To non-interactively
renew *all* of your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
SSL品質の確認。
https://www.ssllabs.com/ssltest/
ルータのポートを閉じる
certbot によるSSL化が成功したら、一旦、ルータのポートを閉じます。
ルータ内のポートマッピング設定を削除します。
外部からアクセスできない状態で、WebサーバやWordPressの設定を進めます。
phpをWordPress仕様に調整(11分)
certbotによるSSL化が成功すると、/etc/nginx/sites-available/default
ファイルが自動的に書き換わっています。
この書き換わったファイルに手を加え、nginx上でphpが動く仕様に調整します。
nginxでphpが動くように設定(1分)
sudo nano /etc/nginx/sites-available/default
赤字の「#」を削除し、有効にします。
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
WordPressがフル稼働するよう、php.ini を調整(10分)
php.ini のバックアップを取ってから作業するのが無難だと思います。
1行ずつ実行してください。
cd /etc/php/7.4/fpm #ディレクトリ移動
sudo cp php.ini php.ini.org #元ファイルをバックアップ
ls #ディレクトリ配下を確認
conf.d php-fpm.conf php.ini php.ini.org pool.d
1.空きRAMを知るために、一旦再起動し、DebianからSSH接続します。
1行ずつ実行してください。
sudo reboot
ssh -p xxxxx username@ラズパイIPアドレス
2.ラズパイの空きRAMを調べます。
free -h
total used free shared buff/cache available
Mem: 3.8Gi 114Mi 3.5Gi 3.0Mi 225Mi 3.6Gi
ざっくりと、3GBのRAMをphpに割り当てることにしました。
3GBをMBに直し、近い数値を求めます。
3000MB÷128MB≒23.4
128MB☓24倍=3072MB
以下のphp.ini の3箇所を3072に変更します。
※この割当数値が適切か否か分かりませんので、保証できません。ラズパイが正しく動作しない恐れがあります。
2.php.iniファイルを編集するために、以下を入力、実行。
sudo nano /etc/php/7.4/fpm/php.ini #nanoでphp.iniファイル編集
以下の文字列を探し出して、数値を変更。
max_execution_time = 600 #Duplicatorがタイムアウトにならないために、長めに変更
memory_limit = 3072M #上で計算した数値
post_max_size = 3072M #上で計算した数値
upload_max_filesize = 3072M #上で計算した数値
数値の大小関係は、バイト単位で、
upload_max_filesize ≦ post_max_size ≦ memory_limit [2]出典:php.net, 2023-03-11閲覧。
ここではシンプルに、数値を同じにしています。
nginxとphp-fpmを再起動するとのことですが[3]出典:stackoverflow.com, 2023-03-11閲覧。、php-fpmの再起動が出来なかったので、
ラズパイまるごと再起動します。
sudo reboot
ssh -p xxxxx username@ラズパイIPアドレス
nginxの動作確認。
sudo systemctl status nginx
active(running)の緑字ならOKです。
nginxでphp動作確認
DocumentRootにphpファイルを置いて、動作確認を行います。
nano で新規ファイルを作成します。
sudo nano /var/www/html/info.php
以下の<>はブログ表記の都合上、全角なので半角に直してください。
<?php
phpinfo();
?>
Debianのブラウザに ラズパイIPアドレス/info.php と入力し、以下のように表示されるとphpはnginx上で動いています。
下にスクロールするとサーバ設定の細かな情報が見れるのですが、WWWからのアクセス者に知られるとセキュリティホールを見つけられやすくなるため、すぐにファイルを削除します。
sudo rm /var/www/html/info.php #info.phpファイルを削除
nginxがエラーで動作しない場合
nginxの動作がエラーになる場合は、apacheが動いている可能性があります。
以下のコマンドでapacheを無効化します。
1行ずつ実行してください。
sudo systemctl status apache2 #activeの場合は、Qキーを打鍵し、下のコマンドへ
sudo systemctl stop apache2 #apacheを停止
sudo systemctl disable apache2 #apacheを無効化
nginxのエラーログは以下の場所にあります。
cat /var/log/nginx/error.log
私の場合はエラーログに以下のように表示され、「既にポートを使用中」だったので、apache作動中に気づきました。
0.0.0.0:80 failed (98: Address already in use)
nginxをスタート・ラズパイ起動時に自動起動を設定し、ラズパイそのものを再起動します。
1行ずつ実行してください。
途中エラーが生じた場合でも、ラズパイ再起動後、直るケースがありました。
sudo systemctl start nginx
sudo systemctl enable nginx
sudo reboot
WordPressサイト作成
Duplicatorを使わず新規でWordPressをインストールする場合は、過去記事をご覧ください。
今回はサーバレスポンスのテスト目的のため、既存の本サイトをDuplicatorでクローン化して、
ラズパイサーバのDocumentRootへ本サイトのデータを流し込みます。
mariadbでWordPress用のデータベース・ユーザーを作成(4分)
mariadbのデータベースとユーザーを作成します。
Duplicator公式によると、全く新規のデータベースとユーザーが望ましいです。
黄色ラインは任意に変更してください(推測されにくい文字列で)。
sudo mariadb -u root -p
create database wordpress;
create user 'pi'@'localhost' identified by 'password';
grant all on wordpress.* to 'pi'@'localhost' identified by 'password';
flush privileges;
exit;
Duplicator でWordPressサイトを作成
- Duplicatorで予めinstaller.php, アーカイブzipファイルを作り、microSDに保存しておく
- ラズパイOS LiteでmicroSDのマウント先を作る
- fstab 編集でmicroSDをマウント
- /var/www/html 配下のファイルを全て削除
- microSD の installer.phpとアーカイブzipファイルを
/var/www/html
にコピー - /var/www/html 所有権を変更
- Duplicator を実行
Duplicatorデータを保存したmicroSDをUSB端子に差します。
以下のコマンドを実行し、microSDがマウントされていないことを確認します。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 234G 1.8G 220G 1% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 778M 1.0M 777M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda1 253M 50M 203M 20% /boot
tmpfs 389M 0 389M 0% /run/user/1000
マウントポイントを作ります。
sudo mkdir /media/sd
microSDのPARTUUIDを調べます。
sudo blkid
/dev/sda1: UUID="0903-3317" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="b7b3583f-01"
/dev/sda2: LABEL="256GB" UUID="2296a031-6418-4a25-a416-4b04ae154dc8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="b7b3583f-02"
/dev/sdb1: UUID="5AA1-A994" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="01202b1e-01"
sudo nano /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=b7b3583f-01 /boot vfat defaults 0 2
PARTUUID=b7b3583f-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
PARTUUID=01202b1e-01 /media/sd vfat defaults 0 0
マウントを追加します。
sudo mount -a
黄色ラインのようにマウントされました。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 234G 1.8G 220G 1% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 778M 1.0M 777M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda1 253M 50M 203M 20% /boot
tmpfs 389M 0 389M 0% /run/user/1000
/dev/sdb1 3.8G 949M 2.8G 25% /media/sd
Duplicator公式によると、移行先のディレクトリの中身を空にしておかなければいけないので[4]出典:https://e-topics.net/duplicator/#ik、/var/www/html
の中身を全て削除します。
sudo rm /var/www/html/* #*(ワイルドカード)html配下のファイルを全て削除
microSDからDocumentRootへDuplicatorデータをコピーします。
黄色ラインは表示されているファイル名に置き直してください。
cd /media/sd #microSDがマウントされているディレクトリへ移動
ls #microSDの中身を表示
20230310092922_archive.zip installer.php
sudo cp 20230310092922_archive.zip installer.php /var/www/html #DocumentRootへコピー
DocumentRootの所有権をnginx(www-data)へ変更します。
(これをしないと、Duplicatorに権限が渡らず、ブラウザ操作が出来ません)
sudo chown -R www-data:www-data /var/www/html
Duplicator を実行。続きの手順は以下の過去記事をご覧ください。
microSDからDocumentRootへDuplicatorデータのコピーが終わると、マウントポイントを無効にしておくのが無難だと思います。
今、ラズパイの電源を落としてmicroSDを抜き、再びラズパイの電源を入れるとOSの起動が途中で止まって、ラズパイが起動しなくなる恐れがあります。
「電源を落とす前のデバイスが無いぞ」とラズパイが判断して、OS起動を停止します。
この事態を避けるために、以下を実行します。
microSDをマウントポイントからマウント解除(アンマウント)します。
sudo umount /media/sd
fstabを編集します。
sudo nano /etc/fstab
赤字部分の「#」を入れて、コメントアウトし無効にします。
proc /proc proc defaults 0 0
PARTUUID=b7b3583f-01 /boot vfat defaults 0 2
PARTUUID=b7b3583f-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
# PARTUUID=01202b1e-01 /media/sd vfat defaults 0 0
アンマウントを確認します。
(上の黄色が無いのを確認)
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 234G 1.8G 220G 1% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 778M 1.0M 777M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda1 253M 50M 203M 20% /boot
tmpfs 389M 0 389M 0% /run/user/1000
この後は、ラズパイの電源を落とし、microSDを抜いて、再度電源を入れ、
正常にラズパイが起動するのか確認します。
Duplicatorが正常に動作しない・エラーが生じる場合
私が経験したエラーは、
- 504 Gateway Time-out
- Duplicatorに許可が無い
504 Gateway Time-out はDuplicatorが作動中に実行時間切れとなって弾かれているので、php.iniのmax_execution_time を再度確認します。
「Duplicatorに許可が無い」と英文で表示された場合は、DocumentRootの所有権がrootのままで、nginxに渡っていない可能性があるので、再度所有権変更やり直します。
その後、nginx文法チェックなど行い、ラズパイ再起動が無難だと思います。
1行ずつ実行してください。
sudo nginx -t #文法チェック
sudo nginx -s reload #設定の読み込み
sudo systemctl restart nginx #再起動
sudo systemctl enable nginx #ラズパイ起動の都度、有効化
sudo reboot #エラーが無ければ、ラズパイを再起動
WordPressをパスワード認証にする
WordPressプラグイン「Password Protected」で、サイト全体を見えないようにします。
目的は、
- Googleへのインデックス防止対策(ミラーサイト防止対策)
- WWWから閲覧されないための対策
無効にしておく方が良いプラグイン
- Invisible reCaptcha:有効にしたままDuplicatorを実行すると、ログインできなかった
- SiteGuard WP Plugin: URL変更をOFFに
- LiteSpeed Cache:CDN重複利用を避けるため。
- Jetpack:Duplicatorの機能で自動的に無効になる
- Site Kit by Google:ミラーサイトになるのを避けるため
- UpdraftPlus:以下の方法でバックアップを取るので不要
変更しておく方が良いWordPress設定
- AdSenseコードを削除
- 設定>一般:サイトのタイトルを変更
- ユーザー>プロフィール:ニックネームを変更し、適用
- 外観>カスタマイズ>サイト基本情報:サイトアイコンを削除、または変更
ルータのポート開放して、スマホでサイトを確認
上述の方法で再度ルータのポート開放して、スマホのキャリア回線からアクセスして、ラズパイサーバ上のWordPressサイトを確認します。
私の感想では、レンタルサーバと比較して、「やっぱりな」という程度のもっさり感でした。
WordPressサイト設置後にやること
1日1回、バックアップ
- コピー先のmicroSDはrpi-cloneが自動でマウントするので、fstabを編集しないでください。fstabでマウント先を定義すると、ラズパイ再起動後にUSBに同じOSが2つあるため、OS起動できなくなる経験をしました。解決策は後述。
rpi-clone を使います。使い方は以下の過去記事をご覧ください。
※注意:SSDを下側のUSB端子に差している場合は、バックアップ先のmicroSDはsdbになっていると思います(黄色ライン)。見分け方はディスク容量です。
rpi-cloneを実行するときも、sdbにクローンしてください。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 256M 0 part /boot
└─sda2 8:2 0 238.2G 0 part /
sdb 8:16 1 28.8G 0 disk
└─sdb1 8:17 1 28.8G 0 part /media/sd
正常に動作するのか確認のために、今実行してみます。
sudo rpi-clone sdb
※microSDへの初回書き込みは、時間が掛かります。
下の例では、256GBのSSDを32GBのmicroSDにクローンするのに、初回時、61分35秒掛かりました(黄色ライン)。
rpi-cloneは差分だけをコピーするので、2回目は2分11秒で終わりました。
Destination disk partition /dev/sdb1 is mounted on /media/sd.
The clone cannot proceed unless it is unmounted.
Do you want to unmount /media/sd? (yes/no): yes
Booted disk: sda 256.1GB Destination disk: sdb 31.0GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot 256.0M fat32 -- 1 28.8G fat32 --
2 root 238.2G ext4 256GB
---------------------------------------------------------------------------
== Initialize: IMAGE partition table - partition number mismatch: 2 -> 1 ==
1 /boot (49.5M used) : MKFS SYNC to sdb1
2 root (2.9G used) : RESIZE MKFS SYNC to sdb2
---------------------------------------------------------------------------
Run setup script : no.
Verbose mode : no.
-----------------------:
** WARNING ** : All destination disk sdb data will be overwritten!
-----------------------:
Initialize and clone to the destination disk sdb? (yes/no): yes
Optional destination ext type file system label (16 chars max): bk32gb
Initializing
Imaging past partition 1 start.
=> dd if=/dev/sda of=/dev/sdb bs=1M count=8 ...
Resizing destination disk last partition ...
Resize success.
Changing destination Disk ID ...
=> mkfs -t vfat -F 32 /dev/sdb1 ...
=> mkfs -t ext4 -L bk32gb /dev/sdb2 ...
Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sdb2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sdb1 on /mnt/clone/boot
=> rsync /boot/ /mnt/clone/boot ...
Editing /mnt/clone/boot/cmdline.txt PARTUUID to use 237f9543
Editing /mnt/clone/etc/fstab PARTUUID to use 237f9543
===============================
Done with clone to /dev/sdb
Start - 09:17:40 End - 10:19:15 Elapsed Time - 61:35
Cloned partitions are mounted on /mnt/clone for inspection or customizing.
Hit Enter when ready to unmount the /dev/sdb partitions ...
unmounting /mnt/clone/boot
unmounting /mnt/clone
===============================
正常動作が確認できれば、crontabに書き込んで自動化します。
sudo crontab -e
アクセスが少ない時間帯が良いと思います。
(例)毎日、午前1時にバックアップする場合。書式は過去記事をご覧ください。
00 1 * * * sudo bash rpi-clone sdb -q
1日1回、指定時刻に自動で再起動
sudo crontab -e
(例)毎日、午前3時に再起動(リブート)する場合。
00 3 * * * /sbin/reboot
1日1回、自動アップデート&自動アップグレード
(例)毎日、午前3時5分にアップデート・アップグレードする場合。
homeディレクトリにシェルスクリプト「update.sh」を作成します[5]参考:raspiブログ, 2023-03-13閲覧。。
sudo nano update.sh
以下を入力します。
#!/bin/sh
sudo apt update -y
sudo apt upgrade -y
sudo apt autoremove -y
sudo apt-get clean -y
sudo apt-get autoclean -y
sudo apt-get check -y
実行権限を与えます。
sudo chmod 755 update.sh
正常に動作するのか、今確認します。
sudo ./update.sh
crontab に登録します。
sudo crontab -e
05 3 * * * sudo /home/username/update.sh
1日1回、MyDNSにIPアドレスを自動で通知
(例)毎日、午前3時10分にMyDNSへIPアドレスを通知する場合。
homeディレクトリにシェルスクリプト「mydns.sh」を作成します[6]参考:cooeil.com, 2023-03-13閲覧。。
sudo nano mydns.sh
以下を入力します。
curl https://ipv4.mydns.jp/login.html -u mydnsID:password
実行権限を与えます。
sudo chmod 755 mydns.sh
正常に動作するのか、今確認します。
sudo ./mydns.sh
crontab に登録します。
sudo crontab -e
10 3 * * * sudo /home/username/mydns.sh
Let’s Encrypt 期限を更新するコマンド(2023-07-06 追記)
Let’s Encrypt から通知メールが届く
Let’s Encrypt から「ドメインの証明書有効期限の通知」のメールが届きました(下画像)。
内容は以下です。
Hello,
Your certificate (or certificates) for the names listed below will expire in 19 days (on 2023-07-25). Please make sure to renew your certificate before then, or visitors to your web site will encounter errors.
We recommend renewing certificates automatically when they have a third of their total lifetime left. For Let's Encrypt's current 90-day certificates, that means renewing 30 days before expiration. See https://letsencrypt.org/docs/integration-guide/ for details.
***.mydns.jp
For details about when we send these emails, please visit: https://letsencrypt.org/docs/expiration-emails/ In particular, note that this reminder email is still sent if you've obtained a slightly different certificate by adding or removing names. If you've replaced this certificate with a newer one that covers more or fewer names than the list above, you may be able to ignore this message.
For any questions or support, please visit: https://community.letsencrypt.org/ Unfortunately, we can't provide support by email.
To learn more about the latest technical and organizational updates from Let's Encrypt, sign up for our newsletter: https://mailchi.mp/letsencrypt.org/******
If you are receiving this email in error, unsubscribe at:
http://delivery.letsencrypt.org/track/unsub.php?*****
Please note that this would also unsubscribe you from other Let's Encrypt service notices, including expiration reminders for any other certificates.
Regards,
The Let's Encrypt Team
Let’s Encrypt のSSL有効期限を更新するコマンド
LXTerminalで以下のコマンドを入力します(赤字のコマンドを入力)。
「Congratulations(黄色マーカー部分)」が表示されれば、成功です。
※ルータのポートを開いた状態で実行しないと、エラーになり失敗します。
<ログ内容>
~ $ sudo /usr/bin/certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/***.mydns.jp.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate for ***.mydns.jp
Performing the following challenges:
http-01 challenge for ***.mydns.jp
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/***.mydns.jp/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/***.net.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate for ***.net
Performing the following challenges:
http-01 challenge for ***.net
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/***.net/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded:
/etc/letsencrypt/live/***.mydns.jp/fullchain.pem (success)
/etc/letsencrypt/live/***.net/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
crontab で自動更新を設定すると楽になると思いますが、個人的な都合により私は手動で行っています。
事前にメールが届くのは、「有り難く良心的」と感じました。
SSD起動のラズパイが再起動後、起動しなくなった時の対処方法
以下の過去記事の方法をお試しください。
以上で本記事のコンテンツは終わりです。
お役に立てれば嬉しく思います。
脚注
↵1 | 出典:https://hacknote.jp/archives/57635/ |
---|---|
↵2 | 出典:php.net, 2023-03-11閲覧。 |
↵3 | 出典:stackoverflow.com, 2023-03-11閲覧。 |
↵4 | 出典:https://e-topics.net/duplicator/#ik |
↵5 | 参考:raspiブログ, 2023-03-13閲覧。 |
↵6 | 参考:cooeil.com, 2023-03-13閲覧。 |
コメント