Tomcat est un serveur Web open source pour les applications basées sur Java. Il est utilisé pour déployer des applications Java Servlet et JSP. Les servlets Java sont de petits programmes définissant la manière dont un serveur gère les requêtes et les réponses. Tomcat agit comme une implémentation open source des technologies Java Servlet, JavaServer Pages, Java Expression Language et Java WebSocket.
Il existe plusieurs versions de Tomcat disponibles. Nous aborderons l'installation de Tomcat 10 pour notre tutoriel. Si vous souhaitez installer Tomcat 9, les instructions seront les mêmes. S'il y a des changements, ils seront spécifiés dans le tutoriel.
Pour notre tutoriel, nous allons installer Tomcat 10 avec le serveur Nginx pour agir en tant que proxy inverse et le protéger à l'aide de SSL. Il existe une version Tomcat 10.1.x qui est la dernière version alpha de Tomcat, mais nous ne l'installerons pas.
Prérequis
-
Un serveur exécutant Rocky Linux 8.5
-
Un utilisateur non sudo avec des privilèges de superutilisateur.
-
Assurez-vous que tout est mis à jour.
$ sudo dnf update
-
Paquets requis pour l'installation.
$ sudo dnf install wget tar
Étape 1 - Installer Java
Tomcat 9 et 10 nécessitent Java 8 et versions ultérieures. Nous allons installer OpenJDK 11, l'implémentation open source de la plate-forme Java.
Exécutez la commande suivante pour installer OpenJDK.
$ sudo dnf install java-11-openjdk-devel
Vérifiez l'installation.
$ 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)
Étape 2 - Créer un utilisateur système
Nous allons créer un nouvel utilisateur système pour minimiser tout risque de sécurité en exécutant Tomcat en tant qu'utilisateur root. Pour le nouvel utilisateur, nous allons définir /opt/tomcat
comme répertoire personnel.
Exécutez la commande suivante pour créer un nouvel utilisateur système pour Tomcat.
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
Étape 3 - Télécharger Tomcat
La dernière version de Tomcat v10 peut être téléchargée depuis sa page de téléchargement. Au moment de la rédaction de ce didacticiel, la v10.0.14 est la dernière version disponible. Vérifiez la dernière version avant de télécharger Tomcat.
Utilisez wget
pour télécharger Tomcat.
$ VERSION=10.0.14 $ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
Extraire le fichier dans le /opt/tomcat
répertoire.
$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
Créez un lien symbolique vers la dernière version de Tomcat qui pointe vers le répertoire d'installation de Tomcat.
$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
Modifiez la propriété du répertoire pour l'utilisateur créé précédemment.
$ sudo chown -R tomcat:tomcat /opt/tomcat
Étape 4 - Créer un fichier d'unité Systemd
L'étape suivante consiste à créer un fichier de service pour le serveur Tomcat afin qu'il puisse être démarré automatiquement.
Créez et ouvrez le fichier /etc/systemd/system/tomcat.service
pour l'édition.
$ sudo nano /etc/systemd/system/tomcat.service
Collez le code suivant.
[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
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous êtes invité à enregistrer.
Étape 5 - Démarrer et activer le service Tomcat
Rechargez le démon de service pour activer le service Tomcat.
$ sudo systemctl daemon-reload
Activez et démarrez le service Tomcat.
$ sudo systemctl enable tomcat --now
Vérifiez l'état du service.
$ 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.
Étape 6 - Configurer le pare-feu
Rocky Linux utilise Firewalld Firewall. Vérifiez l'état du pare-feu.
$ sudo firewall-cmd --state running
Autoriser les ports HTTP et HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Rechargez le pare-feu pour activer les modifications.
$ sudo firewall-cmd --reload
Étape 7 - Configurer l'interface de gestion Web Tomcat
L'interface de gestion Web ne sera accessible qu'une fois que nous aurons créé un identifiant utilisateur pour celle-ci.
Les utilisateurs et les rôles Tomcat sont définis dans le /opt/tomcat/latest/conf/tomcat-users.xml
dossier. Ouvrez le fichier pour le modifier.
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
Ajoutez les lignes suivantes avant le </tomcat-users
doubler. Remplacez le nom d'utilisateur et le mot de passe par vos identifiants.
Choisissez des informations d'identification différentes pour les portails Manager et 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>
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous êtes invité à enregistrer.
Par défaut, l'interface Tomcat n'est accessible qu'à partir de l'hôte local. Si vous avez besoin d'y accéder de n'importe où, vous devez le configurer.
Ouvrez le /opt/tomcat/latest/webapps/manager/META-INF/context.xml
pour l'édition.
$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
Supprimez les lignes suivantes ou commentez-les comme spécifié ci-dessous en les joignant à <!--
et -->
.
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
Autoriser l'accès à partir de n'importe quelle adresse IP est un risque pour la sécurité. Vous pouvez le restreindre en n'autorisant l'accès qu'à partir de votre adresse IP publique. Si votre adresse IP publique est 22.22.22.22 , puis modifiez la ligne comme suit.
<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" />
La liste des adresses IP autorisées est séparée par une barre verticale (| ). Vous pouvez soit ajouter des adresses IP uniques, soit utiliser une expression régulière.
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous êtes invité à enregistrer.
Effectuez les mêmes modifications sur le fichier /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
aussi.
Une fois terminé, redémarrez le serveur Tomcat.
$ sudo systemctl restart tomcat
Étape 8 - Installer SSL
Pour installer un certificat SSL avec Let's Encrypt, nous devons installer l'outil Certbot.
Tout d'abord, vous devez télécharger et installer le référentiel EPEL.
$ sudo dnf install epel-release
Exécutez les commandes suivantes pour installer Certbot.
$ sudo dnf install certbot
Générez le certificat SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com
La commande ci-dessus téléchargera un certificat dans /etc/letsencrypt/live/tomcat.example.com
répertoire sur votre serveur.
Générer un groupe Diffie-Hellman certificat.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Créez un répertoire racine Web de défi pour le renouvellement automatique de Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Créez une tâche Cron pour renouveler le SSL. Il s'exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, créez d'abord le fichier /etc/cron.daily/certbot-renew
et ouvrez-le pour le modifier.
$ sudo nano /etc/cron.daily/certbot-renew
Collez le code suivant.
#!/bin/sh certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Modifiez les autorisations sur le fichier de tâche pour le rendre exécutable.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Étape 9 - Installer Nginx
Rocky Linux 8.5 est livré avec la dernière version stable de Nginx. Installez-le à l'aide de la commande suivante.
$ sudo dnf module install nginx:1.20
Vérifiez l'installation.
$ nginx -v nginx version: nginx/1.20.1
Activez et démarrez le service Nginx.
$ sudo systemctl enable nginx --now
Créez et ouvrez le fichier /etc/nginx/conf.d/tomcat.conf
pour l'édition.
$ sudo nano /etc/nginx/conf.d/tomcat.conf
Collez-y le code suivant.
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; }
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité une fois terminé.
Ouvrez le fichier /etc/nginx/nginx.conf
pour l'édition.
$ sudo nano /etc/nginx/nginx.conf
Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.
Vérifiez la syntaxe du fichier de configuration 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
Redémarrez le service Nginx pour activer la nouvelle configuration.
$ sudo systemctl restart nginx
Étape 10 - Exécuter TomCat
Lancez https://tomcat.example.com
dans votre navigateur, et il ouvrira l'écran suivant.
Vous pouvez désormais accéder aux pages Server Status, Manager App et Host Manager à l'aide des identifiants de connexion que nous avons configurés à l'étape 7.
Conclusion
Ceci conclut notre didacticiel sur l'installation et la configuration de Tomcat Server sur un serveur basé sur Rocky Linux 8.5 et son service via le proxy inverse Nginx, et l'utilisation de SSL pour le protéger. Si vous avez des questions, postez-les dans les commentaires ci-dessous.