Installation en tant que service systemd

De Wiki de Jordan LE NUFF
< Technique‎ | Java‎ | Spring Boot
Révision datée du 2 décembre 2021 à 15:31 par Jordan (discussion | contributions) (Page créée avec « ==Présentation== Cette page a pour objet de décrire comment implémenter une ou des application(s) Java [https://spring.io/projects/spring-boot Spring… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment implémenter une ou des application(s) Java Spring Boot avec le gestionnaire de services systemd de Linux.

Ressources

Les configurations proposées dans cette page ont été réalisées en s'appuyant sur les documentations officielles de systemd et de Spring Boot et sur les bonnes pratiques d'administration de systèmes.

Plus particulièrement, les sections de documentations suivantes ont été particulièrement utiles :

Configuration pour une unique instance de l'application

Configuration simple

Dans le cas d'un lancement d'une unique instance d'application Java Spring Boot, créer un fichier /etc/systemd/system/myapp.service dont le contenu sera le suivant :

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Ceci est la configuration standard recommandée par Spring Boot.

Configuration avancée

Dans le cas d'un lancement d'une unique instance d'application Java Spring Boot, créer un fichier /etc/systemd/system/myapp.service dont le contenu sera le suivant :

[Unit]
Description=%p
After=syslog.target

[Service]
Umask=0007
User=myapp
Group=mygroup
WorkingDirectory=/var/myapp
ExecStart=/usr/bin/java -jar /var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Cette configuration permet d'avoir un meilleur contrôle sur :

  • Le nom du service : %p correspond au nom du service (récupéré dans le nom du fichier /etc/systemd/system/myapp.service)
  • Le masque pour la création de fichiers/dossiers : Umask=0007
  • Le groupe d'utilisateur : Group=mygroup
  • Le répertoire d'exécution : WorkingDirectory=/var/myapp
    • Cela peut être utile pour interagir avec le système de fichiers de façon relative
  • Le binaire d'exécution java : /usr/bin/java -jar
    • De cette façon, il est possible d'utiliser une autre version de Java présente sur le serveur

Configuration modèle pour plusieurs instances de l'application

Dans la pratique, il a été constaté que, selon la version de Spring Boot utilisée, les méthodes de chargement de certains paramètres différaient.

Spring Boot version 2.1.8

[Unit]
Description=Instance %i de %p
After=syslog.target

[Service]
UMask=0007
User=svc-java
Group=java
EnvironmentFile=/mydata/mySpringBootApps/%i/%p/conf/EnvironmentFile
WorkingDirectory=/mydata/mySpringBootApps/%i/%p/run
ExecStart=/usr/bin/java $JAVA_OPTS -jar /mydata/mySpringBootApps/%i/%p/run/%p.jar --spring.config.location=file:/mydata/mySpringBootApps/%i/%p/conf/ /mydata/mySpringBootApps/%i/%p/run/application.pid
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Spring Boot version 2.4.5

[Unit]
Description=Instance %i de %p
After=syslog.target

[Service]
UMask=0007
User=svc-java
Group=java
EnvironmentFile=/mydata/mySpringBootApps/%i/%p/conf/EnvironmentFile
WorkingDirectory=/mydata/mySpringBootApps/%i/%p/run
ExecStart=/usr/bin/java $JAVA_OPTS -jar -Dspring.config.location=file:/mydata/mySpringBootApps/%i/%p/conf/ /mydata/mySpringBootApps/%i/%p/run/%p.jar /mydata/mySpringBootApps/%i/%p/run/application.pid
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target