Tomcatは、Javaベースのアプリケーション用のオープンソースWebサーバーです。これは、JavaサーブレットおよびJSPアプリケーションのデプロイに使用されます。 Javaサーブレットは、サーバーが要求と応答を処理する方法を定義する小さなプログラムです。 Tomcatは、Javaサーブレット、JavaServer Pages、Java式言語、およびJavaWebSocketテクノロジーのオープンソース実装として機能します。
Tomcatには複数のバージョンがあります。チュートリアルでは、Tomcat10のインストールについて説明します。 Tomcat 9をインストールする場合、手順は同じです。変更がある場合は、チュートリアルで指定されます。
このチュートリアルでは、Tomcat 10をNginxサーバーと一緒にインストールして、リバースプロキシとして機能し、SSLを使用してサーバーを保護します。 Tomcatの最新のアルファバージョンであるTomcat10.1.xバージョンがありますが、それはインストールされません。
-
RockyLinux8.5を実行しているサーバー
-
スーパーユーザー権限を持つ非sudoユーザー。
-
すべてが更新されていることを確認してください。
$ sudo dnf update
-
インストールに必要なパッケージ。
$ sudo dnf install wget tar
Tomcat9および10にはJava8以降が必要です。 Javaプラットフォームのオープンソース実装であるOpenJDK11をインストールします。
次のコマンドを実行して、OpenJDKをインストールします。
$ sudo dnf install java-11-openjdk-devel
インストールを確認します。
$ java -version openjdk version "11.0.13" 2021-10-19 LTS OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
ルートユーザーとしてTomcatを実行することにより、セキュリティリスクを最小限に抑えるために、新しいシステムユーザーを作成します。新しいユーザーの場合、/opt/tomcat
を設定します ホームディレクトリとして。
次のコマンドを実行して、Tomcatの新しいシステムユーザーを作成します。
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
Tomcat v10の最新バージョンは、ダウンロードページからダウンロードできます。このチュートリアルを書いている時点では、v10.0.14が利用可能な最新バージョンです。 Tomcatをダウンロードする前に、最新バージョンを確認してください。
wget
を使用する Tomcatをダウンロードします。
$ VERSION=10.0.14 $ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz>
ファイルを/opt/tomcat
に抽出します ディレクトリ。
$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
Tomcatのインストールディレクトリを指すTomcatの最新バージョンへのシンボリックリンクを作成します。
$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
ディレクトリの所有権を以前に作成したユーザーに変更します。
$ sudo chown -R tomcat:tomcat /opt/tomcat
ステップ4-Systemdユニットファイルを作成する
次のステップは、Tomcatサーバーのサービスファイルを作成して、自動的に起動できるようにすることです。
ファイル/etc/systemd/system/tomcat.service
を作成して開きます 編集用。
$ sudo nano /etc/systemd/system/tomcat.service
次のコードを貼り付けます。
[Unit] Description=Apache Tomcat 10 Servlet container Wants=network.target After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/jre" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_BASE=/opt/tomcat/latest" Environment="CATALINA_HOME=/opt/tomcat/latest" Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/latest/bin/startup.sh ExecStop=/opt/tomcat/latest/bin/shutdown.sh Restart=always [Install] WantedBy=multi-user.target
Ctrl + Xを押してファイルを保存します Yと入力します 保存するように求められたら。
サービスデーモンをリロードして、Tomcatサービスを有効にします。
$ sudo systemctl daemon-reload
Tomcatサービスを有効にして開始します。
$ sudo systemctl enable tomcat --now
サービスステータスを確認してください。
$ sudo systemctl status tomcat ? tomcat.service - Apache Tomcat 10 Servlet container Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 86226 (java) Tasks: 19 (limit: 11411) Memory: 132.7M CGroup: /system.slice/tomcat.service ??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties> Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container... Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.
RockyLinuxはFirewalledFirewallを使用しています。ファイアウォールのステータスを確認してください。
$ sudo firewall-cmd --state running
HTTPおよびHTTPSポートを許可します。
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
ファイアウォールをリロードして変更を有効にします。
$ sudo firewall-cmd --reload
ウェブ管理インターフェースにアクセスできるのは、そのユーザー資格情報を作成した場合のみです。
Tomcatのユーザーとロールは、/opt/tomcat/latest/conf/tomcat-users.xml
で定義されています。 ファイル。編集のためにファイルを開きます。
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
</tomcat-users
の前に次の行を追加します ライン。ユーザー名とパスワードを資格情報に置き換えます。
ManagerとAdministratorのTomcatポータルに異なる資格情報を選択します。
<tomcat-users> <!-- Comments --> <role rolename="manager-gui"/> <user username="manager" password="managerpassword" roles="manager-gui" /> <role rolename="admin-gui"/> <user username="admin" password="adminpassword" roles="admin-gui"/> </tomcat-users>
Ctrl + Xを押してファイルを保存します Yと入力します 保存するように求められたら。
デフォルトでは、Tomcatインターフェースはローカルホストからのみアクセス可能です。どこからでもアクセスする必要がある場合は、構成する必要があります。
/opt/tomcat/latest/webapps/manager/META-INF/context.xml
を開きます 編集用。
$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
次の行を削除するか、<!--
で囲むことにより、以下に指定されているようにコメントアウトします。 および-->
。
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
任意のIPアドレスからのアクセスを許可することはセキュリティリスクです。パブリックIPアドレスからのアクセスのみを許可することで制限できます。パブリックIPアドレスが22.22.22.22の場合 、次に次のように行を変更します。
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|22.22.22.22" />
許可されるIPアドレスのリストは、縦棒( | )で区切られます。 )。単一のIPアドレスを追加することも、正規表現を使用することもできます。
Ctrl + Xを押してファイルを保存します Yと入力します 保存するように求められたら。
ファイル/opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
に対して同じ変更を実行します 同様に。
終了したら、Tomcatサーバーを再起動します。
$ sudo systemctl restart tomcat
Let's Encryptを使用してSSL証明書をインストールするには、Certbotツールをインストールする必要があります。
まず、EPELリポジトリをダウンロードしてインストールする必要があります。
$ sudo dnf install epel-release
次のコマンドを実行して、Certbotをインストールします。
$ sudo dnf install certbot
SSL証明書を生成します。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com
上記のコマンドは、証明書を/etc/letsencrypt/live/tomcat.example.com
にダウンロードします。 サーバー上のディレクトリ。
Diffie-Hellmanグループを生成します 証明書。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Let'sEncryptの自動更新用のチャレンジWebルートディレクトリを作成します。
$ sudo mkdir -p /var/lib/letsencrypt
Cronジョブを作成してSSLを更新します。証明書を確認し、必要に応じて更新するために毎日実行されます。そのためには、まず、ファイル/etc/cron.daily/certbot-renew
を作成します。 開いて編集します。
$ sudo nano /etc/cron.daily/certbot-renew
次のコードを貼り付けます。
#!/bin/sh certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
タスクファイルの権限を変更して実行可能にします。
$ sudo chmod +x /etc/cron.daily/certbot-renew
Rocky Linux 8.5には、最新の安定バージョンのNginxが付属しています。次のコマンドを使用してインストールします。
$ sudo dnf module install nginx:1.20
インストールを確認します。
$ nginx -v nginx version: nginx/1.20.1
Nginxサービスを有効にして開始します。
$ sudo systemctl enable nginx --now
ファイル/etc/nginx/conf.d/tomcat.conf
を作成して開きます 編集用。
$ sudo nano /etc/nginx/conf.d/tomcat.conf
次のコードを貼り付けます。
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name tomcat.example.com; access_log /var/log/nginx/tomcat.access.log; error_log /var/log/nginx/tomcat.error.log; # SSL ssl_certificate /etc/letsencrypt/live/tomcat.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tomcat.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem; ssl_session_timeout 5m; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 8.8.8.8; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # enforce HTTPS server { listen 80; listen [::]:80; server_name tomcat.example.com; return 301 https://$host$request_uri; }
Ctrl + Xを押してファイルを保存します Yと入力します 終了したらプロンプトが表示されたら。
ファイル/etc/nginx/nginx.conf
を開きます 編集用。
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
の行の前に次の行を追加します 。
server_names_hash_bucket_size 64;
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
Nginx構成ファイルの構文を確認します。
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginxサービスを再起動して、新しい構成を有効にします。
$ sudo systemctl restart nginx
https://tomcat.example.com
を起動します ブラウザで、次の画面が開きます。
これで、手順7で構成したログイン資格情報を使用して、サーバーステータス、マネージャーアプリ、およびホストマネージャーのページにアクセスできます。
これで、Rocky Linux8.5ベースのサーバーにTomcatServerをインストールして構成し、Nginxリバースプロキシ経由でサーバーを提供し、SSLを使用してサーバーを保護する方法についてのチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄に投稿してください。