はじめに
自宅NAS環境にbitnami WordPressの検証ステージを用意したいと考えていました。更新してサーバーがダウンしてしまったらと思うと、いつも心配していました。もっと気楽に検証できる環境を手元にほしかったのです。Amazon Lightsailの構成も理解が進み、AKIの資料作成もひと段落がついたタイミングなのでチャレンジしてみました。
今回は「Synology DiskStation Manager (DSM)」上で運用するという、少しだけ特殊な構成ではありますが、DSM自体は十分に普通の仮想環境プラットフォームです。bitnamiでWordPress環境を構築する際には参考になると思います。
WordPressサーバーの構築
我が家の中核NASであるSynology DiskStationはいつも電源入れっぱです。ですから、こちらにWordPressサーバーを立ち上げる事ができれば効率的です。我が家のネットワークの中核に据えているので、ただのローカルサーバー運用以上に使い道が見つかるかもしれません。本格的な活用にもつなげたいです。
Synology Virtual Machine Manager (VMM) の導入
当初はより軽快に稼働するDockerでの構築を考えていましたが、Synologyのネットワーク管理機能を活用した方が得策だと考え「Synology Virtual Machine Manager (以降VMM)」を選択しました。バックアップやレストアもSynologyのツールが活用できそうです。
アプリケーションは「パッケージセンター」よりインストールします。(VMMがサポートされていない製品もあります、ご注意ください。)
VMMはリッチなGUIが提供されてて、視覚的に容易に仮想環境を管理する事ができます。こんな小さなNASなのに、時代の進歩はすごいです。
私的には、Syanoを導入して「クラウド」へ散乱していた情報の「再集結」が進んでいます。情報を集結した上で「インターネット」で「クラウド」の様に使っています。情報の管理は完全に私にあって精神的にも論理的にも「安心安全な情報管理」が実現できました。将来的には、もちろん「パスワードなんて大嫌い!」が実現できればと思っています。
bitnami仮想環境をVMMに導入
bitnami WordPressの仮想環境をVMMに導入し「To.DigitalARTs. Blog」の検証サイトをローカルに立ち上げます。
bitnami仮想環境のダウンロード
bitnamiの仮想環境をダウンロードします。仮想環境のエクスポート形式であるovaファイルをダウンロードします。
入手したovaファイル(bitnami仮想環境)は以下の構成でした。
仕様 | 説明 |
---|---|
メモリ | 1GBでインポート |
CPU | AMD64 1Core |
ストレージ | 10GB(設定にて20GBへ増量) |
転送 | 無制限 |
OS | Debian 5.10.179-1 (2023-05-12) x86_64 |
ソリューションパッケージ | WordPress packaged by Bitnami 6.2.0 |
WorPress | WordPress 6.2.1 |
PHP | PHP 8.1.18 |
ovaファイルのインポート
早速、VMMへインポートします。
VMMの作成
/インポート
を選択します。
ovaファイルからのインポート
を選択します。
キーボードレイアウトはja
に設定しておくことをお勧めします。
配布されている仮想環境のストレージは10Gで構成されています。インポート完了後、起動する前にサイズ調整をしておく事をお勧めします。私はAmazon Lightsailに寄せて20Gに拡張しておきました。
以上でVMMへのインポートは完了です。
起動とAgentの導入
VMMのメニュー操作
から起動します。起動が完了したら接続
を押すとコンソールが開きます。まずは「QEMU Guest Agent」を導入してください。仮想環境の制御に必須なツールです。(コピペは使えませんので手打ちで入力してください。)QEMU Guest Agentが導入されるとVMMからネットワーク管理ができます。
sudo apt update
sudo apt upgrade
sudo apt install qemu-guest-agent
sudo reboot
導入後に再起動すると「Guest Agent:実行中 」となります。そして振られたローカルネットワークIPアドレスが「IP:xxx.xxx.xxx.xxx」として表示されます。
以上でbitnami仮想環境のインポートは完了です。
接続確認
ブラウザーから確認したIPアドレスをたたいてみましょう。WordPressが起動されている事を確認できます。
bitnami仮想環境の立ち上げを確認できたので、続いてプラットフォーム設定を整備します。このままだとコピペすらできないので大変扱い辛いです。
bitnami 仮想環境のSSHサーバーを設定
コピペなどが使える様、ターミナルからの接続を整えます。ターミナルからの接続は、bitnami仮想環境ではSSH接続のみの様です。パスワード認証だと弾かれてしまいます。「Amazon Lightsail」ではAWSが事前に準備してくれているところですね。自分でやると、いろいろと面倒くさいんですよね。(^^;
bitnami仮想環境のSSHサーバーを設定
まずはssh接続を有効にします。サーバーの起動を抑止しているファイル「/etc/ssh/sshd_not_to_be_run」を削除してsshサーバーを有効にします。
sudo rm -f /etc/ssh/sshd_not_to_be_run
sudo systemctl enable ssh
sudo systemctl start ssh
続いては、SSH接続に利用する鍵ペアを作成します。
ssh-keygen
ユーザーホームの直下に「.ssh」 フォルダが作られ、その中に鍵ペアが生成されます。作成される鍵のファイル名は以下のとおりです。
- 秘密鍵:id_rsa
- 公開鍵:id_rsa.pub
SSHサーバーには公開鍵を登録します。具体的には「~/.ssh/authorized_keys」に公開鍵を追記します。
cd /home/bitnami/.ssh
cat id_rsa.pub >> /home/bitnami/.ssh/authorized_keys
これでSSHサーバーへの接続準備は整いました。SSHサーバーの設定ファイルを修正しSSH接続を有効にします。
左図の設定は、公開鍵による接続を有効に、パスワード接続は拒否に設定しています。エディタを使って設定値を確認して修正または追記してください。(コピペできないのでシコシコとタイピングするしかありません…)
sudo nano /etc/ssh/sshd_config
# 今回のbitnamiの設定ファイルには記載されていなかったので、下記の項目は追記でした。
RSAAuthentication yes
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
SSHサーバを再起動をして完了です。
sudo /etc/init.d/ssh force-reload
sudo /etc/init.d/ssh restrat
以上で、bitnami仮想環境へのSSH接続が有効となりました。続いて秘密鍵を手元のターミナル(私の場合はMacOSのターミナル)に導入します。まだまだ設定は続きます、結構面倒臭いです。
ちょっと横道、AKI KeyCase
いよいよ作成した秘密鍵をbitnami仮想環境から取り出して手元にあるパソコンに登録します。セキュリティとしてはbitnami仮想環境のアカウントで鍵ペアを作るのではなく、パソコンで作って公開鍵をbitnamiに登録するほうが安全です。ですが、bitnami仮想環境ではSSHサーバー側での生成と秘密鍵の持ち出しを推奨しています。ssh接続はITエンジニアが操作する前提なのでリテラシーが期待できるからこその仕様なのですが、これがSSH接続の良さを打ち消していると私は考えています。もちろんPKIの延長線上にあるので「秘密鍵は自己責任で正しく管理しましょう…」なのですが、AKIの概要を理解いただいている方にはわかると思いますが、この手続きを安全に自動で処理できる様にデザインしたものがKeyCaseです。
KeyCaseの特徴にクライアント側で鍵ペアを生成する仕様が挙げられます。結果、SSH接続における秘密鍵に該当する鍵は一度もインターネットに流れる事もなくKeyCaseに収められます。そして、SSHサーバーにあたるAKI TLSには公開鍵にあたる鍵のみ渡されます。鍵交換のプロセスが最適化される事で、ユーザーへ期待するITリレラシーを低く見積もる事が可能になります。こういった効果を読み取っていただければ幸いです。
閑話休題、秘密鍵の設定に話を戻します。(^^)/
秘密鍵ファイルの取得
Amazon Lightsailではダッシュボードから簡単に秘密鍵を入手する事ができましたが、bitnami仮想環境では鍵を取り出すためには細工が必要です。本書ではUSBメディアを使って秘密鍵を取得します。
まず、bitnami仮想環境は停止してください。停止を確認したのち、NASにUSBメモリを接続し仮想マシンの編集
/その他
よりUSBメモリを設定してください。
USBメモリのフォーマットはexFAT形式をお勧めします。
設定が終わったらbitnami仮想環境を起動してください。USBメモリのマウントを行います。VMMのメニュー接続
にてコンソールを開きます。
まず「fdsikコマンド」を使って、USBメモリのデバイス名を確認します。
左図の例ですと「/dev/sdc」で認識している事がわかります。
sudo fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaf25d0ff
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 41943006 41940959 20G 83 Linux
Disk /dev/sdb: 1 MiB, 1048576 bytes, 2048 sectors
Disk model: Storage
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 7.23 GiB, 7759462400 bytes, 15155200 sectors
Disk model: TransMemory
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdc1 4294967295 8589934589 4294967295 2T ff BBT
/dev/sdc2 4294967295 8589934589 4294967295 2T ff BBT
/dev/sdc3 4294967295 8589934589 4294967295 2T ff BBT
/dev/sdc4 4294967295 6854241533 2559274239 1.2T ff BBT
左図はホームフォルダ直下に「usb-memory」を用意してマウントしています。マウントしたフォルダに秘密鍵をコピーします。
sudo mount /dev/sdc /home/bitnami/usb-memory/
sudo cp .ssh/id_rsa usb-memory
sudo umount /dev/sdb
これで秘密鍵をbitnami仮想環境から外に取り出す事ができました。
pem形式の秘密鍵ファイルを作成
取り出した秘密鍵をpem形式にしないとMacOSのターミナルでは使えません。pemファイルの作成はMacOSのターミナルでputtyコマンドを使って行います。
puttyコマンドをMacOSにインストールします。(Homebrewの導入については割愛します)
brew install putty
秘密鍵ファイル「id_rsa」からpemファイル「id_rsa.pem」を作成します。
puttygen id_rsa -O private-openssh -o id_rsa.pem
再三のコメントで恐縮ですが秘密鍵の管理は自己責任です。漏えいしない様に適切に管理してください。
ターミナルの設定
pemファイルが用意できれば、あとはAmazon Lightsailでの作業とほぼ同じです。ブログ構築の備忘録・パソコンの整備を再確認いただければと思います。
設定が終われば、サクッとSSH接続できます。ターミナルはコピペが簡単にできるので、OSの設定作業が捗ります。(^^)/
bitnami仮想環境の基本設定
ターミナルからbitnami環境にSSH接続し、OSの基本的な徹底を行います。補足ですが、以降の設定はVMMのコンソールからは行えません。bitnami仮想環境ではSSH接続して設定する仕様となっています。
タイムゾーンとロケールの設定
タイムゾーンやロケールをJSTに設定します。
おおっと!Amazon Lightsailの設定と同じ方法でできるはずだと思っていたのですが、早速、洗礼を食らいました。(^^;
「timedatectlコマンド」がコケちゃいます。エラーの内容を確認すると結構根が深そうです。Amazon Lightsailとは異なり「dpkg-reconfigureコマンド」で対処します。
dpkg-reconfigure コマンドを使って変更します。設定はGUI設定になりますので左図には結果のみを記載しています。
itnami@debian:~$ ls -la /etc/localtime
lrwxrwxrwx 1 root root 27 May 8 11:54 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
sudo dpkg-reconfigure tzdata
urrent default time zone: 'Asia/Tokyo'
Local time is now: Wed May 17 19:46:10 JST 2023.
Universal Time is now: Wed May 17 10:46:10 UTC 2023.
bitnami@debian:~$ ls -la /etc/localtime
lrwxrwxrwx 1 root root 30 May 17 19:46 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
どうしようかと思ったのですが、無事設定できて良かったです。
PHPの設定
続いてPHPのロケール設定です。
こちらはAmazon Lightsailのノウハウが活用できます。左図は過去記事の抜粋です。
$ sudo nano /opt/bitnami/php/etc/php.ini
# date.timezone = UTC → date.timezone = Asia/Tokyo
$ php -r "phpinfo();" | grep timezone
Default timezone => Asia/Tokyo
date.timezone => Asia/Tokyo => Asia/Tokyo
以上でbitnami仮想環境の基本設定は全て完了です。思ったよりも手間が掛かったと思います。Amazon Lightsailのお手軽さを再認識しました。
bitnami仮想環境のWordPressへ接続
早速、userアカウントを使ってWordPressへログインします。配布されているbitnami WordPressでは以下のファイルにパスワードが記載されていました。詳細はbitnamiのダウンロードページで確認ください。こちらもLightsailとは少し違う様です。
sudo cat /home/bitnami/bitnami_credentials
その他のWordPressの設定はほとんど同じでした。
問題なく動いてくれています。検証ステージとして問題なく活用できそうです。
立ち上げたWordPressの運用計画
Amazon Lightsailでは自動でスナップショットを撮ってくれますし、ほぼ100%保証のSLAで運用されています。ローカル環境に立ち上げたbitnami仮想環境は、当たり前ですが自己責任で運用しなければなりません。「Amazon Lightsailと同じ」は言いませんが近しい運用をSynologyに構築しておきます。こういった事を簡単にいい感じで構築できるのがSynology NASのすごいところです。
bitnami仮想環境のエクスポート
VMM上で稼働する仮想環境のバックアップや冗長化については、残念ながら有償です。
ですから、bitnami仮想環境の保存はエクスポートによるovaフォーマット化で対応することにします。
マニュアルにて適時エクスポートしてNASの定期バックアップにて保存します。
bitnami仮想環境を停止した後操作
/エクスポート
にてovaファイルへの書き出しを行います。書き出しが終わったらBitnami仮想環境を起動してください。
最低限ではありますが、以上が自宅環境でのbitnami仮想環境のバックアップ運用です。NAS自体には定期的なバックアップと運用監視を設定しているので、知らないうちにシステム崩壊などはないでしょう。ないはずです。(^^;
VMMの自動スナップショット
VMM上で稼働する仮想環境をスケジュールを組んで自動でスナップショットを撮ることは無償版でも出来ます。この機能を使ってAmazon Lightsailの自動スナップショット相当の事が可能です。早速設定しておきます。
左メニュー保護
を選択して保護プラン
/作成
を選択します。
プランタイプはローカルスナップショット
のみしか選択できません。
bitnami仮想環境を選択します。
スケジュールポリシーを設定します。設定値は左図のとおりデフォルトで問題ないです。
保持ポリシーを設定します。私は1-Dat PRO
を選択しました。直近1週間は日次でスナップショットを撮って、以降は月次で保管します。結構賢くて良いですよね。
以上でスケジュールの設定は完了です。
一晩経ったので確認してみました。問題なくスナップショットが撮れています。
以上でbitnami仮想環境の自動スナップショットが完了しました。これで安心して検証ステージとして利用する事ができます。
Virtual Machine Manager Pro ライセンス情報
Virtual Machine Manager Pronoのライセンス情報は以下のとおりです。
結構な事ができそうですね。面白そうですが個人でやる内容では無いですよね。(^^;
まとめ
Amazon Lightsailとほぼ同じ環境をローカルに構築する事ができました。PHPやGoの開発環境を用意して、もっと踏み込んだガジェット活用記事を執筆していきたいですね。頑張ります。
Synologyの強力なネットワーク機能を活用して、構築した仮想環境とインターネットを接続してみることもやってみたいです。引き続き、どうぞよろしくお願いします。