veza/MAKEFILE_GUIDE.md

305 lines
6.4 KiB
Markdown
Raw Normal View History

# Veza Makefile Guide
Ce Makefile fournit une interface complète pour gérer le projet Veza avec support Docker et Incus (LXD).
## Organisation des Commandes
Les commandes sont organisées en trois niveaux :
### 🔴 HIGH LEVEL - Commandes de haut niveau
Commandes simples pour les tâches courantes :
- `make setup` - Initialisation complète du projet
- `make stop-all` - Arrêter tous les services
- `make restart-all` - Redémarrer tous les services
- `make clean` - Nettoyer les artefacts de build
- `make deploy-docker` - Déployer avec Docker + HAProxy
- `make deploy-incus` - Déployer avec Incus containers
- `make status-full` - Afficher le statut complet du système
### 🔵 INTERMEDIATE - Commandes intermédiaires
Commandes plus précises pour gérer des services individuels :
- `make start-service SERVICE=backend-api` - Démarrer un service
- `make stop-service SERVICE=backend-api` - Arrêter un service
- `make restart-service SERVICE=backend-api` - Redémarrer un service
- `make logs-service SERVICE=backend-api` - Voir les logs d'un service
- `make build-service SERVICE=backend-api` - Builder un service
- `make build-all` - Builder tous les services
- `make infra-up` - Démarrer l'infrastructure (Postgres, Redis, RabbitMQ)
- `make db-migrate` - Exécuter les migrations de base de données
- `make db-shell` - Accéder au shell Postgres
- `make redis-shell` - Accéder au shell Redis
### 🟣 LOW LEVEL / DEBUG - Commandes de bas niveau
Commandes pour le développement et le debug :
- `make check-tools` - Vérifier les outils requis
- `make install-tools` - Installer les outils de développement
- `make install-deps` - Installer les dépendances
- `make check-ports` - Vérifier la disponibilité des ports
- `make incus-setup-network` - Configurer le réseau Incus
- `make incus-deploy-service SERVICE=backend-api` - Déployer un service sur Incus
- `make incus-logs SERVICE=backend-api` - Voir les logs Incus
## Déploiement Docker
### Déploiement complet avec HAProxy
```bash
# Builder et déployer tous les services
make deploy-docker
```
Cela va :
1. Builder toutes les images Docker
2. Démarrer tous les services (infrastructure + applications)
3. Configurer HAProxy comme reverse proxy
4. Attendre que tous les services soient prêts
Accès :
- Frontend : http://localhost:80
- API : http://localhost:80/api/v1
- WebSocket Chat : ws://localhost:80/ws
- WebSocket Stream : ws://localhost:80/stream
- HAProxy Stats : http://localhost:8404/stats
### Gestion des services individuels
```bash
# Démarrer un service
make start-service SERVICE=backend-api
# Arrêter un service
make stop-service SERVICE=backend-api
# Redémarrer un service
make restart-service SERVICE=backend-api
# Voir les logs
make logs-service SERVICE=backend-api
```
## Déploiement Incus (LXD)
### Prérequis
```bash
# Installer Incus
sudo snap install incus
# Initialiser Incus (première fois)
sudo incus admin init
```
### Déploiement complet
```bash
# Déployer tous les services avec Incus
make deploy-incus
```
Cela va :
1. Créer le réseau Incus `veza-network`
2. Créer le profil `veza-profile`
3. Déployer chaque service dans un container Incus séparé
4. Installer Docker dans chaque container
### Gestion des containers Incus
```bash
# Voir les logs d'un container
make incus-logs SERVICE=backend-api
# Arrêter tous les containers
make incus-stop-all
# Déployer un service spécifique
make incus-deploy-service SERVICE=backend-api
```
## Architecture
### Services
- **backend-api** : API Go (port 8080)
- **chat-server** : Serveur Chat Rust (port 3000)
- **stream-server** : Serveur Stream Rust (port 3001)
- **web** : Frontend React/Vite (port 5173)
- **haproxy** : Reverse Proxy (port 80)
### Infrastructure
- **postgres** : Base de données PostgreSQL (port 5432)
- **redis** : Cache Redis (port 6379)
- **rabbitmq** : Message broker RabbitMQ (ports 5672, 15672)
### Réseau
Tous les services communiquent via le réseau Docker `veza-network` (172.20.0.0/16).
## Développement Local
### Démarrer l'environnement de développement
```bash
# Démarrer tout (détecte automatiquement les outils de hot reload)
make dev
# Démarrer seulement les backends
make dev-backend
```
Le Makefile détecte automatiquement :
- `air` pour le hot reload Go
- `cargo-watch` pour le hot reload Rust
- Utilise le mode standard si les outils ne sont pas disponibles
### Arrêter les services locaux
```bash
# Arrêter tous les processus locaux
make stop-local-services
```
## Maintenance
### Nettoyage
```bash
# Nettoyer les artefacts de build
make clean
# Nettoyage complet (demande confirmation)
make clean-deep
```
### Statut
```bash
# Statut simple
make status
# Statut complet (Docker + Local + Incus)
make status-full
```
### Tests
```bash
# Exécuter tous les tests
make test
# Linter le code
make lint
# Formater le code
make fmt
```
## Configuration
Les variables d'environnement peuvent être définies dans un fichier `.env` :
```bash
# Database
DB_USER=veza
DB_PASS=password
DB_NAME=veza
# Ports
PORT_GO=8080
PORT_CHAT=3000
PORT_STREAM=3001
PORT_WEB=5173
PORT_HAPROXY=80
# JWT Secret (CHANGEZ EN PRODUCTION!)
JWT_SECRET=your-secret-key-minimum-32-characters
# CORS
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
```
## Troubleshooting
### Ports occupés
```bash
# Vérifier les ports
make check-ports
```
### Services ne démarrent pas
```bash
# Vérifier les logs
make logs-service SERVICE=backend-api
# Vérifier le statut
make status-full
```
### Problèmes avec Incus
```bash
# Vérifier que Incus est installé
incus version
# Vérifier les containers
incus list
# Voir les logs d'un container
make incus-logs SERVICE=backend-api
```
## Exemples d'utilisation
### Scénario 1 : Développement local
```bash
# Setup initial
make setup
# Démarrer l'infrastructure
make infra-up
# Démarrer les services en mode dev
make dev
```
### Scénario 2 : Déploiement Docker
```bash
# Builder et déployer
make deploy-docker
# Vérifier le statut
make status-full
# Voir les logs d'un service
make logs-service SERVICE=backend-api
```
### Scénario 3 : Déploiement Incus
```bash
# Setup Incus
sudo snap install incus
sudo incus admin init
# Déployer
make deploy-incus
# Vérifier
make status-full
```
### Scénario 4 : Maintenance
```bash
# Redémarrer un service spécifique
make restart-service SERVICE=backend-api
# Rebuilder un service
make build-service SERVICE=backend-api
make restart-service SERVICE=backend-api
```