【プログラミング】【java】Springアプリケーションのデプロイ手順 - j-komatsu/myCheatSheet GitHub Wiki
- OS: CentOS系
- アプリケーション: Mavenでビルドした一般的なSpring REST APIアプリケーション
- 構成: Apache、Tomcat、Springアプリケーション
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
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
sudo yum install -y tomcat
sudo systemctl start tomcat
sudo systemctl enable tomcat
- バージョン: Apache Tomcat 9
- Tomcatがインストールされていること:
tomcat version
- Tomcatが稼働していること:
sudo systemctl status tomcat
sudo yum install -y maven
- バージョン: Apache Maven 3.6
- Mavenがインストールされていること:
mvn -v
-
Apacheの設定ファイルを編集:
sudo vi /etc/httpd/conf/httpd.conf
- 必要に応じて以下を確認または追加:
-
ServerName: サーバーのドメイン名またはIPアドレスを指定します。
ServerName example.com
-
例:
example.com
や192.168.0.1
など。 - 理由: ServerName を設定しない場合、Apacheが起動時に警告を表示することがあります。
-
例:
-
ServerName: サーバーのドメイン名またはIPアドレスを指定します。
- 必要に応じて以下を確認または追加:
-
Apacheを再起動:
sudo systemctl restart httpd
- Apacheが正常に再起動していること:
sudo systemctl status httpd
- Apacheプロセスが稼働していること:
ps -ef | grep httpd
-
/var/log/httpd/access_log
にアクセスログが記録されること。
-
Springアプリケーションをビルド:
mvn clean package
-
実行場所: アプリケーションのソースコードが配置されているディレクトリ内で実行します。
例:
cd /home/user/my-spring-app mvn clean package
- 成功すると
target/your-app.war
が生成されます。
-
実行場所: アプリケーションのソースコードが配置されているディレクトリ内で実行します。
例:
-
WARファイルをTomcatに配置:
sudo cp /home/user/my-spring-app/target/your-app.war /var/lib/tomcat/webapps/
-
配置ディレクトリ:
/var/lib/tomcat/webapps/
。
-
配置ディレクトリ:
-
ファイル権限を確認・修正:
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
- ファイルの所有者が
- 必要に応じて
server.xml
を編集:sudo vi /etc/tomcat/server.xml
- デフォルトポートは8080です。必要に応じて変更します。
- Tomcatを再起動:
sudo systemctl restart tomcat
-
webapps
ディレクトリにyour-app.war
が展開されていること:ls /var/lib/tomcat/webapps/
- Tomcatプロセスが稼働していること:
ps -ef | grep tomcat
- ブラウザで
http://<サーバーIP>:8080/your-app
にアクセスしてアプリケーションが動作していること。
- mod_proxyモジュールを有効化:
sudo yum install -y mod_proxy mod_proxy_http sudo systemctl restart httpd
- 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>
- 設定例:
- 設定を適用:
sudo systemctl reload httpd
-
example.com
またはexample.com/sampleApp
でTomcatのアプリケーションが利用できること。 - ApacheとTomcat間でエラーが発生していないこと(ApacheとTomcatのログを確認)。
- CertbotをインストールしてHTTPSを有効化:
sudo yum install -y certbot python3-certbot-apache sudo certbot --apache -d example.com
- 自動更新を設定:
echo "0 0 * * * certbot renew --quiet" | sudo tee -a /etc/crontab
- HTTPSでのアクセスが可能になっていること。
- 証明書が正しくインストールされていること:
sudo certbot certificates
- 必要なポートを開放:
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
- SSHのポートを変更:
sudo vi /etc/ssh/sshd_config
- 例:
Port 2222 PermitRootLogin no
- 再起動:
sudo systemctl restart sshd
- 例:
- Fail2Banの設定:
sudo yum install -y epel-release fail2ban sudo systemctl enable --now fail2ban
- SSHが指定したポートでのみアクセス可能になっていること。
- Fail2Banが有効になっていること:
sudo systemctl status fail2ban
- ブラウザまたは
curl
でAPIの動作を確認:curl -I http://example.com/api/test
- Apacheのログ:
sudo tail -f /var/log/httpd/access_log
- Tomcatのログ:
sudo tail -f /var/log/tomcat/catalina.out
- サーバーリソース(CPU、メモリ、ディスク)の監視には
top
やhtop
を使用。 - 必要に応じて監視ツール(Prometheus + Grafana)を導入。