CityGuide est une application web fullstack composée de :
- Frontend : React + Vite + Apollo Client
- Backend : Node.js + GraphQL
- Base de données : PostgreSQL
- Reverse Proxy / API Gateway : Nginx
- Admin & DB visualization : Adminer
L’application est containerisée avec Docker et peut être déployée dans différents environnements (dev et prod) via des fichiers .env dédiés.
- Présentation
- Prérequis
- Installation et lancement
- Configurer les variables d'environnement
- Architecture Docker
- Scripts utiles
- CI/CD
- Déploiement
- Troubleshooting
CityGuide permet de :
- consulter des informations sur les villes et leurs points d'intérêts,
- gérer les utilisateurs et les rôles,
- ajouter de nouvelles villes et de nouveaux points d'intérêt.
- Docker et Docker Compose
- Git
- (Optionnel) Node.js +
npmsi vous voulez lancer certains scripts localement
⚠️ Pour le déploiement, Node.js n’est pas nécessaire car tout fonctionne via Docker.
Cloner le repo distant à l'aide de la commande :
git clone [email protected]:WildCodeSchool 2024-09-wns-jaune-cityguide.git
Copier le fichier d’exemple .env.sample, le renommer .env.dev et le remplir avec les variables adéquates.
À la racine du projet, exécuter la commande suivante pour lancer le projet en mode "développement" : npm run build:dev.
Pour vérifier le bon démarrage de l'application, essayer d'accéder aux url suivantes :
-
pour le frontend :
http://localhost:${PORT}: la page d'accueil de l'application doit s'afficher, -
pour le backend GraphQL :
http://localhost:${PORT}/api: ApolloSandbox doit s'afficher.
L’application CityGuide repose sur une architecture multi-conteneurs orchestrée avec Docker Compose. Chaque service est isolé dans son propre conteneur et communique via un réseau interne Docker.
frontend: React + Vitebackend: Node.js + GraphQLdatabase: PostgreSQL (volume persistant)gateway: Nginx (API Gateway + Reverse Proxy)vizualizer: Adminer pour visualiser la base de données
L’ordre de démarrage est géré automatiquement grâce aux healthchecks et à depends_on :
databasedémarre et doit êtrehealthy(pg_isready).backendattend que database soit prêt avant de se lancer.frontendattend que backend soithealthyavant de se lancer.gatewaydémarre seulement après que frontend soit disponible.
Cette configuration permet à l'application de démarrer de façon séquentielle et stable, en évitant les erreurs de connexion prématurées entre services.
L'application compte plusieurs scripts.
Ces scripts permettent de lancer tous les services via Docker Compose selon l’environnement :
npm run build:dev: build et démarre tous les conteneurs en mode développement avec.env.devet activeNODE_ENV=development.npm run build:prod: build et démarre tous les conteneurs en mode production avec.env.prodet activeNODE_ENV=development.
Ces scripts sont à utiliser dans le dossier frontend/.
npm run dev: lance le serveur de développement Vite local avec hot-reload.npm run codegen: génère les types et hooks Apollo GraphQL via graphql-codegen.npm run test:unit: exécute les tests unitaires avec Vitest.npm run test:e2e: exécute les tests end-to-end avec Playwright.
Ces scripts sont à utiliser dans le dossier backend/.
npm run start: démarre le serveur Node.js avec hot-reload (ts-node-dev).npm run data:create: crée une nouvelle migration TypeORM.npm run data:generate: génère une migration TypeORM à partir des changements dans la DB.npm run data:up: applique les migrations à la base de données.npm run data:down: annule la dernière migration appliquée.npm run test: lance les tests backend avec Jest et génère le coverage.
CityGuide intègre un pipeline CI (Continuous Integration) basée sur GitHub Actions, permettant de vérifier automatiquement la qualité et la stabilité du code à chaque contribution.
Le workflow CI s’exécute automatiquement lors d’une pull request vers la branche dev (avant merge),
La CI est composée de deux jobs indépendants, exécutés en parallèle :
-
CI Backend
- Vérification des types (
tsc --noEmit) - Exécution des tests Jest
- Compilation du projet (
tsc)
- Vérification des types (
-
CI Frontend
- Vérification de la compilation (
vite build --dry-run) - Analyse du code avec ESLint
- Exécution des tests unitaires (Vitest)
- Vérification de la compilation (
💡 Remarque :
Le pipeline sera enrichi ultérieurement avec un déploiement automatisé (CD) vers le VPS via SSH, dès qu’une version stable sera validée sur
main.
L’application est déployée sur un serveur VPS configuré avec Caddy, un serveur web moderne et léger qui gère automatiquement les certificats SSL (via Let’s Encrypt) et le reverse proxy. Il assure la mise à disposition sécurisée de l’application sur Internet, en redirigeant le trafic HTTP/HTTPS vers les services correspondants.
Le VPS héberge à la fois le frontend et le backend, chacun exécuté dans des conteneurs Docker orchestrés à l’aide de Docker Compose.
Actuellement, le déploiement de CityGuide est effectué manuellement à l'aide d'une connexion SSH.
Pour se connecter au serveur, exécuter la commande :
ssh ***********@************** -p ****Saisir le mot de passe lorsque l'invite de commande le demande.
Une fois la connexion établie, se déplacer dans le production/ et faire récupérer les modifications du repo distant à l'aide de git pull.
Si besoin, en cas de modifications critiques, redémarrer les containers.
Le site est accessible à l'adresse suivante : https://092024-jaune-3.wns.wilders.dev/
⛔️ Cause probable :
Le conteneur gateway (reverse proxy interne) est arrêté, planté ou ne répond plus.
✅ Étapes de vérification :
-
Lister les conteneurs en cours d’exécution :
docker ps
→ Vérifier si le conteneur nommé
gatewayapparaît dans la liste. -
Afficher tous les conteneurs (même ceux arrêtés) :
docker ps -a
→ Si
gatewayest présent mais arrêté, c’est probablement la cause de l’erreur. -
Consulter les logs du conteneur
gateway:docker logs gateway --tail 50
→ Permet d’identifier une erreur de démarrage ou de configuration.
-
Relancer le conteneur
gateway:docker restart gateway
-
Si le problème persiste, reconstruire le service à l'aide de la commande :
docker compose -f environments/prod/docker-compose.yml up -d --build gateway
-
Vérifier à nouveau que le conteneur est actif :
docker ps | grep gateway
⛔️ Cause probable : Le serveur Caddy (reverse proxy HTTPS) est arrêté ou ne tourne plus.
✅ Étapes de vérification :
-
Vérifier le statut de Caddy :
service caddy status
-
Si Caddy ne fonctionne pas (
Failed to start Caddy.) :service caddy start
→ Démarrer Caddy.
Sélectionner l'utilisateur et entrer le mot de passe correspondant.
En cas de succès, on doit obtenir : Active: active (running).
