【プログラミング】【java】Springアプリケーションのデプロイ手順 - j-komatsu/myCheatSheet GitHub Wiki

Springアプリケーションのデプロイ手順

前提

  • OS: CentOS系
  • アプリケーション: Mavenでビルドした一般的なSpring REST APIアプリケーション
  • 構成: Apache、Tomcat、Springアプリケーション

1. 環境の準備

1.1 必要なパッケージのインストール

1.1.1 Javaのインストール

sudo yum update -y
sudo yum install -y java-17-openjdk
  • バージョン: OpenJDK 17
確認内容
  • Javaが正しくインストールされていること:
    java -version
  • 必要に応じてJAVA_HOMEを設定:
    echo "JAVA_HOME=/usr/lib/jvm/java-17-openjdk" | sudo tee -a /etc/environment
    source /etc/environment
    echo $JAVA_HOME

1.1.2 Apacheのインストール

sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
  • バージョン: Apache HTTP Server 2.4
確認内容
  • Apacheがインストールされていること:
    httpd -v
  • Apacheが稼働していること:
    sudo systemctl status httpd

1.1.3 Tomcatのインストール

sudo yum install -y tomcat
sudo systemctl start tomcat
sudo systemctl enable tomcat
  • バージョン: Apache Tomcat 9
確認内容
  • Tomcatがインストールされていること:
    tomcat version
  • Tomcatが稼働していること:
    sudo systemctl status tomcat

1.1.4 Mavenのインストール

sudo yum install -y maven
  • バージョン: Apache Maven 3.6
確認内容
  • Mavenがインストールされていること:
    mvn -v

2. Apacheの設定

2.1 基本設定

  1. Apacheの設定ファイルを編集:

    sudo vi /etc/httpd/conf/httpd.conf
    • 必要に応じて以下を確認または追加:
      • ServerName: サーバーのドメイン名またはIPアドレスを指定します。
        ServerName example.com
        
        • : example.com192.168.0.1 など。
        • 理由: ServerName を設定しない場合、Apacheが起動時に警告を表示することがあります。
  2. Apacheを再起動:

    sudo systemctl restart httpd
確認内容
  • Apacheが正常に再起動していること:
    sudo systemctl status httpd
  • Apacheプロセスが稼働していること:
    ps -ef | grep httpd
  • /var/log/httpd/access_log にアクセスログが記録されること。

3. Tomcatの設定

3.1 アプリケーションのデプロイ

  1. Springアプリケーションをビルド:

    mvn clean package
    • 実行場所: アプリケーションのソースコードが配置されているディレクトリ内で実行します。 例:
      cd /home/user/my-spring-app
      mvn clean package
    • 成功するとtarget/your-app.warが生成されます。
  2. WARファイルをTomcatに配置:

    sudo cp /home/user/my-spring-app/target/your-app.war /var/lib/tomcat/webapps/
    • 配置ディレクトリ: /var/lib/tomcat/webapps/
  3. ファイル権限を確認・修正:

    sudo chown tomcat:tomcat /var/lib/tomcat/webapps/your-app.war
    sudo chmod 644 /var/lib/tomcat/webapps/your-app.war
    確認内容
    • ファイルの所有者がtomcatユーザーとtomcatグループに設定されていること:
      ls -l /var/lib/tomcat/webapps/your-app.war
      • 出力例:
        -rw-r--r-- 1 tomcat tomcat 12345 Jan 19 12:00 /var/lib/tomcat/webapps/your-app.war
        
    • ファイルのパーミッションが644(読み取り権限が他ユーザーに許可されている)であること:
      ls -l /var/lib/tomcat/webapps/your-app.war

3.2 Tomcat設定ファイルの確認

  1. 必要に応じてserver.xmlを編集:
    sudo vi /etc/tomcat/server.xml
    • デフォルトポートは8080です。必要に応じて変更します。
  2. Tomcatを再起動:
    sudo systemctl restart tomcat
確認内容
  • webappsディレクトリにyour-app.warが展開されていること:
    ls /var/lib/tomcat/webapps/
  • Tomcatプロセスが稼働していること:
    ps -ef | grep tomcat
  • ブラウザでhttp://<サーバーIP>:8080/your-appにアクセスしてアプリケーションが動作していること。

4. ApacheとTomcatの連携

4.1 mod_proxyの設定

  1. mod_proxyモジュールを有効化:
    sudo yum install -y mod_proxy mod_proxy_http
    sudo systemctl restart httpd
  2. Apacheの仮想ホスト設定を追加:
    sudo vi /etc/httpd/conf.d/myapp.conf
    • 設定例:
      <VirtualHost *:80>
          ServerName example.com
          ProxyPass / http://localhost:8080/
          ProxyPassReverse / http://localhost:8080/
      </VirtualHost>
    • 別パスの場合の設定例/sampleApp):
      <VirtualHost *:80>
          ServerName example.com
          ProxyPass /sampleApp http://localhost:8080/sampleApp
          ProxyPassReverse /sampleApp http://localhost:8080/sampleApp
      </VirtualHost>
  3. 設定を適用:
    sudo systemctl reload httpd
確認内容
  • example.comまたはexample.com/sampleAppでTomcatのアプリケーションが利用できること。
  • ApacheとTomcat間でエラーが発生していないこと(ApacheとTomcatのログを確認)。

5. セキュリティ対策

5.1 HTTPSの導入

  1. CertbotをインストールしてHTTPSを有効化:
    sudo yum install -y certbot python3-certbot-apache
    sudo certbot --apache -d example.com
  2. 自動更新を設定:
    echo "0 0 * * * certbot renew --quiet" | sudo tee -a /etc/crontab
確認内容
  • HTTPSでのアクセスが可能になっていること。
  • 証明書が正しくインストールされていること:
    sudo certbot certificates

5.2 ファイアウォール設定

  1. 必要なポートを開放:
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
確認内容
  • ファイアウォールルールが適用されていること:
    sudo firewall-cmd --list-all

5.3 SSHセキュリティ

  1. SSHのポートを変更:
    sudo vi /etc/ssh/sshd_config
    • 例:
      Port 2222
      PermitRootLogin no
      
    • 再起動:
      sudo systemctl restart sshd
  2. Fail2Banの設定:
    sudo yum install -y epel-release fail2ban
    sudo systemctl enable --now fail2ban
確認内容
  • SSHが指定したポートでのみアクセス可能になっていること。
  • Fail2Banが有効になっていること:
    sudo systemctl status fail2ban

6. テストとモニタリング

6.1 アプリケーションのテスト

  • ブラウザまたはcurlでAPIの動作を確認:
    curl -I http://example.com/api/test

6.2 ログの確認

  • Apacheのログ:
    sudo tail -f /var/log/httpd/access_log
  • Tomcatのログ:
    sudo tail -f /var/log/tomcat/catalina.out

7. モニタリングの強化(オプション)

  • サーバーリソース(CPU、メモリ、ディスク)の監視にはtophtopを使用。
  • 必要に応じて監視ツール(Prometheus + Grafana)を導入。
⚠️ **GitHub.com Fallback** ⚠️