Annexe E - Déploiement
Déployer une application Spring MVC avec pages JSP
Il faudra faire quelques étapes pour s'assurer que l'application soit empaquetée de façon convenable pour le déploiement.
Préparer l'application
Pour permettre d'avoir une version de développement et un version de déploiement de l'application, on utilisera différents fichiers de propriétés.
- Créer un fichier
application-prod.properties. - Transférer le contenu du fichier
application.propertiesdans celui-ci. -
Modifiez toutes les propriétés pour correspondre à l'environnement de production. Par exemple, les informations de connexion à la base de données.
-
Si dans votre applicaiton, vous faites références directe à l'adresse
http://localhost:8080, il faudra s'assurer de faire les modifications pour qu'il n'y ait pas de problème une fois l'application déployée.- Dans les fichiers
.propertiesajouter une variableapp.baseurlet donnez lui la valeur de l'URL de base de votre application. En déploiement ce serahttp://localhost:8080. En production ce sera lié au nom de domaine de l'application. - Pour récupérer cette adresse dans un service par exemple, on utilisera la propriété
@Valuede Spring. On pourra ensuite utiliser cette variable dans les méthodes du service.
- Dans le fichierpublic class EmailService { private JavaMailSender emailSender; @Value("${app.baseurl}") String baseUrl; }pom.xml, ajouter la dépendance suivante. - Dans les fichiers
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
- Ajouter également le mode d'empaquetage avec la balise
<packaging>. Cette balise doit se retrouver à l'intérieur de la balse<project>seulement. On indiquera qu'on veut empaqueter en formatwar.
Empaqueter l'application
- Dans IntelliJ, ouvrir l'onglet Maven. Éclater le dossier
Lifecycleet exécuterclean, puispackage.

- Une fois le tout complété, un dossier
targetsera créé dans lequel vous trouverez un fichier nomméNomApplication-0.0.1-SNAPSHOT.war. C'est l'archive que vous déploierez sur le serveur.
Préparer la base de données.
- Au besoin, exporter la base de données de votre environnement de développement et l'importer vers le serveur de déploiement.
- Assurez-vous que l'utilisateur de la base de données ait les permissions requises seulement.
Préparer le serveur
- S'assurer que Java est disponible sur le serveur. Par défaut ce n'est pas installé sur Ubuntu. On peut l'installer avec
- Créer un utilisateur pour exécuter l'application. Il est préférable de créer un utilisateur dédié, qui n'a pas l'accès root et pas de moyen de se connecter pour exécuter les applications.
- Créer un dossier pour votre application. Généralement on le créera dans le dossier
/opt.
Effectuer le déploiement de l'application.
- Déplacer l'archive de votre environnement local vers votre serveur via SSH avec la commande
scp
Chemin de destination
Il est fortement probalbe qu'il soit impossible de transférer directement dans le dossier /opt/nomApplication car ce doit être fait par un administrateur.
Vous pouvez donc simplement le déplacer vers votre dossier
home et le déplacer ensuite une fois connecté au serveur.
Si c'est nécessaire, sudo mv {chemin-initial} {chemin-final}
-
Assurez-vous que le fichier soit exécutable. S'il ne l'est pas vous pouvez le rendre exécutable avec
sudo chmod +x {nom-fichier} -
Ensuite on s'assure que l'utilisateur créé précédemment est le propriétaire du dossier contenant l'application.
Puisqu' Ubuntu utilise systemd, nous allors créer un service qui s'assurera d'exécuter l'application déployée et de la garder en vie.
- Déplacez vous vers le dossier
/etc/systemd/systemet créez y un fichier pour décrire le service. Généralement le fichier se nommeranomApplication.service.
sudo nano nomApplication.service
- Dans le fichier ajoutez la configuration suivante:
[Unit]
Description=Description de l'application
After=syslog.target
[Service]
User=springuser
ExecStart=java -jar {chemin vers le fichier .war} --spring.profiles.active=prod
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
En utilisant --spring.profiles.active=prod on indique à l'application d'utiliser le fichier application-prod.properties.
- Chargez le nouveau service
sudo systemctl daemon-reload
- Ensuite on active et démarre le service
- On peut ensuite voir le statut avec
sudo systemctl status {nomService}
Tester
L'application devrait maintenant être disponible si vous tentez de vous connecter à http://adresseIp:8080/
Déploiement complet
Si on veut exposer l'application à internet avec un nom de domaine, il faudrait alors configurer un proxy inverse avec un service comme nginx par exemple.