180 lines
4.1 KiB
Markdown
180 lines
4.1 KiB
Markdown
# DiagramPH - Docker Deployment Guide
|
|
|
|
## 🐳 Docker Compose Setup
|
|
|
|
Ce projet utilise Docker Compose pour déployer le backend (FastAPI) et le frontend (Next.js) ensemble.
|
|
|
|
### Architecture
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────────┐
|
|
│ Frontend │─────▶│ Backend │
|
|
│ (Next.js) │ │ (FastAPI) │
|
|
│ Port: 3000 │ │ Port: 8001 │
|
|
└─────────────────┘ └──────────────────┘
|
|
│ │
|
|
└────────────────────────┘
|
|
Docker Network
|
|
```
|
|
|
|
## 🚀 Démarrage Rapide
|
|
|
|
### Production
|
|
|
|
```bash
|
|
# Build et démarrer tous les services
|
|
docker-compose up --build
|
|
|
|
# En mode détaché (background)
|
|
docker-compose up -d --build
|
|
|
|
# Arrêter les services
|
|
docker-compose down
|
|
|
|
# Arrêter et supprimer les volumes
|
|
docker-compose down -v
|
|
```
|
|
|
|
Accès:
|
|
- **Frontend**: http://localhost:3000
|
|
- **Backend API**: http://localhost:8001
|
|
- **API Docs**: http://localhost:8001/docs
|
|
|
|
### Développement
|
|
|
|
Pour le développement avec hot-reload:
|
|
|
|
```bash
|
|
# Démarrer en mode développement
|
|
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
|
|
|
|
# Rebuild si nécessaire
|
|
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build
|
|
```
|
|
|
|
## 📦 Services
|
|
|
|
### Backend (Python FastAPI)
|
|
|
|
- **Port**: 8001
|
|
- **Base Image**: python:3.12-slim
|
|
- **Hot Reload**: Activé avec `--reload` en dev
|
|
- **Healthcheck**: GET /api/v1/refrigerants/
|
|
|
|
### Frontend (Next.js)
|
|
|
|
- **Port**: 3000
|
|
- **Base Image**: node:20-alpine
|
|
- **Build**: Standalone output optimisé
|
|
- **Healthcheck**: HTTP GET sur port 3000
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Variables d'Environnement
|
|
|
|
#### Backend
|
|
```env
|
|
PYTHONUNBUFFERED=1
|
|
PYTHONPATH=/app:/app/IPM_SO:/app/IPM_DLL
|
|
LD_LIBRARY_PATH=/app/IPM_SO:/app/IPM_DLL
|
|
```
|
|
|
|
#### Frontend
|
|
```env
|
|
NODE_ENV=production
|
|
NEXT_PUBLIC_API_URL=http://backend:8001/api/v1
|
|
```
|
|
|
|
### Volumes
|
|
|
|
Les volumes sont montés pour permettre le hot-reload en développement:
|
|
- `./app` → Backend code
|
|
- `./Frontend` → Frontend code
|
|
- `./IPM_SO` et `./IPM_DLL` → Native libraries
|
|
|
|
## 📝 Commandes Utiles
|
|
|
|
```bash
|
|
# Voir les logs
|
|
docker-compose logs -f
|
|
|
|
# Logs d'un service spécifique
|
|
docker-compose logs -f backend
|
|
docker-compose logs -f frontend
|
|
|
|
# Reconstruire un service
|
|
docker-compose build backend
|
|
docker-compose build frontend
|
|
|
|
# Exécuter une commande dans un conteneur
|
|
docker-compose exec backend python -m pytest
|
|
docker-compose exec frontend npm test
|
|
|
|
# Voir l'état des services
|
|
docker-compose ps
|
|
|
|
# Redémarrer un service
|
|
docker-compose restart backend
|
|
docker-compose restart frontend
|
|
```
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Le frontend ne peut pas se connecter au backend
|
|
|
|
Vérifiez que:
|
|
1. Le backend est en cours d'exécution: `docker-compose ps`
|
|
2. Le healthcheck du backend est OK: `docker-compose logs backend`
|
|
3. Les deux services sont sur le même réseau Docker
|
|
|
|
### Erreur de build frontend
|
|
|
|
```bash
|
|
# Nettoyer le cache et rebuild
|
|
docker-compose build --no-cache frontend
|
|
```
|
|
|
|
### Erreur de permissions
|
|
|
|
```bash
|
|
# Sur Linux/Mac, ajuster les permissions
|
|
sudo chown -R $USER:$USER Frontend/.next
|
|
```
|
|
|
|
## 📚 Structure des Fichiers
|
|
|
|
```
|
|
.
|
|
├── docker-compose.yml # Configuration production
|
|
├── docker-compose.dev.yml # Override pour développement
|
|
├── Dockerfile # Backend Dockerfile
|
|
├── Frontend/
|
|
│ ├── Dockerfile # Frontend Dockerfile
|
|
│ ├── .dockerignore
|
|
│ └── next.config.js
|
|
├── app/ # Code backend
|
|
└── README-DOCKER.md # Ce fichier
|
|
```
|
|
|
|
## 🔒 Production Deployment
|
|
|
|
Pour un déploiement en production:
|
|
|
|
1. **Désactiver le mode debug**:
|
|
- Retirer `--reload` du backend
|
|
- Utiliser `NODE_ENV=production`
|
|
|
|
2. **Utiliser des secrets**:
|
|
```yaml
|
|
environment:
|
|
- DATABASE_URL=${DATABASE_URL}
|
|
```
|
|
|
|
3. **Configurer un reverse proxy** (Nginx/Traefik)
|
|
|
|
4. **Ajouter SSL/TLS** avec Let's Encrypt
|
|
|
|
## 📄 License
|
|
|
|
MIT
|