はじめに
VirtualBoxという仮想的なサーバを立てることができるソフトウェアを使ってWordpressサイトを構築しました。既出かもしれませんが、その時の設定内容などを残しておこうとおもいます。
想定読者
VirtualBoxに興味がある方
実行環境
ホストOS:Windows 10 pro
ゲストOS:Ubuntu22.04.5 LTS(Server install image)
仮想サーバ構築用ソフトウェア:VirtualBox-7.0.20
使用したミドルウェア
WEB:apache2
AP:php-fpm
DB:mariadb
WordPressサイトが見れるまでの大まかな流れ
- VirtualBoxをインストールする。
- VirtualBoxで仮想マシン(Ubuntu)を3台作成する。
- 各仮想マシンにおいて設定を行う。
上記のうち、1~2についてはこのブログでは紹介を省かせていただきますが、もし知りたい方がいれば下記サイトをご参考ください。
各仮想マシンにおいて設定を行う
今回仮想マシンを3台構築していることから、まず仮想マシン間で通信を行うための設定の一例について紹介したいと思います。その後にWEB、AP、DB各仮想マシンにおいて行った設定内容を紹介したいと思います。
WordPressサイトの構築方法については、下記サイトを参考にしました。なおインストールするミドルウェアやパッケージの名前、使用するパッケージ管理ツールがUbuntuとAL2023では異なる場合があるので注意してください。
仮想マシン間の通信設定
VirtualBoxで内部ネットワークの設定を行う
各仮想マシンの設定のネットワークにおいて、アダプター2のところで内部ネットワークの設定を行う(設定したい仮想マシンを選択した状態で、黄色い歯車マークを押すと、設定画面が開きます)
手順としては、ネットワークアダプターを有効化→割り当ての部分を内部ネットワークに変更となる。
※この設定は仮想マシンの電源がオフになっていることを確認してから行う。
各仮想マシンでIPアドレスの設定を行う。
上記のVirtualBoxの設定を行って仮想マシンを起動した後ip addrをした時に、新しいインターフェースenp0s8が追加されている。※enp0s3はアダプター1に該当しており、ホストOSにきた通信をゲストOS用の通信に変換するためのNATが設定されている。
# /etc/netplan/50-cloud-init.yamlの設定のため
vim /etc/netplan/50-cloud-init.yaml
上記ファイルにおいてenp0s8にIPアドレスを設定する。yamlファイルなのでインデントに注意すること
network:
ethernets:
# ethernets:の下に以下の設定を追加
enp0s8:
dhcp4: false
addresses:
- 172.31.0.1/24 # 各仮想マシンで異なるIPアドレスにすること(サブネットマスクは同じにする)
設定内容を反映するために下記コマンドを実行
netplan apply
このコマンドを実行した時に、「cannot call open vswitch: ovsdb-server.service is not runnig」が出た場合でも、ip addrを実行した時に、IPアドレスが設定されていれば問題なし。もし上記エラーが気になる場合は、apt install openvswitch-switchを行うことでエラーが出なくなる。
各仮想マシン間でpingを飛ばしてみて、応答が返ってくれば成功です。
仮想マシンを再起動すると、IPアドレスの設定が消えてしまう問題
上記netplan applyをするとIPアドレスの設定が反映されるが、仮想マシンを再起動するとその設定が消えてしまうことが分かった。
現在は、仮想マシンを使わない場合は、VirtualBox上で「仮想マシンの電源をオフ」ではなく、「仮想マシンの状態を保存」で対処している。設定ファイルの編集は、一度仮想マシンの電源をオフして再起動しても反映されたままなのに、この設定だけはなぜか消えてしまう。
→こちらについてもし対処法をご存知の方がいらっしゃたら教えていただきたいです
WEB
APサーバにアクセスを流すための設定をいれる。
# /etc/apache2/sites-available/000-default.confの設定のため
vim /etc/apache2/sites-available/000-default.conf
# <VirtualHost *:80></VirtualHost>の中に下記設定を追加
<FilesMatch \.php&>
SetHandler "proxy:fcgi://APサーバのIPアドレス:9000" #ポート番号は8000でも可
</FilesMatch>
AP
Webサーバのリクエストを受け入れるための設定をいれる。
# /etc/php/8.1/fpm/pool.d/www.confの設定のため
vim /etc/php/8.1/fpm/pool.d/www.conf
# listenとlisten_allow_clientsの設定を変更
listen = 0.0.0.0:9000
listen_allow_clients = WebサーバのIPアドレス #複数記載する場合は、カンマ区切り
DBサーバと連携するための設定をいれる。
# wp-config.phpの設定のため
vim wordpressをインストールしたディレクトリ/wordpress/wp-config.php
# wp-config.phpのデータベースとの連携部分を修正
/** The name of the database for WordPress */
define('DB_NAME', 'データベース名');
/** MySQL database username */
define('DB_USER', 'ユーザ名'); #@以降はいらない
/** MySQL database password */
define('DB_PASSWORD', 'ユーザのパスワード');
/** MySQL hostname */
define('DB_HOST', 'DBサーバのIPアドレス');
DB
データベースやユーザを作成する
# データベースやユーザを作成するために、mariadbにログイン。
mysql -u root -p
詳細なデータベースの作成やユーザの作成コマンドはここでは記載しませんが、以下の点に注意する。
# ユーザを作成するときの@以降はAPサーバのIPアドレスとすること
CREATE USER 'wordpress-user'@'APサーバのIPアドレス' IDENTIFIED BY 'your_strong_password';
他のサーバからのアクセスを受け入れるための設定を追加。
# /etc/mysql/mariadb.conf.d/50-server.cnfの設定のため
vim /etc/mysql/mariadb.conf.d/50-server.cnf
# bind-address =127.0.0.1のところを0.0.0.0に変更する。
bind-address = 0.0.0.0 #APサーバのIPアドレスだとdatebase connection errorが発生
以上で各仮想マシンにおいて設定を行うは終了です。
補足
WordPressサイトの確認方法
WordPressサイトが見れるかどうか確認するためには、ホストOSにきた通信をゲストOSに流すためのポートフォワーディングの設定が必要になります。
私はWEB用の仮想マシンにおいて、ネットワークのアダプター1にあるポートフォワーディングから下記のように設定を行いました。



下記のようにhttp://localhost:ポートフォワーディングで設定したホストOSのポート番号/wp-admin/install.phpをブラウザで検索して映れば問題はないです。


sites-availableやsites-enabledについて
Ubuntuでインストールできるapache2は、複数のサイトを管理するための仕組みとして、sites-availableやsites-enabledというディレクトリが存在している。
- sites-available
イメージとして、運営するサイトの設定ファイルを仮置きしておく場所。仮置きなので、設定ファイルを作ってもその設定が反映されるわけではない。設定ファイルの内容を有効化したい場合は、a2ensiteを使い、後述するsites-enabledにシンボリックリンクを作成する。 - sites-enabled
このディレクトリにある設定ファイル(厳密には、sites-availabeにあるファイルへのシンボリックリンクが格納される)だけが、Apacheに読み込まれる。
/etc/apache2/apache2.conf(httpdにおける/etc/httpd/conf/httpd.conf)という設定ファイルに、IncludeOptional sites-enabled/*.confという記述がある。
UbuntuのServer install imageについて
Desktopバージョンをインストールする場合に比べて分かりにくいところがあるので、捕捉します。
- keyboard設定について
下記画像のように日本語にしないと、所々で意図した入力にならない場合があります。

その他の設定については、基本なにも変更せず「Done」を連打してました。(本当に正しいかは微妙です。)
最後に
基本AWSのEC2でLinuxを触っていましたが、VirtualBox上でも構築が可能であることが分かったので、今後も積極的に活用していこうと思います。
またVirtualBox以外にも仮想化について学べるツールがあると思うので、その他のツールについても調べてみようと思います。
参考サイト
