VirtualBoxで、Webサーバー、アプリケーションサーバー、データベースサーバーの3つをUbuntuを利用して構築する手順。
前提条件
- VirtualBoxがインストール済である。
- 各サーバーにUbuntuがインストール済みである。
- 各サーバーがインターネット接続可能。
- 各サーバーは仮想ネットワークに接続されている。(例: ブリッジ接続または内部ネットワーク)
1. 仮想マシンの作成と基本設定
仮想マシンの作成とIPアドレスの設定。
サーバー1: Webサーバー (Nginx)
①から④は前提条件部分。⑤以降は設定部分。
- 新しい仮想マシンを作成
- 名前: UbuntuWebServer
- タイプ: Linux
- バージョン: Ubuntu24.04 (64-bit)
- メモリとディスクを設定
- 2コア(Webサーバー、APサーバ、DBサーバ)
- メモリ: 2GB 以上(Webサーバー、APサーバ、DBサーバ)
- 仮想ハードディスク: 最小 25GB 以上(必要に応じて増やす)
- ネットワーク設定
- 仮想ネットワーク設定を変更し、内部ネットワークまたはブリッジ接続に設定。
- Ubuntuをインストール
- Ubuntu ISOを使用して仮想マシンを起動し、インストール。
- IPアドレス設定
- Ubuntuにログイン後、固定IPアドレスを設定。
- Nginxのインストール
IPアドレス設定
Ubuntuにログイン後、固定IPアドレスを設定。
# 次のコマンドでnetplanディレクトリ内にあるyamlファイルを確認。
ls /etc/netplan/
# 存在するファイルの中身を sudo cat コマンドで確認し、dhcp4: true となっている設定ファイルを編集。
# 例えは、「01-network-manager-all.yaml 50-cloud-init.yaml」のように複数ある場合はそれぞれ中身を確認。
sudo cat /etc/netplan/01-network-manager-all.yaml
sudo cat /etc/netplan/50-cloud-init.yaml
(本記事での場合)01-network-manager-all.yamlの中身の確認。
sudo cat /etc/netplan/01-network-manager-all.yaml

(本記事での場合)50-cloud-init.yamlの中身の確認。今回はこちらを編集。
sudo cat /etc/netplan/50-cloud-init.yaml

以下の内容に変更(192.168.2.101/24):
sudo nano /etc/netplan/50-cloud-init.yaml
50-cloud-init.yamlファイルの設定
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.2.101/24
routes:
- to: default
via: 192.168.2.1 # default gatewayとして設定
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4

「/etc/netplan/01-network-manager-all.yamlファイル」と「/etc/netplan/50-cloud-init.yamlファイル」で、その他のユーザーが読み書き不能にする。
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/50-cloud-init.yaml
設定後、ネットワークを適用します。
sudo netplan apply
Nginxのインストール
Nginxをインストールします。
sudo apt update
sudo apt install nginx
インストール後、Nginxが正常に動作しているか確認します。
sudo systemctl status nginx
次のように「active」となれば成功です。下の画面からはキーボードの「q」でプロンプト表示に戻ります。

サーバー2: アプリケーションサーバー
アプリケーションサーバー (Apache Tomcat + OpenJDK)
①から②は前提条件部分。③以降は設定部分。
- 新しい仮想マシンを作成
- 名前: UbuntuAppServer
- IPアドレス: 192.168.2.102/24
- メモリとディスクを設定
- 2コア(Webサーバー、APサーバ、DBサーバ)
- メモリ: 2GB 以上(Webサーバー、APサーバ、DBサーバ)
- 仮想ハードディスク: 最小 25GB 以上(必要に応じて増やす)
- ネットワーク設定
- 仮想ネットワーク設定を変更し、内部ネットワークまたはブリッジ接続に設定。
- Ubuntuのインストールとネットワーク設定
- Webサーバと同様にUbuntuをインストールし、/etc/netplan/でIPアドレス192.168.2.102/24を設定します。
- OpenJDKのインストール
- Tomcatのインストール
- 最新のTomcatを公式サイトからダウンロードしてインストールします。
IPアドレス設定
Ubuntuにログイン後、固定IPアドレスを設定。
# 次のコマンドでnetplanディレクトリ内にあるyamlファイルを確認。
ls /etc/netplan/
# 存在するファイルの中身を sudo cat コマンドで確認し、dhcp4: true となっている設定ファイルを編集。
# 例えは、「01-network-manager-all.yaml 50-cloud-init.yaml」のように複数ある場合はそれぞれ中身を確認。
sudo cat /etc/netplan/01-network-manager-all.yaml
sudo cat /etc/netplan/50-cloud-init.yaml
(本記事での場合)01-network-manager-all.yamlの中身の確認。
sudo cat /etc/netplan/01-network-manager-all.yaml

(本記事での場合)50-cloud-init.yamlの中身の確認。今回はこちらを編集。
sudo cat /etc/netplan/50-cloud-init.yaml

以下の内容に変更(192.168.2.102/24):
sudo nano /etc/netplan/50-cloud-init.yaml
50-cloud-init.yamlファイルの設定
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.2.102/24
routes:
- to: default
via: 192.168.2.1 # default gatewayとして設定
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
「/etc/netplan/01-network-manager-all.yamlファイル」と「/etc/netplan/50-cloud-init.yamlファイル」で、その他のユーザーが読み書き不能にする。
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/50-cloud-init.yaml
設定後、ネットワークを適用します。
sudo netplan apply
OpenJDKのインストール(バージョン17.0.10)
JDKのバージョンをEclipseのJavaプログラムで確認する場合は次のプログラムを実行します。→『System.out.println(System.getProperty(“java.version”));』
sudo apt update
sudo apt install openjdk-17-jdk
Tomcatのインストール(Tomcat 10.0.27)
最新のTomcatを公式サイトからダウンロードしてインストールします。
# cdコマンドを利用して/optディレクトリへ移動します。
# /optはサードパーティ製のソフトウェアをインストールする場所として使われます。
# Tomcatはここにインストールするのが一般的です。
cd /opt
# wgetを使ってTomcat 10.0.27をダウンロードします。
sudo wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
# ダウンロードした .tar.gz ファイルを解凍して、適当なディレクトリ(/opt)に配置します。
sudo tar xzvf apache-tomcat-10.0.27.tar.gz
# シンボリックリンクを作成します。
# これにより、/opt/tomcatという短いパスでTomcatを参照できるようになります。
sudo ln -s /opt/apache-tomcat-10.0.27 /opt/tomcat
Tomcatを起動するには次のコマンドを実行します。
sudo /opt/tomcat/bin/startup.sh
Tomcatが正常に動作するかブラウザでhttp://192.168.2.102:8080にアクセスして確認します。次のように表示されれば成功です。

Tomcatを停止するには次のコマンドを実行します。
sudo /opt/tomcat/bin/shutdown.sh
WARファイルと追加で必要なパッケージをFileZilaで転送
UbuntuアプリケーションサーバーへSSHサーバのインストールして起動を行います。
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
SSHが正常に起動しているかの確認を行います。
sudo systemctl status ssh
次のように表示されれば成功です。

ファイアウォールの設定で22番ポートを開放します。
sudo ufw allow ssh
WindowsからFileZilaでUbuntuAppServerへ接続します。
FileZilaを起動して次のように設定し接続します。
- 「ファイル」タブから「サイトマネージャー」を選択して「新しいサイト」をクリックします。
- 「新しいサイト」の名前を「UbuntuAppServer」に変更します。
- 次のホスト情報を入力します。
- プロトコルに「SFTP-SSH File Transfer Protocol」
- UbuntuAppServerのIPアドレス(今回は192.168.2.102)
- ログオンタイプに「普通」
- ユーザーにアクセスを行うユーザー名(今回はubuntuappserver)
- パスワードにユーザーのパスワード(今回はpasswordaps)
- 接続ボタンをクリック

パスワードを保存するかを聞かれるので都合の良い選択をして「OK」をクリック。
「不明なホスト鍵」の表示がでます。今回は接続先が分かっているのでそのまま「OK」をクリックします。
接続が完了すると右半分の「リモートサイト」にUbuntuAppServerの情報が表示されます。

EclipseからエクスポートしたWARファイルをUbuntuAppServerのダウンロードディレクトリに転送します。

「sudo mv ~/ダウンロード/ファイル名.war /opt/tomcat/webapps」コマンドで各warファイルを移動させます。※今後、ファイル名の部分をmyapp.warとして記事にしています。
Tomcatを再起動します。(その後、停止します。)
sudo /opt/tomcat/bin/startup.sh
sudo /opt/tomcat/bin/shutdown.sh
次に開発時にTomcatに追加したパッケージを転送します。
Windows側に保管されている必要なパッケージをUbuntuAppServerのダウンロードディレクトリに転送します。

「sudo mv ~/ダウンロード/ファイル名 /opt/tomcat/webapps/プロジェクト名/WEB-INF/lib」コマンドで各jarファイルを移動させます。
例:sudo mv ~/ダウンロード/javax.activation-1.2.0.jar /opt/tomcat/webapps/プロジェクト名/WEB-INF/lib
Tomcatを再起動します。
sudo /opt/tomcat/bin/startup.sh
ここまでで、VirtualBoxの外からブラウザでhttp://192.168.2.102:8080/アプリケーション名でアクセスが可能になります。
確認ができたらTomcatを停止します。
sudo /opt/tomcat/bin/shutdown.sh
必要な環境変数の設定
(前提:PuTTyは既にインストール済み)
PuTTyを利用してUbuntuAppServerへ接続します。
SSHが正常に起動しているかの確認を行います。
sudo systemctl status ssh
次のように表示されれば成功です。

PuTTyを起動して、次のように設定します。
- Host Name(ホスト名):192.168.2.102
- Port(ポート番号):22
- Connection type(接続タイプ):SSH
設定が終わったら「Open」をクリックします。

UbuntuAppServerのユーザー名とログイン時のパスワードを入力します。

接続が完了すると次のようにプロンプトが表示されます。

今回はシステム全体として利用できる環境変数を設定します。システム全体での設定は/etc/environmentに記述します。
nanoエディタで次のように記述します。
変数名 = “値”
/etc/environmentを開きます。
sudo nano /etc/environment
記述例
GOOGLE_MAIL_APP_PASS = "abcd************"
GOOGLE_MAPS_API_KEY = "AI*************************************"
OPENAI_API_KEY = "sk-***************************************************"
ファイルの編集を完了したらCtrl + X を押しエディタを終了します。終了時に変更を行うか問われるのでY(またはy)を押して変更を保存します。
システムへの適用を行います。
source /etc/environment
サーバー3: DBサーバー
DBサーバー (MariaDB)
①から②は前提条件部分。③以降は設定部分。
- 新しい仮想マシンを作成
- 名前: UbuntuDbServer
- IPアドレス: 192.168.2.103/24
- メモリとディスクを設定
- 2コア(Webサーバー、APサーバ、DBサーバ)
- メモリ: 2GB 以上(Webサーバー、APサーバ、DBサーバ)
- 仮想ハードディスク: 最小 25GB 以上(必要に応じて増やす)
- ネットワーク設定
- 仮想ネットワーク設定を変更し、内部ネットワークまたはブリッジ接続に設定。
- Ubuntuのインストールとネットワーク設定
- Webサーバと同様にUbuntuをインストールし、/etc/netplan/でIPアドレス192.168.2.103/24を設定します。
- MariaDBのインストール
- MariaDBの設定
- MariaDBのセキュリティ設定を行います。
- データベースとユーザーの作成
- MariaDBにログインし、userというユーザーとpasswordというパスワードでデータベースを作成します。
IPアドレス設定
Ubuntuにログイン後、固定IPアドレスを設定。
# 次のコマンドでnetplanディレクトリ内にあるyamlファイルを確認。
ls /etc/netplan/
# 存在するファイルの中身を sudo cat コマンドで確認し、dhcp4: true となっている設定ファイルを編集。
# 例えは、「01-network-manager-all.yaml 50-cloud-init.yaml」のように複数ある場合はそれぞれ中身を確認。
sudo cat /etc/netplan/01-network-manager-all.yaml
sudo cat /etc/netplan/50-cloud-init.yaml
(本記事検証時の場合)01-network-manager-all.yamlの中身の確認。
sudo cat /etc/netplan/01-network-manager-all.yaml

(本記事検証時の場合)50-cloud-init.yamlの中身の確認。今回はこちらを編集。
sudo cat /etc/netplan/50-cloud-init.yaml

以下の内容に変更(192.168.2.103/24):
sudo nano /etc/netplan/50-cloud-init.yaml
50-cloud-init.yamlファイルの設定
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.2.103/24
routes:
- to: default
via: 192.168.2.1 # default gatewayとして設定
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
「/etc/netplan/01-network-manager-all.yamlファイル」と「/etc/netplan/50-cloud-init.yamlファイル」で、その他のユーザーが読み書き不能にする。
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/50-cloud-init.yaml
設定後、ネットワークを適用します。
sudo netplan apply
MySQLのインストール
この記事ではMySQLをインストールしますが、ほかのDBMSでも構いません。
MySQL公式リポジトリを追加
Ubuntuの標準リポジトリでは古いバージョンが利用されているため、今回はMySQLの公式リポジトリ からインストールします。
パッケージをダウンロードします。
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
リポジトリをインストールします。
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
次のコマンドでMariaDBをインストールします。
# パッケージリストを更新
sudo apt update
# MySQLをインストール
sudo apt install mysql-server
# MySQLのバージョンを確認
mysql --version
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql
MySQLの初期設定
次のコマンドでMySQLへのログインします。(パスワードは未設定)(Ubuntu)
sudo mysql -u root
次のコマンドでMySQLのデータをエクスポートします。(Windows)
mysqldump -u [ユーザー名] -p --databases [データベース名] > [保存先]/backup.sql
記述例:mysqldump -u root -p –databases databasename > ~/backup.sql
- -u root → MySQL の root ユーザーで実行
- -p → パスワード入力を求める
- –databases databasename → databasename データベースをエクスポート
- ~/backup.sql → backup.sql というファイルに保存
出力をしたファイルはFileZilaやSCPコマンドでUbuntuDbServerへ送ります。

接続したら「backup.sql」ファイルを「/home/ubuntudbserver」に送ります。

次のコマンドでデータベースとユーザーの作成を行います。
インポートした「backup.sql」ファイルを実行します。
MySQLにログインします。
sudo mysql -u root
backup.sql を実行します。
SOURCE /home/username/backup.sql;
2. サーバー間の接続
各サーバー間の接続確認
各サーバー間で接続を確認します。例えば、Webサーバーからアプリケーションサーバー(Tomcat)への接続を確認するには、次のコマンドを使用します。
Webサーバー ⇔ アプリケーションサーバー ⇔ DBサーバー
ping 192.168.2.102
必要に応じてファイアウォール設定を調整します。
サービスの統合
NginxとTomcatの連携
Nginxをリバースプロキシとして設定し、Tomcatと連携させます。Nginxの設定ファイル(/etc/nginx/sites-available/default)に以下を追加します。
nginx
server {
listen 80;
server_name 192.168.2.101; #名前で設定することも可能:例:example.com
# 静的リソースへのアクセス設定
location /myapp/css/ {
proxy_pass http://192.168.2.102:8080/myapp/css/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /myapp/js/ {
proxy_pass http://192.168.2.102:8080/myapp/js/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 他のリクエストをバックエンドのアプリケーションにプロキシ
location /myapp/ {
proxy_pass http://192.168.2.102:8080/myapp/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
設定後、Nginxを再起動します。
sudo systemctl restart nginx
Tomcatとデータベースの接続(アプリケーションサーバ)
Tomcatの設定ファイル(/opt/tomcat/conf/context.xml)でMySQLの接続情報を設定します。
以下は、Tomcatの/opt/tomcat/conf/context.xmlファイルに追加する具体的な設定例です。この設定では、MySQLに接続するためのJDBCリソースを定義します。
1. MySQL(8.0.41) JDBCドライバの準備
まず、MySQL用のJDBCドライバをダウンロードして、Tomcatのlibディレクトリに配置します。MySQL用のJDBCドライバは、MySQL Connector/J のダウンロードページから入手します。
最新の「8.0.41」がない場合は「8.0.x」で代用します。Ubuntu 24 のような新しい環境でも使用することができます。
ダウンロードファイルをFileZilaでアプリケーションサーバへ送ります。
送信した.deb パッケージを展開してJARファイルをTomcatのlibディレクトリにコピーします。
mkdir -p /tmp/mysql-connector-j
dpkg-deb -x mysql-connector-j_8.0.33-1ubuntu23.04_all.deb /tmp/mysql-connector-j
展開後、/tmp/mysql-connector-j/usr/share/java/ に mysql-connector-java-8.0.33.jar が現れます。
JDBC ドライバーを Tomcat の lib ディレクトリにコピーします。
sudo cp /tmp/mysql-connector-j/usr/share/java/mysql-connector-java-8.0.33.jar /opt/tomcat/lib/
lib ディレクトリに mysql-connector-java-8.0.33.jar があることを確認します。
sudo ls -l /opt/tomcat/lib | grep mysql
データベースサーバーの設定確認
対処1
MySQLにログインして、以下のSQLを実行。
SELECT host, user FROM mysql.user WHERE user = 'mysql';
- host の値が localhost だけなら リモート接続不可
- 192.168.2.% や % なら 接続可能
MySQLを再起動します。
sudo systemctl restart mysql
対処2
MySQLが外部接続を許可しているか、設定ファイル(my.cnf)を確認。
サーバーの MySQL 設定ファイル (/etc/my.cnf または /etc/mysql/my.cnf) を開き、bind-address を確認:
sudo cat /etc/mysql/my.cnf
次の「bind-address」部分のアドレスを「0.0.0.0」に設定する。
[mysqld]
bind-address = 0.0.0.0
MySQLを再起動します。
sudo systemctl restart mysql
対処3
ファイアウォールとポートの確認。
sudo ufw status
Status inactiveの場合は次のコマンドを入力します。
sudo ufw enable
sudo ufw allow 3306/tcp
sudo ufw reload
対処4
アプリケーションサーバからデータベースへの直接ログインを試みる。
通信が出来るかを確認します。
nc -zv 192.168.2.103 3306
失敗した場合はポートを開く必要があります。
ネットワーク疎通がOKなら、アプリケーションサーバー上でMySQLクライアントを使って直接ログインできるか試します。
MySQL のコマンドラインクライアントをインストールします。
sudo apt update
sudo apt install mysql-client
mysql -h 192.168.2.103 -u mysql -p
MySQL でログイン後、次のコマンドでユーザーがアクセス可能なデータベースを確認できます。
SHOW DATABASES;
もし特定のデータベースがリストに表示されない場合、そのデータベースへのアクセス権限が不足している可能性があります。次のように入力して権限を付与します。
GRANT ALL PRIVILEGES ON <データベース名>.* TO '<ユーザー名>'@'<ホスト名>';
FLUSH PRIVILEGES;
# 入力例1
GRANT ALL PRIVILEGES ON myappDB.* TO 'mysql'@'%' IDENTIFIED BY 'mysql';
FLUSH PRIVILEGES;
# 入力例2
GRANT ALL PRIVILEGES ON myappDB.* TO 'mysql'@'192.168.2.%' IDENTIFIED BY 'mysql';
FLUSH PRIVILEGES;
次の2から4の項目は当記事では割愛
※本来設定すべき内容ですが、この記事ではすぐにTomcatの再起動を行っています。
2. context.xmlにデータソースの設定を追加
続けて、Tomcatのcontext.xmlファイルにMySQLの接続設定を追加します。context.xmlは通常/opt/tomcat/conf/context.xmlにあります。
context.xmlファイルをエディタで開きます。
sudo nano /opt/tomcat/conf/context.xml
</Context>タグの直前に、以下のようなデータソース設定を追加します。この設定では、MariaDBに接続するための情報を定義します。
<Context>
<!-- MySQLデータベース接続のリソース設定 -->
<Resource name="jdbc/MySQLDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://192.168.2.103:3306/ExampleDb?useSSL=false&serverTimezone=UTC"
username="user"
password="password"
maxTotal="20"
maxIdle="10"
maxWaitMillis="-1"/>
</Context>
ここで設定する項目は以下の通りです:
- name=”jdbc/MySQLDB”: JNDIリソース名
- JNDIリソース名はアプリケーションから参照する名前です。
- driverClassName=”com.mysql.cj.jdbc.Driver”: MySQLのJDBCドライバクラス名。
- url=”jdbc:mysql://192.168.2.103:3306/データベース名”: データベースの接続URL。
- ここではMariaDBのホスト(192.168.2.103)、ポート(3306)、データベース名(ExampleDb)を指定します。
- username=”user”: MySQLに接続するためのユーザー名。
- password=”password”: 上記ユーザーのパスワード。
- maxTotal=”20″: コネクションプールの最大数。
- maxIdle=”10″: プール内でアイドル状態の最大コネクション数。
- minIdle=”5″: プール内でアイドル状態の最小コネクション数。
- maxWaitMillis=”10000″: コネクションを取得するために待機する最大時間(ミリ秒)。
3. web.xmlの設定
Tomcatがデータソースを使用できるように、アプリケーションのweb.xmlファイルにも参照設定を追加する必要があります。通常、web.xmlはアプリケーションのWEB-INFディレクトリにあります。
web.xmlに以下のリソース参照を追加します:
<web-app>
<!-- その他の設定があればそのまま残しておく -->
<!-- JNDIリソース参照 -->
<resource-ref>
<description>MySQL DataSource</description>
<res-ref-name>jdbc/ExampleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
4. データベース接続のコード例
TomcatのアプリケーションからMariaDBに接続する際、以下のようにJNDIを使用してデータソースを取得し、データベース接続を行います。
次の内容はプログラムでの入力例です。
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DBHelper {
public Connection getConnection() throws Exception {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/ExampleDB");
return ds.getConnection();
}
}
5. Tomcatの再起動
設定を反映させるためにTomcatを再起動します。
sudo /opt/tomcat/bin/shutdown.sh
sudo /opt/tomcat/bin/startup.sh
これで、TomcatアプリケーションとMySQLの接続設定は完了です。
4. サーバーの起動と確認
- 各サーバーのサービスを確認し、正常に起動していることを確認します。
- WebブラウザでWebサーバーのIPアドレス(192.168.2.101)にアクセスし、Tomcatのアプリケーションが動作するか確認します。
これで、Nginx、Tomcat、MySQLを使用した基本的なサーバー構成は完了です。
サーバー4: DNSサーバー (bind9)
①から④は前提条件部分。⑤以降は設定部分。
- 新しい仮想マシンを作成
- 名前: UbuntuDnsServer
- タイプ: Linux
- バージョン: Ubuntu24.04 (64-bit)
- メモリとディスクを設定
- (今回は個人用なので)1コア
- (今回は個人用なので)メモリ: 1GB 以上
- (今回は個人用なので)仮想ハードディスク: 最小 12.50GB
- ネットワーク設定
- 仮想ネットワーク設定を変更し、内部ネットワークまたはブリッジ接続に設定。
- Ubuntuのインストールとネットワーク設定
- Webサーバと同様にUbuntuをインストールし、/etc/netplan/でIPアドレス192.168.2.100/24を設定します。
- IPアドレス設定
- Ubuntuにログイン後、固定IPアドレスを設定。
- bind9のインストール
IPアドレス設定
Ubuntuにログイン後、固定IPアドレスを設定。
# 次のコマンドでnetplanディレクトリ内にあるyamlファイルを確認。
ls /etc/netplan/
# 存在するファイルの中身を sudo cat コマンドで確認し、dhcp4: true となっている設定ファイルを編集。
# 例えは、「01-network-manager-all.yaml 50-cloud-init.yaml」のように複数ある場合はそれぞれ中身を確認。
sudo cat /etc/netplan/01-network-manager-all.yaml
sudo cat /etc/netplan/50-cloud-init.yaml
(本記事検証時の場合)01-network-manager-all.yamlの中身の確認。
sudo cat /etc/netplan/01-network-manager-all.yaml

(本記事検証時の場合)50-cloud-init.yamlの中身の確認。今回はこちらを編集。
sudo cat /etc/netplan/50-cloud-init.yaml

以下の内容に変更(192.168.2.100/24):
sudo nano /etc/netplan/50-cloud-init.yaml
50-cloud-init.yamlファイルの設定
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.2.100/24
routes:
- to: default
via: 192.168.2.1 # default gatewayとして設定
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
「/etc/netplan/01-network-manager-all.yamlファイル」と「/etc/netplan/50-cloud-init.yamlファイル」で、その他のユーザーが読み書き不能にする。
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/50-cloud-init.yaml
設定後、ネットワークを適用します。
sudo netplan apply
DNSサーバー(BIND)のインストール
DNSサーバー(BIND)をインストールします。
※VirtualBoxでは接続方法をブリッジアダプターとしています。
sudo apt update
sudo apt install -y bind9 bind9utils bind9-doc
BINDの設定
設定ファイルを編集し、コンテンツサーバーとキャッシュサーバーの両方の機能を有効にします。
named.conf.options の編集(キャッシュDNS用)
sudo nano /etc/bind/named.conf.options
以下のように編集し、キャッシュサーバーを有効にします。
options {
directory "/var/cache/bind";
recursion yes; # キャッシュDNSを有効にする
allow-query { any; }; # すべてのクライアントからの問い合わせを許可
allow-recursion { 192.168.2.0/24; }; # ローカルネットワークのクライアントのみ再帰を許可
forwarders {
8.8.8.8; # Google DNSサーバー(外部問い合わせ用)
8.8.4.4;
};
dnssec-validation auto;
listen-on { any; };
listen-on-v6 { any; };
};
ゾーン設定(コンテンツDNS用)
ローカルネットワーク用のゾーンを設定します。
sudo nano /etc/bind/named.conf.local
以下を追加します。
zone "myzone.local" {
type master;
file "/etc/bind/db.myzone.local";
};
zone "2.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.2";
};
正引きゾーンの作成
sudo nano /etc/bind/db.myzone.local
以下を追加します。
$TTL 86400
@ IN SOA ns.myzone.local. admin.myzone.local. (
2024020701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns.myzone.local.
ns IN A 192.168.2.100
web IN A 192.168.2.101
app IN A 192.168.2.102
db IN A 192.168.2.103

逆引きゾーンの作成
sudo nano /etc/bind/db.192.168.2
以下を追加します。
$TTL 86400
@ IN SOA ns.myzone.local. admin.myzone.local. (
2024020701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns.myzone.local.
100.2.168.192.in-addr.arpa. IN PTR ns.myzone.local.
101.2.168.192.in-addr.arpa. IN PTR web.myzone.local.
102.2.168.192.in-addr.arpa. IN PTR app.myzone.local.
103.2.168.192.in-addr.arpa. IN PTR db.myzone.local.

BINDの設定を適用
設定の文法チェックします。
sudo named-checkconf
sudo named-checkzone myzone.local /etc/bind/db.myzone.local
sudo named-checkzone 2.168.192.in-addr.arpa /etc/bind/db.192.168.2
チェックを行いエラーがなければ、BINDを再起動します。
sudo systemctl restart bind9
sudo systemctl enable bind9
クライアント側のDNS設定
各サーバー(Web、アプリケーション、データベース)の /etc/resolv.conf を編集します。
sudo nano /etc/resolv.conf
以下は設定内容です。
nameserver 192.168.2.100
search myzone.local
Webサーバーの50-cloud-init.yamファイルで設定変更を行います。
sudo nano /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.2.101/24 # nginxのサーバーのIP
gateway4: 192.168.2.1 # ルーターのIP
nameservers:
addresses:
- 192.168.2.100
search:
- myzone.local
設定を適用します。
sudo netplan apply
DNSサーバーの53番ポートを開放します。
ファイアウォールとポートの確認。
sudo ufw status
Status inactiveの場合は次のコマンドを入力します。
sudo ufw enable
sudo ufw allow 53
sudo ufw reload
ホスト名でアクセス
設定したホスト名を使用して、Ubuntuのブラウザのアドレスバーに入力します。
例えば、Webサーバー(192.168.2.101)のホスト名を web.myzone.local に設定した場合は次のようにアクセスします。
http://web.myzone.local/
ホストOS(Windows側)からアクセスするためにはC:\Windows\System32\drivers\etc\hosts ファイルに web.myzone.local とそのIP(例えば 192.168.2.101)を追加する必要があります。