# Environnement Réel Unifié - Veza Ce document décrit la procédure pour mettre en place un environnement de développement **réel, stable et unifié** pour l'ensemble des services Veza (Backend Go, Chat Server Rust, Stream Server Rust). ## 1. Synthèse de l'Analyse L'analyse du code source a révélé les dépendances suivantes pour chaque service : | Service | PostgreSQL | Redis | MinIO/S3 | RabbitMQ | Ports | Notes | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | **`veza-backend-api`** | ✅ Requis (`DATABASE_URL`) | ✅ Requis (`REDIS_URL`) | ✅ Requis (`USE_S3=true`) | ✅ Requis (`RABBITMQ_URL`) | `8080` (API) | Service central, gère le stockage S3. | | **`veza-chat-server`** | ✅ Requis (`DATABASE_URL`) | ⚠️ Optionnel (`REDIS_URL`) | ❌ Non utilisé directement | ✅ Requis (`RABBITMQ_URL`) | `8081` (WebSocket) | Utilise Postgres pour users/messages. RabbitMQ pour événements. | | **`veza-stream-server`** | ✅ Requis (`DATABASE_URL`) | ⚠️ Optionnel (`REDIS_URL`) | ❌ Utilise `audio_dir` | ✅ Requis (`RABBITMQ_URL`) | `3002` (Stream) | Port par défaut 3002 (et non 8082). Utilise `sqlx`. | **Conclusion** : Un environnement unifié avec PostgreSQL, Redis, MinIO (pour le backend) et RabbitMQ est nécessaire pour valider l'ensemble du système. --- ## 2. Configuration Unifiée (.env.lab) Copiez ce contenu dans un fichier `.env.lab` à la racine du projet. ```bash # ========================================== # VEZA LAB ENVIRONMENT - UNIFIED CONFIG # ========================================== # Usage: source .env.lab # ou docker run --env-file .env.lab ... # 1. CORE VARIABLES APP_ENV=development ENVIRONMENT=development # Secrets (Pour environnement LAB uniquement) JWT_SECRET=veza_lab_secret_key_minimum_32_chars_long_2025 SECRET_KEY=veza_lab_secret_key_minimum_32_chars_long_2025 # 2. DATABASES (POSTGRESQL) # DSN Unifié pour tous les services # Note: sslmode=disable est crucial pour le local VEZA_LAB_DSN=postgres://veza:veza_password@localhost:5432/veza_lab?sslmode=disable # Mapping Backend Go DATABASE_URL=${VEZA_LAB_DSN} VEZA_DATABASE_DSN=${VEZA_LAB_DSN} DB_HOST=localhost DB_PORT=5432 DB_USER=veza DB_PASSWORD=veza_password DB_NAME=veza_lab # Mapping Chat Server & Stream Server (Rust) # Ils utilisent directement DATABASE_URL définie ci-dessus # 3. REDIS REDIS_URL=redis://localhost:6379/0 # 4. OBJECT STORAGE (MINIO) USE_S3=true S3_ENDPOINT=http://localhost:9000 S3_ACCESS_KEY=veza_minio S3_SECRET_KEY=veza_minio_password S3_BUCKET=veza-bucket S3_REGION=us-east-1 S3_FORCE_PATH_STYLE=true # 5. MESSAGE BROKER (RABBITMQ) RABBITMQ_URL=amqp://guest:guest@localhost:5672/ RABBITMQ_ENABLE=true # 6. PORTS APP_PORT=8080 CHAT_SERVER_PORT=8081 STREAM_PORT=3002 # 7. LOGGING LOG_LEVEL=info RUST_LOG=info,sqlx=warn ``` --- ## 3. Commandes de Démarrage (Infrastructure) Lancez ces commandes pour démarrer l'infrastructure réelle (sans mocks). ### 🟦 PostgreSQL 15 ```bash # Lancer PostgreSQL docker run -d --name veza-postgres \ -e POSTGRES_USER=veza \ -e POSTGRES_PASSWORD=veza_password \ -e POSTGRES_DB=veza_lab \ -p 5432:5432 \ postgres:15-alpine # Attendre que la base soit prête (optionnel, ou juste attendre 5s) sleep 5 ``` ### 🟥 Redis ```bash # Lancer Redis docker run -d --name veza-redis \ -p 6379:6379 \ redis:7-alpine ``` ### 🟧 MinIO (Compatible S3) ```bash # Lancer MinIO docker run -d --name veza-minio \ -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=veza_minio \ -e MINIO_ROOT_PASSWORD=veza_minio_password \ minio/minio server /data --console-address ":9001" # Créer le bucket (nécessite le client mc ou via l'interface web http://localhost:9001) # Commande via docker one-off : docker run --rm --entrypoint sh minio/mc -c "\ mc alias set myminio http://host.docker.internal:9000 veza_minio veza_minio_password && \ mc mb myminio/veza-bucket && \ mc anonymous set public myminio/veza-bucket" ``` *Note: Si `host.docker.internal` ne fonctionne pas sous Linux, utilisez l'IP locale ou `--network host` pour le client mc.* ### 🟩 RabbitMQ ```bash # Lancer RabbitMQ avec Management Plugin docker run -d --name veza-rabbitmq \ -p 5672:5672 -p 15672:15672 \ rabbitmq:3-management-alpine ``` --- ## 4. Validation et Initialisation Une fois les conteneurs lancés, validez l'environnement et jouez les migrations. ### Test de connexion PostgreSQL ```bash # Chargez les variables set -a; source .env.lab; set +a # Test simple psql "$VEZA_LAB_DSN" -c "SELECT NOW() as connection_success;" ``` ### Migrations **1. Backend Go (Initialisation du schéma principal)** ```bash cd veza-backend-api # Utiliser le script de migration ou go run # Exemple (adapter selon scripts disponibles): export DATABASE_URL=$VEZA_LAB_DSN go run cmd/migrate/main.go up # OU si vous utilisez un outil externe comme migrate: # migrate -database "$VEZA_LAB_DSN" -path migrations up ``` **2. Chat Server (Rust SQLx)** ```bash cd veza-chat-server export DATABASE_URL=$VEZA_LAB_DSN # Vérifier la validité des requêtes SQLx cargo sqlx prepare --check --workspace # Jouer les migrations (si dossier migrations présent) cargo sqlx migrate run ``` **3. Stream Server (Rust SQLx)** ```bash cd veza-stream-server export DATABASE_URL=$VEZA_LAB_DSN # Jouer les migrations cargo sqlx migrate run ``` --- ## 5. Points de Vigilance pour les Audits 1. **Conflits de Schéma** : Les trois services partagent la **même base de données** (`veza_lab`). Assurez-vous que les noms de tables ne rentrent pas en conflit entre le backend Go et les services Rust (ex: table `users` gérée par qui ?). * *Risque* : Le backend Go et le Chat Server peuvent tous deux vouloir gérer la table `users`. Il faudra vérifier si le Chat Server doit lire la table `users` du backend ou s'il a sa propre table. 2. **Ports** : * Backend : 8080 * Chat : 8081 * Stream : 3002 (Attention : la config par défaut peut indiquer 3000 ou 8082, mais le code compile sur 3002). 3. **Réseau Docker** : Si vous lancez les services en local (hors Docker) et les DBs dans Docker, utilisez `localhost`. Si tout est dans Docker Compose, utilisez les noms de services (`veza-postgres`, etc.). Le fichier `.env.lab` ci-dessus est configuré pour une exécution des services sur la machine hôte (`localhost`).