This commit is contained in:
mahek 2025-07-25 17:17:59 +02:00
parent a49db6e4ae
commit b91b7c5b88
7 changed files with 11 additions and 318 deletions

View file

@ -1,93 +0,0 @@
# Guide d'utilisation de Docker avec Managerr
Ce document explique comment utiliser Docker pour exécuter l'application Managerr.
## Prérequis
- Docker installé sur votre machine
- Docker Compose installé sur votre machine
## Commandes de base
### Démarrage standard
```bash
./docker-manage.sh start
```
Cette commande démarre tous les services (MongoDB, backend et frontend) avec la configuration standard qui inclut des healthchecks pour s'assurer que MongoDB est prêt avant de démarrer le backend.
### Démarrage simplifié (en cas de problème)
Si vous rencontrez l'erreur "dependency failed to start: container managerr-mongodb is unhealthy", utilisez cette commande :
```bash
./docker-manage.sh start:simple
```
Cette commande utilise une configuration simplifiée sans healthcheck, ce qui peut résoudre les problèmes de démarrage.
### Arrêt des services
```bash
./docker-manage.sh stop
```
### Afficher l'état des services
```bash
./docker-manage.sh status
```
### Afficher les logs
```bash
# Tous les services
./docker-manage.sh logs
# Seulement le frontend
./docker-manage.sh logs:front
# Seulement le backend
./docker-manage.sh logs:back
# Seulement MongoDB
./docker-manage.sh logs:db
```
## Résolution des problèmes
### Erreur : "dependency failed to start: container managerr-mongodb is unhealthy"
Cette erreur se produit généralement lorsque le healthcheck de MongoDB échoue. Plusieurs solutions sont possibles :
1. Utilisez la commande de démarrage simplifiée :
```bash
./docker-manage.sh start:simple
```
2. Si vous avez déjà essayé de démarrer les conteneurs, nettoyez d'abord :
```bash
docker-compose down
```
3. Si le problème persiste, vérifiez les logs de MongoDB :
```bash
docker logs managerr-mongodb
```
4. Assurez-vous que le port 27017 est libre sur votre machine :
```bash
sudo lsof -i :27017
```
Si un autre service utilise ce port, arrêtez-le ou modifiez le port dans docker-compose.yml.
### Problème de connexion depuis le backend vers MongoDB
Si le backend ne parvient pas à se connecter à MongoDB, vérifiez que l'URL de connexion est correcte dans le fichier `.env` du backend et dans docker-compose.yml. Dans le contexte Docker, l'URL doit être :
```
mongodb://root:rootpassword@mongodb:27017/managerr?authSource=admin
```
Notez que l'hôte est `mongodb` (le nom du service dans docker-compose.yml) et non `localhost`.

View file

@ -1,70 +0,0 @@
version: '3.8'
services:
# Service MongoDB
mongodb:
image: mongo:latest
container_name: managerr-mongodb
restart: unless-stopped
volumes:
- mongodb-data:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=rootpassword
- MONGO_INITDB_DATABASE=managerr
ports:
- "27017:27017"
networks:
- managerr-network
# Service Backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: managerr-backend
restart: unless-stopped
depends_on:
- mongodb
environment:
- NODE_ENV=development
- PORT=5000
- MONGODB_URI=mongodb://root:rootpassword@mongodb:27017/managerr?authSource=admin
- JWT_SECRET=secret_jwt_pour_managerr
ports:
- "5000:5000"
volumes:
- ./backend:/app
- /app/node_modules
networks:
- managerr-network
# Service Frontend
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: managerr-frontend
restart: unless-stopped
depends_on:
- backend
environment:
- NODE_ENV=development
- VUE_APP_API_URL=http://localhost:5000/api
ports:
- "8012:8012"
volumes:
- ./frontend:/app
- /app/node_modules
networks:
- managerr-network
# Volumes
volumes:
mongodb-data:
driver: local
# Networks
networks:
managerr-network:
driver: bridge

View file

@ -1,11 +1,7 @@
version: '3.8'
services:
# Service MongoDB
# Service MongoDB sans healthcheck personnalisé
mongodb:
build:
context: ./mongodb
dockerfile: Dockerfile
image: mongo:latest
container_name: managerr-mongodb
restart: unless-stopped
volumes:
@ -18,8 +14,15 @@ services:
- "27017:27017"
networks:
- managerr-network
# Healthcheck simple intégré (utilisera les commandes disponibles dans l'image)
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongosh mongodb://localhost:27017/test --quiet || exit 1
interval: 10s
timeout: 10s
retries: 5
start_period: 30s
# Service Backend
# Service Backend avec script d'attente
backend:
build:
context: ./backend
@ -27,8 +30,7 @@ services:
container_name: managerr-backend
restart: unless-stopped
depends_on:
mongodb:
condition: service_healthy
- mongodb
environment:
- NODE_ENV=development
- PORT=5000

View file

@ -1,80 +0,0 @@
#!/bin/bash
# Script pour gérer les conteneurs Docker de l'application Managerr
# Fonction d'aide
show_help() {
echo "Usage: $0 [option]"
echo "Options:"
echo " start - Démarre tous les services avec la configuration standard"
echo " start:simple - Démarre tous les services avec la configuration simplifiée (sans healthcheck)"
echo " stop - Arrête tous les services"
echo " restart - Redémarre tous les services"
echo " status - Affiche l'état des services"
echo " logs - Affiche les logs de tous les services"
echo " logs:front - Affiche les logs du frontend"
echo " logs:back - Affiche les logs du backend"
echo " logs:db - Affiche les logs de la base de données"
echo " build - Reconstruit les images Docker"
echo " help - Affiche cette aide"
}
# Si aucun argument n'est fourni, afficher l'aide
if [ $# -eq 0 ]; then
show_help
exit 1
fi
# Traitement des options
case "$1" in
start)
echo "Démarrage des services..."
docker-compose up -d
echo "Services démarrés ! L'application est accessible sur http://localhost:8012"
;;
start:simple)
echo "Démarrage des services avec la configuration simplifiée..."
docker-compose -f docker-compose.simple.yml up -d
echo "Services démarrés ! L'application est accessible sur http://localhost:8012"
echo "Note: Cette configuration n'utilise pas de healthcheck pour MongoDB."
;;
stop)
echo "Arrêt des services..."
docker-compose down
echo "Services arrêtés."
;;
restart)
echo "Redémarrage des services..."
docker-compose down
docker-compose up -d
echo "Services redémarrés ! L'application est accessible sur http://localhost:8012"
;;
status)
echo "État des services:"
docker-compose ps
;;
logs)
docker-compose logs -f
;;
logs:front)
docker-compose logs -f frontend
;;
logs:back)
docker-compose logs -f backend
;;
logs:db)
docker-compose logs -f mongodb
;;
build)
echo "Reconstruction des images Docker..."
docker-compose build
echo "Images reconstruites."
;;
help)
show_help
;;
*)
echo "Option non reconnue: $1"
show_help
exit 1
;;
esac

View file

@ -1,15 +0,0 @@
FROM mongo:latest
# Installation d'outils pour le healthcheck
RUN apt-get update && apt-get install -y --no-install-recommends \
netcat \
&& rm -rf /var/lib/apt/lists/*
# Script de healthcheck
COPY healthcheck.sh /healthcheck.sh
RUN chmod +x /healthcheck.sh
HEALTHCHECK --interval=10s --timeout=10s --start-period=30s --retries=5 \
CMD ["/healthcheck.sh"]
EXPOSE 27017

View file

@ -1,10 +0,0 @@
#!/bin/bash
# healthcheck.sh pour MongoDB
# Attente que le port MongoDB soit ouvert
nc -z localhost 27017 || exit 1
# Ping MongoDB pour confirmer qu'il fonctionne
mongo --quiet --eval "db.adminCommand('ping')" || exit 1
exit 0

View file

@ -1,41 +0,0 @@
#!/bin/bash
# Script pour démarrer l'application Managerr (backend et frontend)
# Fonction pour arrêter proprement les processus à la sortie
cleanup() {
echo "Arrêt des serveurs..."
kill $BACKEND_PID $FRONTEND_PID 2>/dev/null
exit
}
# Capture des signaux pour arrêter proprement
trap cleanup SIGINT SIGTERM
# Vérification de l'existence des répertoires
if [ ! -d "./backend" ] || [ ! -d "./frontend" ]; then
echo "Erreur: Les répertoires backend et frontend doivent exister dans le répertoire courant."
exit 1
fi
# Démarrage du backend
echo "Démarrage du serveur backend..."
cd backend
npm run dev &
BACKEND_PID=$!
cd ..
# Vérification que le backend a démarré correctement
sleep 2
if ! kill -0 $BACKEND_PID 2>/dev/null; then
echo "Erreur: Le serveur backend n'a pas pu démarrer."
exit 1
fi
# Démarrage du frontend
echo "Démarrage du serveur frontend..."
cd frontend
npm run serve &
FRONTEND_PID=$!
# Attente que les deux processus se terminent
wait $BACKEND_PID $FRONTEND_PID