Retour aux articles

Automatiser le déploiement Full Stack avec Docker et GitLab CI/CD

Automatiser le déploiement Full Stack avec Docker et GitLab CI/CD | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular
Automatiser le Déploiement Full Stack avec Docker et GitLab CI/CD | Blog Laty Gueye Samba

Par Laty Gueye Samba, Développeur Full Stack Java Spring Boot + Angular à Dakar, Sénégal

Automatiser le Déploiement Full Stack avec Docker et GitLab CI/CD

Dans le paysage dynamique du développement logiciel, l'automatisation des processus de déploiement est devenue une nécessité pour garantir rapidité, fiabilité et cohérence. Pour les applications Full Stack, combinant souvent des frameworks comme Java Spring Boot pour le backend et Angular pour le frontend, le défi de déployer l'ensemble de l'écosystème de manière efficace est significatif.

Cet article explore comment Docker et GitLab CI/CD peuvent être combinés pour créer une chaîne de déploiement entièrement automatisée, transformant la manière dont les applications sont développées et mises en production. L'adoption de ces outils permet aux développeurs de se concentrer sur l'innovation, sachant que leurs applications seront déployées de manière robuste et reproductible.

L'expertise en Docker GitLab CI/CD est particulièrement valorisée par un Développeur Full Stack à Dakar, Sénégal comme Laty Gueye Samba, qui travaille sur des projets nécessitant une grande agilité et des mises en production fréquentes.

1. Conteneurisation avec Docker pour les Applications Full Stack

Docker s'impose comme la solution de référence pour la conteneurisation des applications, offrant un environnement isolé et portable pour chaque composant. Pour une architecture Full Stack Java Spring Boot + Angular, cela signifie que le backend et le frontend peuvent être empaquetés et exécutés indépendamment, garantissant la même configuration de l'environnement, du développement à la production.

La création de Dockerfile pour chaque partie de l'application est la première étape. Voici des exemples simplifiés :

Dockerfile pour l'application Spring Boot (Backend)


    # Utilisation d'une image OpenJDK pour Java
    FROM openjdk:17-jdk-slim AS build
    # Ajout des arguments de construction
    ARG JAR_FILE=target/*.jar
    # Copie du fichier JAR dans le conteneur
    COPY ${JAR_FILE} app.jar
    # Exécution de l'application
    ENTRYPOINT ["java","-jar","/app.jar"]
    

Dockerfile pour l'application Angular (Frontend)


    # Utilisation d'une image Node.js pour construire l'application 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

    # Utilisation d'une image Nginx pour servir l'application Angular
    FROM nginx:alpine
    COPY --from=build /app/dist/your-angular-app /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

Orchestration avec Docker Compose

Pour gérer simultanément le backend et le frontend, ainsi que d'autres services (base de données, etc.), Docker Compose est l'outil idéal. Il permet de définir l'architecture de l'application dans un fichier docker-compose.yml.


    version: '3.8'
    services:
      backend:
        build:
          context: ./backend
          dockerfile: Dockerfile
        ports:
          - "8080:8080"
        environment:
          - SPRING_PROFILES_ACTIVE=prod
        depends_on:
          - database # Si une base de données est présente

      frontend:
        build:
          context: ./frontend
          dockerfile: Dockerfile
        ports:
          - "4200:80" # Ou un autre port pour l'accès externe
        depends_on:
          - backend

      database:
        image: postgres:13-alpine # Exemple de base de données
        environment:
          POSTGRES_DB: your_db
          POSTGRES_USER: your_user
          POSTGRES_PASSWORD: your_password
        volumes:
          - db_data:/var/lib/postgresql/data

    volumes:
      db_data:
    

Avec Docker Compose, le déploiement Full Stack local est simplifié via une simple commande docker-compose up -d, préparant ainsi le terrain pour l'automatisation complète.

2. Intégration Continue et Déploiement Continu avec GitLab CI/CD

La véritable puissance de l'automatisation réside dans l'intégration continue et le déploiement continu (CI/CD). GitLab CI/CD, intégré directement dans la plateforme GitLab, permet de définir des pipelines automatisés qui construisent, testent et déploient les applications à chaque modification du code source. C'est un pilier essentiel pour un Expert Java Spring Boot Angular visant l'efficacité.

Le fichier .gitlab-ci.yml est le cœur de cette automatisation. Il est placé à la racine du dépôt et décrit les étapes (stages) du pipeline.

Exemple de fichier .gitlab-ci.yml pour un déploiement Full Stack


    stages:
      - build
      - test
      - deploy

    variables:
      DOCKER_IMAGE_BACKEND: $CI_REGISTRY_IMAGE/backend
      DOCKER_IMAGE_FRONTEND: $CI_REGISTRY_IMAGE/frontend
      DOCKER_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA

    # Stage de construction du Backend
    build_backend:
      stage: build
      image: docker:latest
      services:
        - docker:dind
      script:
        - echo "Building backend Docker image..."
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
        - docker build -t $DOCKER_IMAGE_BACKEND:$DOCKER_TAG ./backend
        - docker push $DOCKER_IMAGE_BACKEND:$DOCKER_TAG
      only:
        - main

    # Stage de construction du Frontend
    build_frontend:
      stage: build
      image: docker:latest
      services:
        - docker:dind
      script:
        - echo "Building frontend Docker image..."
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
        - docker build -t $DOCKER_IMAGE_FRONTEND:$DOCKER_TAG ./frontend
        - docker push $DOCKER_IMAGE_FRONTEND:$DOCKER_TAG
      only:
        - main

    # Stage de test (exemple générique, à adapter)
    test_application:
      stage: test
      image: alpine/git # Ou une image avec les outils de test nécessaires
      script:
        - echo "Running tests..."
        - echo "Tests passed!"
      only:
        - main

    # Stage de déploiement
    deploy_production:
      stage: deploy
      image: docker:latest
      services:
        - docker:dind
      script:
        - echo "Deploying to production..."
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
        - docker pull $DOCKER_IMAGE_BACKEND:$DOCKER_TAG
        - docker pull $DOCKER_IMAGE_FRONTEND:$DOCKER_TAG
        # Exemple de déploiement via SSH ou Kubernetes, simplifié ici
        - ssh user@your_server "docker-compose -f /path/to/docker-compose.prod.yml down && docker-compose -f /path/to/docker-compose.prod.yml up -d"
      only:
        - main
    

Ce pipeline illustre les étapes clés : la construction des images Docker pour le backend et le frontend, le test des applications, et enfin le déploiement sur un environnement de production. Les images construites sont poussées vers le registre Docker intégré de GitLab, puis tirées et démarrées sur le serveur cible. La flexibilité de GitLab CI/CD permet de l'adapter à des environnements de déploiement variés, des serveurs virtuels aux orchestrateurs de conteneurs comme Kubernetes.

Point de vue : développeur full stack à Dakar

Pour un développeur travaillant sur des systèmes comme les applications de gestion des risques ou les plateformes de gestion hospitalière, la maîtrise de l'automatisation du déploiement avec Docker et GitLab CI/CD représente un avantage concurrentiel réel sur le marché technologique africain, en pleine expansion. Cette compétence permet d'assurer des livraisons rapides et fiables, essentielles pour les clients exigeants.

Conclusion

L'automatisation du déploiement Full Stack avec Docker et GitLab CI/CD n'est plus un luxe, mais une exigence pour tout projet logiciel moderne. Elle permet de réduire les erreurs humaines, d'accélérer les cycles de livraison et d'assurer une meilleure qualité logicielle. Pour un Développeur Full Stack Dakar Sénégal tel que Laty Gueye Samba, l'intégration de ces pratiques est fondamentale pour construire des solutions robustes et évolutives.

L'expertise en Java Spring Boot + Angular combinée à une parfaite maîtrise de l'écosystème Docker GitLab CI/CD positionne un développeur pour relever les défis des infrastructures complexes et des exigences de performance des marchés émergents.

Pour approfondir vos connaissances, les ressources officielles sont les meilleures sources d'information :

À 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