Déployer son application Spring Boot dans le cloud

Partie 1 – Configurer son environnement de cloud avec Minikube, Kubernetes et Docker Compose en local

Rédigé par : Adnene Hamdouni

Chaque semaine, retrouvez sur notre blog un article relatif à notre série « Guide pratique dédié à la sécurisation d’une application Java Spring Boot et son déploiement dans le Cloud AWS ». L’objectif est de réaliser, pas à pas, la configuration d’un environnement sécurisé, la création d’une API et in fine, son déploiement dans le cloud.

Introduction

Après avoir abordé la question des applications micro-frontends dans l’article précédent, nous vous guidons aujourd’hui, pas à pas, dans la configuration de votre environnement cloud avec Minikube, Kubernetes et Docker Compose.

Visualisez quelques minutes : imaginez-vous entrain de déployer votre application Spring Boot backend avec une intégration Keycloak, tout ça sur votre propre machine locale. Et bien c’est l’objectif cette première partie. Nous allons préparer notre environnement cloud. Dans la partie suivante qui sera publiée la semaine prochaine, nous vous donnerons les clés pour déployer votre application Spring Boot backend.

Prérequis et configuration initiale

Avant de plonger dans le code, assurez-vous d’avoir les outils nécessaires :

  • Java 17 : pour profiter des dernières fonctionnalités,
  • Spring Boot 3+ : pour rester à jour et profiter des meilleures pratiques,
  • Docker : pour containeriser nos applications,
  • Minikube : pour un cluster Kubernetes local,
  • Kubectl : pour interagir avec Kubernetes,
  • Maven : pour construire et gérer notre projet Java.

Installation des outils

1. Docker

Docker est essentiel pour containériser notre application. Voici comment l’installer :

  1. Télécharger et installer Docker :

Sous Linux :

curl -fsSL https://get.docker.com -o get-docker.sh sh get-dcker.sh

Sous macOS :

  •  Téléchargez Docker Desktop depuis docker.com
  • Suivez les instructions d’installation.

Sous Windows :

  •  Téléchargez Docker Desktop depuis docker.com
  • Suivez les instructions d’installation.

2. Vérifiez l’installation

2. Minikube

Minikube va nous permettre de créer un cluster Kubernetes local. Voici comment l’installer :

  1. Télécharger et installer Minikube :

Sous Linux :

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Sous macOS :

brew install minikube

Sous Windows :

  • Téléchargez Minikube depuis ce lien.
  • Suivez les instructions d’installation.
  • Ensuite, démarrez Minikube :

minikube start

3. Kubectl

Kubectl est l’outil de ligne de commande pour interagir avec Kubernetes.

  1. Télécharger et installer Kubectl :

Sous Linux :

curl -LO « https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl »
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

Sous macOS :

brew install kubectl

Sous Windows :

  • Téléchargez Kubectl depuis ce lien.
  • Suivez les instructions d’installation.
  • Vérifiez l’installation :

kubectl version –client

4. Maven

Maven sera notre gestionnaire de build pour Java.

  • Télécharger et installer Maven :

Sous Linux :

sudo apt update
sudo apt install maven

Sous macOS :

brew install maven

Sous Windows :

  • Téléchargez Maven depuis ce lien.
  • Décompressez ensuite le fichier et ajoutez bin à votre PATH.
  • Vérifiez l’installation :

Configuration initiale

Une fois que tous les outils sont installés, nous devons nous assurer que Docker est en cours d’exécution et que Minikube peut interagir avec Docker :

1. Lancez Docker (si ce n’est pas déjà fait) :

sudo systemctl start docker

2. Configurez Minikube pour utiliser Docker comme runtime de conteneur :

minikube config set driver docker

3. Démarrez Minikube :

minikube start

4. Vérifiez que tout fonctionne :

kubectl get nodes

Si tout est en ordre, vous devriez voir votre cluster Minikube en cours d’exécution.

Containérisation et déploiement de l’application Spring Boot backend

Maintenant, entrons dans le vif du sujet avec l’application Spring Boot backend. Tout d’abord, assurons-nous que notre application Spring Boot est prête à être containérisée.

1. Dockerfile pour l’application Spring Boot backend

Créez un fichier Dockerfile pour l’application backend :

Dockerfile – Backend

FROM openjdk:17-jdk-slim
VOLUME /tmp
COPY target/oauthclient-backend.jar oauthclient-backend.jar
ENTRYPOINT [« java »,-jar »/oauthclient-backend.jar »]

Assurez-vous que l’application est prête pour être construite avec Maven :

mvn clean package

Ensuite, construisons notre image Docker :

docker build -t oauthclient-backend:latest -f Dockerfile .

Et voilà ! L’application backend est désormais une image Docker prête à être déployée.

2. Utilisation de Docker Compose pour exécuter le Dockerfile

Nous allons à présent utiliser Docker Compose pour exécuter notre Dockerfile et lancer notre application backend ainsi que Keycloak. Voici comment configurer Docker Compose pour cette tâche.

Créez un fichier docker-compose.yml pour orchestrer les services :

version: ‘3.8’

volumes:
postgres_data:
driver: local

networks:
oauthclient-network:
driver: bridge

services:

postgres:
image: postgres
volumes:
– postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
keycloak:
container_name: keycloak
image: quay.io/keycloak/keycloak:legacy
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_SCHEMA: public
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: Pa55w0rd
ports:
– 8180:8080
expose:
– 8180
depends_on:
– postgres

backend-app:
container_name: oauthclient-backend
image: oauthclient-backend:latest
build:
context: .
dockerfile: Dockerfile
ports:
« 8081:8081 »
environment:
– SPRING_PROFILES_ACTIVE=prod
volumes:
– ./data:/data
depends_on:
– keycloak

Dans ce fichier docker-compose.yml, nous avons deux services : Keycloak et notre application backend. Keycloak est configuré pour utiliser une base de données H2 en mémoire, et notre application backend est construite à partir du Dockerfile que nous avons créé précédemment.

Pour exécuter les services, lancez simplement :

docker-compose up –build -d

Cette commande va construire l’image Docker pour l’application backend et démarrer les deux services en arrière-plan.

3. Vérification et gestion des services

Pour vérifier que les services sont en cours d’exécution, utilisez :

docker-compose ps

Vous devriez voir les deux services (Keycloak et backend-app) en cours d’exécution. Pour voir les logs des services, utilisez :

docker-compose logs -f

La commande ci-dessus vous permettra de suivre les logs en temps réel, ce qui est utile pour le débogage et la vérification du bon fonctionnement de votre application.

4. Mise en place de Kubernetes et Minikube

Notre cluster Minikube est désormais en route. Il nous faut maintenant le configurer pour notre application backend. Créez les fichiers de déploiement pour l’application backend :

apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
spec:
replicas: 2
selector:
matchLabels:
app: backend-app
template:
metadata:
labels:
app: backend-app
spec:
containers:
name: backend-app
image: oauthclient-backend:latest
ports:
containerPort: 8081

Appliquez ce fichier à votre cluster Kubernetes :

kubectl apply -f deployment-backend.yaml

Vérifiez ensuite que tout fonctionne :

kubectl  get deployments
kubectl get pods

Accès au tableau de bord Kubernetes

Le tableau de bord Kubernetes est un outil graphique très utile pour gérer et surveiller votre cluster Kubernetes. Voici comment l’installer et y accéder :

1. Déployer le tableau de bord Kubernetes :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

2. Créer un compte administrateur pour le tableau de bord :

apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
– kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard

3. Appliquer cette configuration :

kubectl apply -f admin-user.yaml

4. Accéder au tableau de bord :

kubectl proxy

L’interface s’affiche via l’url : http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login

Tableau de bord Kubernetes

Ouvrez votre navigateur et allez à http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.

5. Obtenez un token de connexion via la commande :

kubectl -n kubernetes-dashboard create token admin-user

Voici un exemple de token :

Utilisez ensuite ce token pour vous connecter au tableau de bord Kubernetes.

Interface Kubernetes – Déploiements actifs

Bonnes pratiques en développement backend et cloud

Pour garantir la sécurité, la scalabilité et l’efficacité de votre application, suivez ces bonnes pratiques :

  • Sécurisez vos endpoints : utilisez OAuth2, JWT, et Keycloak pour des API bien protégées.
  • Scalabilité : configurez vos réplicas dans Kubernetes pour gérer la charge.
  • Automatisation : utilisez des pipelines CI/CD pour automatiser les déploiements (par exemple, GitHub Actions ou Jenkins).

Gestion DevOps et suivi des Logs

Pour rappel, nous avons couvert dans cet article les étapes de base pour déployer votre application Spring Boot sur un cluster Kubernetes local avec Minikube. Cependant, pour une gestion et un suivi complets dans un environnement de production, il existe d’autres aspects importants à prendre en compte.

Conclusion

Félicitations ! Vous devez normalement avoir réussi à configurer Kubernetes via Minikube et à poser les premières briques de la configuration de votre application Spring Boot dans le cloud. Cependant, la configuration de l’environnement n’est que la première étape.

Dans le prochain article, nous explorerons en profondeur les aspects liés au déploiement de votre application Spring Boot sur un cluster Kubernetes local via Minikube et Docker Compose, tout en suivant les meilleures pratiques de développement backend et cloud. Dans les prochains articles, vous découvrirez également les aspects du déploiement continu (CI/CD), des tests, de la surveillance des pods et de la gestion des logs pour une application Spring Boot déployée sur Kubernetes dans un environnement de production, en utilisant des outils comme Grafana et Prometheus. Continuez à explorer et à apprendre, car le monde du cloud et du DevOps est vaste et plein de possibilités.

Être informé.e de la sortie du guide pratique

À propos de l’auteur
Photo de profil Linkedin de Adnene Hamdouni

ADNENE HAMDOUNI,

Icon linkedIn
Icone Github

Partager