はじめに (対象読者・この記事でわかること)

この記事は、JavaでのWebアプリケーション開発に興味があり、自分でサーバーを立ててみたいと考えているプログラミング初学者の方や、Webサーバー構築の経験が浅い方を対象としています。

この記事を読むことで、以下のことができるようになります。

  • さくらのVPSでLinuxサーバーの基本的な準備ができる
  • Java開発環境(JDK)をサーバーにインストールできる
  • TomcatなどのWebサーバーをセットアップし、Java Webアプリケーションをデプロイできるようになる
  • 簡単なJava Webアプリケーションを開発し、実際にWebブラウザで確認できるようになる

特に、これまではローカル環境での開発に留まっていた方が、自分の手でインターネット上に公開するWebアプリケーションを動かす第一歩を踏み出すための実践的なガイドとなることを目指しています。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • HTML/CSSの基本的な知識: Webページがどのように表示されるかを理解する上で役立ちます。
  • Javaの基本的な文法: Javaで簡単なコードが書けるレベルであれば十分です。
  • SSHクライアント(Tera Term, PuTTY, Terminalなど)の基本的な操作: サーバーに接続し、コマンドを実行するために必要です。
  • Webブラウザの基本的な操作: 開発したアプリケーションが正しく動作しているか確認するために使用します。

さくらのVPSとは? Java Webサーバー構築のメリット

さくらのVPSは、国内最大級のクラウド型レンタルサーバーサービスです。「VPS (Virtual Private Server)」とは、仮想化技術を用いて、あたかも一台の物理サーバーを占有しているかのような環境を、より安価に利用できるサービスのことです。

なぜさくらのVPSでJava Webサーバーを構築するのか?

  1. 学習コストと実践性のバランス: ローカル環境での開発はもちろん重要ですが、実際にWebサーバーとして公開・運用することで、アプリケーションのパフォーマンスやセキュリティ、デプロイプロセスなど、より実践的な知識を習得できます。さくらのVPSは、比較的安価なプランから提供されており、手軽に始めることができます。
  2. 自由度の高さ: VPSでは、OSの選択からミドルウェアのインストール、設定まで、すべてを自由にカスタマイズできます。Java Servletコンテナ(Tomcatなど)や、Spring Bootのようなフレームワークで開発したアプリケーションを、柔軟な環境で動かすことが可能です。
  3. インフラ知識の習得: サーバーのOS設定、ネットワーク設定、ファイアウォール設定など、Webアプリケーション開発だけでなく、インフラストラクチャに関する知識も同時に身につけることができます。これは、将来的にフルスタックエンジニアを目指す上で非常に価値のある経験となります。

Java Webアプリケーション開発の現状

Javaは、エンタープライズシステムからWebアプリケーションまで、幅広い分野で利用されている実績のあるプログラミング言語です。特にSpring Bootのようなフレームワークの登場により、Webアプリケーション開発の生産性が飛躍的に向上しました。

本記事では、これらのJava Webアプリケーションを、さくらのVPS上で動かすための具体的な手順を解説していきます。

Java Webサーバー構築:ステップバイステップガイド

ここでは、さくらのVPS上にJava Webサーバーを構築するための具体的な手順を、コマンド例や設定方法を交えて解説します。

1. さくらのVPSの契約とサーバー初期設定

まず、さくらのVPSの公式サイトから、お好みのプランを契約します。契約後、コントロールパネルからサーバーを起動し、OS(ここではCentOS 8 Streamを推奨しますが、Ubuntu Serverなどでも基本的な手順は同様です)のインストールを行います。

サーバー起動後、SSHクライアントを使ってサーバーに接続します。初回接続時には、rootユーザーのパスワード設定など、初期設定が必要になる場合があります。

SSHでのサーバー接続

SSHクライアント(Tera Term, PuTTY, macOS/LinuxのTerminalなど)を開き、以下のコマンドで接続します。

Bash
ssh root@<サーバーのIPアドレス>

パスワードを入力してログインします。

サーバーのアップデート

接続後、まずOSのパッケージを最新の状態にアップデートします。

Bash
# CentOSの場合 dnf update -y # Ubuntuの場合 apt update -y apt upgrade -y

rootユーザーから一般ユーザーへの切り替え(推奨)

セキュリティの観点から、rootユーザーでの直接操作は避け、一般ユーザーを作成してsudo権限を付与するのが推奨されます。

Bash
# 一般ユーザーの作成 adduser <ユーザー名> # sudoグループにユーザーを追加 usermod -aG wheel <ユーザー名> # CentOS usermod -aG sudo <ユーザー名> # Ubuntu # rootユーザーからログアウトし、作成した一般ユーザーでSSH接続 exit ssh <ユーザー名>@<サーバーのIPアドレス> # sudoコマンドでroot権限でのコマンド実行 sudo dnf update -y # CentOS sudo apt update -y # Ubuntu

2. Java Development Kit (JDK) のインストール

Javaアプリケーションを開発・実行するためには、JDKが必要です。ここでは、OpenJDKのインストール方法を説明します。

OpenJDKのインストール

CentOS 8 Streamの場合、以下でインストールできます。

Bash
sudo dnf install java-11-openjdk-devel -y # または java-17-openjdk-devel など、バージョンを指定

Ubuntu Serverの場合、以下でインストールできます。

Bash
sudo apt install openjdk-11-jdk -y # または openjdk-17-jdk など、バージョンを指定

インストールバージョンの確認

インストールされたJavaのバージョンを確認します。

Bash
java -version javac -version

openjdk version "11.0.x" のような出力が表示されれば成功です。

3. Java Webサーバー(Tomcat)のインストールと設定

Java Webアプリケーションを実行するためのServletコンテナとして、Apache Tomcatをインストールします。

Tomcatのダウンロードと配置

Apache Tomcatの公式サイトから、最新版のzipアーカイブをダウンロードします。wgetコマンドなどでサーバーにダウンロードします。

Bash
# 例: Tomcat 9.0.x の場合 (バージョンは適宜最新のものに変更してください) wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.90/bin/apache-tomcat-9.0.90.tar.gz

ダウンロードしたファイルを展開し、適切なディレクトリに配置します。

Bash
# 展開 tar zxvf apache-tomcat-9.0.90.tar.gz # 適切なディレクトリに移動 (例: /opt) sudo mv apache-tomcat-9.0.90 /opt/tomcat

Tomcatの起動・停止スクリプト

Tomcatの起動・停止は、binディレクトリにあるスクリプトで行います。

Bash
# 起動 sudo /opt/tomcat/bin/startup.sh # 停止 sudo /opt/tomcat/bin/shutdown.sh

ファイアウォール設定

Tomcatはデフォルトでポート8080を使用します。外部からアクセスできるように、ファイアウォールでポート8080を開放する必要があります。

Bash
# CentOS (firewalld) の場合 sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload # Ubuntu (ufw) の場合 sudo ufw allow 8080/tcp sudo ufw enable

Tomcatの動作確認

Webブラウザで http://<サーバーのIPアドレス>:8080 にアクセスし、Tomcatのデフォルトページが表示されれば成功です。

4. 簡単なJava Webアプリケーションの作成とデプロイ

ここでは、動作確認のための簡単なJava Webアプリケーション(JSPファイル)を作成し、Tomcatにデプロイします。

アプリケーションコードの作成

Tomcatのwebappsディレクトリに、アプリケーションを展開します。ここではmywebappという名前のアプリケーションを作成します。

Bash
# mywebappディレクトリを作成 sudo mkdir /opt/tomcat/webapps/mywebapp # 簡単なJSPファイルを作成 sudo nano /opt/tomcat/webapps/mywebapp/index.jsp

index.jsp ファイルに以下の内容を記述します。

Jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Java Web App</title> </head> <body> <h1>Hello, Java Web Server on VPS!</h1> <p>This is a simple JSP application running on Tomcat.</p> </body> </html>

ファイルを保存して閉じます (Ctrl + X, Y, Enter)。

Tomcatの再起動

変更を反映させるために、Tomcatを再起動します。

Bash
sudo /opt/tomcat/bin/shutdown.sh sudo /opt/tomcat/bin/startup.sh

アプリケーションの動作確認

Webブラウザで http://<サーバーのIPアドレス>:8080/mywebapp/ にアクセスし、作成したJSPページが表示されれば成功です。

5. (発展) Spring Bootアプリケーションのデプロイ

より実践的なWebアプリケーション開発では、Spring Bootフレームワークを利用することが一般的です。Spring Bootアプリケーションは、通常、実行可能なJARファイルとしてビルドされ、Tomcatのような外部Servletコンテナなしでも実行できます。

Spring Bootプロジェクトの作成

Spring Initializr (https://start.spring.io/) などを使って、Webアプリケーションのプロジェクトを作成します。依存関係として「Spring Web」を選択します。

アプリケーションのビルド

作成したSpring Bootプロジェクトをビルドし、実行可能なJARファイルを生成します。Mavenを使用している場合、プロジェクトのルートディレクトリで以下のコマンドを実行します。

Bash
mvn clean package

ビルドが成功すると、targetディレクトリに*.jarファイルが生成されます。

JARファイルのデプロイと実行

生成されたJARファイルをサーバーにアップロードし、実行します。

Bash
# 例:JARファイルをサーバーにアップロード (scpコマンドなどを使用) scp target/my-spring-boot-app-0.0.1-SNAPSHOT.jar <ユーザー名>@<サーバーのIPアドレス>:/home/<ユーザー名>/ # サーバーにSSHで接続し、JARファイルを実行 java -jar /home/<ユーザー名>/my-spring-boot-app-0.0.1-SNAPSHOT.jar

Spring Bootアプリケーションもデフォルトでポート8080を使用することが多いですが、application.propertiesapplication.ymlでポート番号を変更できます。必要に応じてファイアウォール設定も確認してください。

(発展) システムサービスとしての登録(systemd)

アプリケーションをバックグラウンドで常時実行するためには、systemdなどのシステムサービスとして登録するのが一般的です。これにより、サーバー起動時の自動起動や、プロセスの管理が容易になります。

Bash
# /etc/systemd/system/mywebapp.service ファイルを作成 sudo nano /etc/systemd/system/mywebapp.service

以下のような内容を記述します。(JARファイルのパスやユーザー名は適宜変更してください)

Ini
[Unit] Description=My Spring Boot Application After=network.target [Service] User=<ユーザー名> WorkingDirectory=/home/<ユーザー名>/ ExecStart=/usr/bin/java -jar /home/<ユーザー名>/my-spring-boot-app-0.0.1-SNAPSHOT.jar SuccessExitStatus=143 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target

サービスをリロードし、起動します。

Bash
sudo systemctl daemon-reload sudo systemctl enable mywebapp.service # サーバー起動時に自動起動するように設定 sudo systemctl start mywebapp.service # サービスを起動 sudo systemctl status mywebapp.service # サービスのステータス確認

ハマった点やエラー解決

  • ポート8080がブロックされている: ファイアウォール設定を再度確認し、ポート8080がTCPで開かれていることを確認してください。
  • Javaのコマンドが見つからない: PATH環境変数が正しく設定されていない可能性があります。JAVA_HOMEを設定し、export PATH=$PATH:$JAVA_HOME/binのように追加してみてください。
  • Tomcatが起動しない: catalina.outログファイル(/opt/tomcat/logs/catalina.out)にエラーメッセージが出力されているはずです。詳細を確認してください。
  • JSPページが表示されない: 展開したWARファイルやJSPファイルが正しく配置されているか、ファイル名に誤りがないか確認してください。Tomcatのログ(catalina.out)も確認しましょう。
  • Spring Bootアプリが外部からアクセスできない: ポート番号の確認、ファイアウォール設定、そしてSpring Bootのapplication.propertiesserver.address=0.0.0.0またはserver.bind-address=0.0.0.0が設定されているか確認してください(デフォルトで外部からのアクセスを許可している場合が多いですが、念のため)。

まとめ

本記事では、さくらのVPS上にJava Webサーバーを構築する手順を、初心者の方にも分かりやすいように、ステップバイステップで解説しました。

  • さくらのVPSの準備とSSH接続
  • JDKのインストール
  • Apache Tomcatのインストールと設定、簡単なJSPアプリケーションのデプロイ
  • Spring Bootアプリケーションのデプロイとsystemdでのサービス化

これらの手順を踏むことで、ご自身のWebアプリケーションをインターネット上に公開し、実際に運用するための基盤を構築できます。VPS上に自分でサーバーを構築・管理する経験は、Web開発者としてのスキルアップに大きく貢献することでしょう。

今後は、SSL証明書の導入(HTTPS化)や、データベース(MySQLなど)との連携Dockerを使ったデプロイといった、より実践的で発展的な内容についても記事にする予定です。ぜひ、この記事を参考に、ご自身のWebアプリケーション開発に挑戦してみてください。

参考資料