Retour aux articles

Dockerisation complète d'une application Full Stack Spring Boot et Angular pour la production

Dockerisation complète d'une application Full Stack Spring Boot et Angular pour la production | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular
Dockerisation complète d'une application Full Stack Spring Boot et Angular pour la production

Dockerisation complète d'une application Full Stack Spring Boot et Angular pour la production

Dans le monde du développement logiciel moderne, la capacité à déployer des applications de manière cohérente, reproductible et isolée est devenue une exigence fondamentale, en particulier pour les environnements de production. La conteneurisation, et Docker en particulier, offre une solution robuste à cette problématique. Cet article explore la dockerisation complète d'une application Full Stack, combinant un backend Spring Boot et un frontend Angular, une architecture courante maîtrisée par Laty Gueye Samba, Développeur Full Stack à Dakar.

La mise en production d'une application combinant un service backend Java Spring Boot et une interface utilisateur Angular présente des défis spécifiques, notamment en termes de gestion des dépendances, d'environnement d'exécution et de déploiement. Docker simplifie considérablement ces processus en encapsulant chaque composant dans un conteneur indépendant, garantissant ainsi que l'application fonctionne de manière identique, quel que soit l'environnement hôte. Pour les experts Java Spring Boot Angular, cette approche est essentielle pour garantir la fiabilité et la scalabilité des solutions.

L'objectif est de montrer comment transformer une application Full Stack en un ensemble de conteneurs Docker interopérables, prêts pour la production. Cela inclut la création de Dockerfiles optimisés pour chaque partie de l'application (backend et frontend) et l'orchestration de ces conteneurs à l'aide de Docker Compose. Un Développeur Full Stack expérimenté, comme Laty Gueye Samba, utilise ces techniques pour déployer des applications métier complexes, des systèmes ERP ou des plateformes de gestion des risques avec une efficacité accrue.

Dockerisation du Backend Spring Boot

La première étape consiste à dockeriser le service backend Spring Boot. Un Dockerfile bien conçu permet de construire une image légère et performante, en tirant parti des builds multi-étapes. Cette approche réduit la taille finale de l'image en séparant les phases de compilation des dépendances et de l'exécution.

Voici un exemple de Dockerfile pour une application Spring Boot :


# Étape 1 : Phase de compilation
FROM openjdk:17-jdk-slim AS build
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline
COPY src ./src
RUN ./mvnw package -DskipTests

# Étape 2 : Phase d'exécution
FROM openjdk:17-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
    

Ce Dockerfile utilise une image openjdk:17-jdk-slim pour la compilation et une image openjdk:17-jre-slim, beaucoup plus légère, pour l'exécution. Cela illustre une bonne pratique pour les applications Java, minimisant la surface d'attaque et les ressources nécessaires en production. Pour un Développeur Full Stack Dakar Sénégal, l'optimisation des images Docker est une compétence clé.

Dockerisation du Frontend Angular

Le frontend Angular, une fois construit, est un ensemble de fichiers statiques qui peuvent être servis par un serveur web léger comme Nginx. Ici aussi, un build multi-étapes est recommandé pour compiler l'application Angular puis servir les fichiers résultants.

Voici un Dockerfile pour une application Angular, utilisant Node.js pour le build et Nginx pour le service :


# Étape 1 : Phase de compilation Angular
FROM node:18-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build --configuration=production

# Étape 2 : Phase de service avec Nginx
FROM nginx:alpine
COPY --from=build /app/dist/your-angular-app /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
    

L'étape de compilation utilise une image Node.js pour installer les dépendances et construire l'application. L'étape de service utilise une image Nginx Alpine, connue pour sa légèreté. Il est crucial de configurer Nginx pour router correctement les requêtes, notamment pour la gestion des URL côté client (routage Angular).

Un exemple de configuration nginx.conf simple :


server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }

    # Proxy pour le backend Spring Boot (si le frontend et backend sont sur le même domaine/port via Nginx)
    # Dans un contexte Docker Compose, il est souvent préférable de laisser le frontend
    # appeler directement le service backend via son nom de service Docker.
    # location /api {
    #     proxy_pass http://backend-service-name:8080;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # }
}
    

Pour un Expert Java Spring Boot Angular, l'intégration fluide entre les deux parties de l'application est primordiale, et Docker Compose facilite grandement cette communication.

Orchestration avec Docker Compose

Une fois que les Dockerfiles sont prêts pour le backend et le frontend, Docker Compose permet de définir et d'exécuter des applications multi-conteneurs. Un fichier docker-compose.yml décrit tous les services, leurs dépendances, les volumes et les réseaux.

Voici un exemple de docker-compose.yml pour l'application Full Stack :


version: '3.8'
services:
  backend:
    build:
      context: ./backend-app # Chemin vers le dossier de l'application Spring Boot
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: password
    depends_on:
      - db
    networks:
      - app-network

  frontend:
    build:
      context: ./frontend-app # Chemin vers le dossier de l'application Angular
      dockerfile: Dockerfile
    ports:
      - "80:80"
    depends_on:
      - backend
    networks:
      - app-network

  db:
    image: postgres:13-alpine
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  db_data:
    

Ce fichier définit trois services : backend, frontend et db (une base de données PostgreSQL). Les services sont connectés via un réseau Docker interne (app-network), permettant au backend de communiquer avec la base de données via le nom de service db. Laty Gueye Samba, Développeur Full Stack Dakar Sénégal, insiste sur l'importance de cette orchestration pour des déploiements de production robustes.

Point de vue : développeur full stack à Dakar

Pour un développeur travaillant sur des systèmes comme des applications de gestion hospitalière, des applications de gestion des risques ou des plateformes ERP, la maîtrise de la conteneurisation complète avec Docker représente un avantage concurrentiel réel sur le marché technologique africain, en pleine expansion. Cette compétence permet de livrer des solutions plus rapidement, avec une meilleure qualité et une maintenabilité accrue, des atouts recherchés par les entreprises.

Conclusion

La dockerisation complète d'une application Full Stack Spring Boot et Angular pour la production est une pratique moderne indispensable. Elle offre des avantages considérables en termes de portabilité, de reproductibilité, de scalabilité et de gestion de l'environnement. En encapsulant chaque composant dans son propre conteneur Docker et en orchestrant l'ensemble avec Docker Compose, les Développeurs Full Stack peuvent grandement simplifier le cycle de vie de leurs applications, de la phase de développement à la production.

Laty Gueye Samba, Expert Java Spring Boot Angular basé à Dakar, utilise ces techniques avancées pour construire et déployer des applications robustes et performantes. La conteneurisation est une pierre angulaire des architectures de microservices et des déploiements DevOps, garantissant que les applications fonctionnent de manière fiable, quel que soit l'environnement.

Pour approfondir vos connaissances sur Docker, Spring Boot et Angular, il est recommandé de consulter les ressources officielles :

À propos de l'auteur

Laty Gueye Samba est développeur Full Stack basé à Dakar, Sénégal. Spécialiste des écosystèmes Java / Spring Boot et Angular.

Contact : latygueyesamba@gmail.com  |  Dakar, Sénégal