0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2サーブレットアプリケーション デプロイ手順書

Last updated at Posted at 2026-01-29

この手順書は、Java Servlet アプリケーションを AWS EC2 (Amazon Linux 2023) にデプロイするためのガイドです。

インスタンス構成概要

デプロイするサーバーの基本構成は以下の通りです。

項目 設定内容 備考
OS Amazon Linux 2023 最新の長期サポート版
インスタンスタイプ t2.micro 無料枠対象(テスト環境用)
ランタイム Java 8 (Amazon Corretto) Servlet 実行環境
Webコンテナ Apache Tomcat 9 Tomcat 8.5の後継(推奨)
データベース PostgreSQL 16 パッケージインストール版
接続ポート 表2(ネットワーク設定)参照 セキュリティグループで解放

ネットワーク(セキュリティグループ)設定

インバウンドルール(外からのアクセス)として、以下の設定を適用します。

プロトコル ポート範囲 許可ソース 用途
TCP 22 自身のIPのみ SSH接続(サーバーのリモート操作用)
TCP 80 0.0.0.0/0 HTTP接続(Webアクセスの標準)
TCP 443 0.0.0.0/0 HTTPS接続(SSL通信の標準)
TCP 8080 0.0.0.0/0 Tomcatテスト用 (HTTP)
TCP 8443 0.0.0.0/0 Tomcatテスト用 (HTTPS / 自己署名)

前提条件

  • AWSアカウント
  • warファイル(例: meal-mate.war
  • データベースダンプファイル(例: meal_mate_production_dump.sql
  • SSH接続用キーペア

1. サーバー接続準備

実際に作業を開始する前に、お手元のメモ等に接続情報を控えておいてください。

項目 内容
パブリックIP AWSコンソールで確認したIPアドレス
キーペア (.pem) ダウンロードした秘密鍵ファイル

2. サーバー環境構築

2.1 SSH接続

Tera Termから、作成したキーペアを使ってSSH接続します。

項目
User name ec2-user
Passphrase (空のまま)
Authentication 「Use RSA/DSA/ECDSA/ED25519 key to log in」を選択し、
作成したキーペア(.pem)を指定

2.2 サーバー内での変数設定

SSH接続後、サーバー上のターミナルで以下のコマンドを実行して変数を設定します。
これにより、これ以降のコマンドをコピー&ペーストでそのまま実行できるようになります。

# 実際のファイル名やIPに合わせて設定してください
export WAR_FILE="meal-mate.war"
export DUMP_FILE="meal_mate_production_dump.sql"
export APP_NAME="meal-mate"
export PUBLIC_IP="$(curl -s https://ipinfo.io/ip)" # 自動取得

3. ファイルアップロード(Tera Term を使用)

作業に必要なファイルを、ローカルPCからEC2サーバーへ転送します。

  1. Tera Term のメニューから [File] -> [SSH SCP...] を選択します。
  2. 下側の入力欄(Receive...)は空のまま、上側の入力欄(From:)の右側にある [...] ボタンをクリックします。
  3. アップロードするファイル(${WAR_FILE} および ${DUMP_FILE})を1つずつ選択し、[Send] ボタンをクリックします。
    • 送信先ディレクトリはデフォルト(ホームディレクトリ ~/)で問題ありません。

(参考)scpコマンドでの実行(コマンドラインを使用する場合)

scp -i ${KEY_NAME}.pem ${WAR_FILE} ec2-user@${PUBLIC_IP}:~/
scp -i ${KEY_NAME}.pem ${DUMP_FILE} ec2-user@${PUBLIC_IP}:~/

4. サーバー環境構築

4.1 システム更新・Java 8 (Amazon Corretto) インストール

sudo dnf update -y
sudo dnf install -y java-1.8.0-amazon-corretto-devel

4.2 PostgreSQL 16 インストール

# パッケージインストール
sudo dnf install -y postgresql16-server postgresql16

# 初期化
sudo postgresql-setup --initdb

# 起動と自動起動設定
sudo systemctl enable postgresql
sudo systemctl start postgresql

4.3 Tomcat 9 インストール

※Tomcat 8.5はEOLに近いため、Java 8と互換性のあるTomcat 9を推奨します。

cd /opt
sudo wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz
sudo tar xzf apache-tomcat-9.0.91.tar.gz
sudo mv apache-tomcat-9.0.91 tomcat9
sudo chown -R ec2-user:ec2-user /opt/tomcat9
chmod +x /opt/tomcat9/bin/*.sh

5. SSL証明書設定

5.1 自己署名証明書作成

sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/servlet.key \
    -out /etc/ssl/certs/servlet.crt \
    -subj "/C=JP/ST=Tokyo/L=Tokyo/O=ServletApp/CN=${PUBLIC_IP}"

5.2 PKCS12キーストア作成

sudo openssl pkcs12 -export -in /etc/ssl/certs/servlet.crt \
    -inkey /etc/ssl/private/servlet.key \
    -out /etc/ssl/certs/servlet.p12 \
    -name servlet -passout pass:changeit

5.3 Tomcat SSL設定 (server.xml)

# 既存の server.xml に SSL Connector を追記
sudo sed -i '/<\/Service>/i \
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" \
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true" \
               clientAuth="false" sslProtocol="TLS" \
               keystoreFile="/etc/ssl/certs/servlet.p12" \
               keystorePass="changeit" \
               keystoreType="PKCS12" />' /opt/tomcat9/conf/server.xml

6. データベース設定

6.1 データベース・ユーザー作成

sudo -u postgres createdb servletdb
sudo -u postgres psql -c "CREATE USER servletuser WITH PASSWORD 'servletpass';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE servletdb TO servletuser;"

6.2 認証設定 (pg_hba.conf)

# localhost からの接続を md5 認証に変更
sudo sed -i "s/host    all             all             127.0.0.1\/32            ident/host    all             all             127.0.0.1\/32            md5/" /var/lib/pgsql/data/pg_hba.conf
sudo sed -i "s/host    all             all             ::1\/128                 ident/host    all             all             ::1\/128                 md5/" /var/lib/pgsql/data/pg_hba.conf

# 設定反映
sudo systemctl restart postgresql

6.3 データベースダンプインポート

# ダンプファイルを /tmp にコピーし権限付与
cp ~/${DUMP_FILE} /tmp/
sudo chown postgres:postgres /tmp/${DUMP_FILE}

# インポート前に postgres ユーザーの権限を確認(必要に応じて)
sudo -u postgres psql -d servletdb -f /tmp/${DUMP_FILE}

# インポート後の権限付与
sudo -u postgres psql -d servletdb -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO servletuser;"
sudo -u postgres psql -d servletdb -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO servletuser;"

7. アプリケーションデプロイ

7.1 Tomcat 起動と war 配置

# Tomcat 起動
/opt/tomcat9/bin/startup.sh

# war ファイルを webapps にコピー
cp ~/${WAR_FILE} /opt/tomcat9/webapps/

# 展開を待つ(約15秒)
sleep 15

7.2 アプリケーション個別設定 (context.xml)

# META-INF への配置 (DB接続設定)
mkdir -p /opt/tomcat9/webapps/${APP_NAME}/META-INF/

cat << 'EOF' > /opt/tomcat9/webapps/${APP_NAME}/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
    <Resource
        name="jdbc/postgresql"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/servletdb"
        username="servletuser"
        password="servletpass"
        maxTotal="20"
        maxIdle="10"
        minIdle="5"
        initialSize="5"
        maxWaitMillis="10000"
        testOnBorrow="true"
        testWhileIdle="true"
        validationQuery="SELECT 1" />
</Context>
EOF

# Tomcat 再起動
/opt/tomcat9/bin/shutdown.sh
sleep 5
/opt/tomcat9/bin/startup.sh

8. 動作確認

# ポート確認 (8080, 8443)
sudo ss -tlnp | grep -E "8080|8443"

# 接続テスト
curl -I http://localhost:8080/${APP_NAME}/
curl -k -I https://localhost:8443/${APP_NAME}/

9. トラブルシューティング

ログの確認

  • Tomcat: tail -f /opt/tomcat9/logs/catalina.out
  • PostgreSQL: sudo journalctl -u postgresql -f

データベース接続エラー

# 接続テスト
psql -h localhost -U servletuser -d servletdb

重要な注意事項

  1. セキュリティ: 自己署名証明書のためブラウザで警告が出ますが、テスト用途では問題ありません。本番では ACM や Let's Encrypt を検討してください。
  2. IPアドレス: インスタンスを停止・起動すると IP が変わります。固定したい場合は Elastic IP を使用してください。
  3. セキュリティグループ: 手順 1.1 で作成した SG の ID を正しく使用してください。
  4. Java/Tomcat: 本手順では Java 8 と Tomcat 9 を使用しています。アプリケーションの要件に合わせて適宜変更してください。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?