Add "Installation"

tarzzan 2026-05-20 03:04:17 +00:00
parent a8ca1e78ab
commit 025a5d6423

284
Installation.md Normal file

@ -0,0 +1,284 @@
# 🚀 Installation et Déploiement
> Guide de démarrage rapide, configuration et déploiement en production.
---
## Prérequis
| Outil | Version | Usage |
|:------|:--------|:------|
| **Node.js** | 18+ | Runtime JavaScript |
| **pnpm** | 8+ | Gestionnaire de paquets |
| **MySQL** | 8+ (ou TiDB) | Base de données |
| **Git** | 2+ | Gestion de version |
---
## Démarrage Rapide
### 1. Cloner le Dépôt
```bash
git clone https://git.cosmolan.fr/tarzzan/queue-med.git
cd queue-med
```
### 2. Installer les Dépendances
```bash
pnpm install
```
### 3. Configurer l'Environnement
Les variables d'environnement sont injectées automatiquement par la plateforme Manus. Pour un développement local, créez un fichier `.env` :
```env
# Base de données
DATABASE_URL=mysql://user:password@localhost:3306/queuemed
# Auth
JWT_SECRET=your-secret-key-here
VITE_APP_ID=your-manus-app-id
OAUTH_SERVER_URL=https://api.manus.im
VITE_OAUTH_PORTAL_URL=https://manus.im/app-auth
# Stripe (optionnel)
STRIPE_SECRET_KEY=sk_test_...
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
```
### 4. Initialiser la Base de Données
```bash
pnpm db:push
```
### 5. Lancer le Serveur
```bash
pnpm dev
```
Le serveur démarre sur `http://localhost:3000`.
---
## Structure des Commandes
| Commande | Description |
|:---------|:------------|
| `pnpm dev` | Serveur de développement (hot reload) |
| `pnpm build` | Build de production |
| `pnpm start` | Démarrer en production |
| `pnpm test` | Exécuter les tests Vitest |
| `pnpm db:push` | Appliquer les migrations Drizzle |
| `npx tsc --noEmit` | Vérifier les types TypeScript |
| `npx drizzle-kit generate` | Générer une migration |
---
## Déploiement Docker
### Dockerfile
```dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["node", "dist/server/index.js"]
```
### Docker Compose
```yaml
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=mysql://queuemed:password@db:3306/queuemed
- JWT_SECRET=${JWT_SECRET}
- NODE_ENV=production
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: queuemed
MYSQL_USER: queuemed
MYSQL_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
mysql_data:
```
### Lancement
```bash
# Démarrer les services
docker compose up -d
# Appliquer les migrations
docker compose exec app pnpm db:push
# Voir les logs
docker compose logs -f app
```
---
## Déploiement Manus (Recommandé)
QueueMed est conçu pour être déployé sur **Manus Hosting** :
```
┌─────────────────────────────────────────────────────────────────┐
│ │
│ DÉPLOIEMENT MANUS │
│ │
│ 1. Créer un checkpoint (webdev_save_checkpoint) │
│ 2. Cliquer "Publish" dans le panneau de gestion │
│ 3. Configurer le domaine personnalisé (optionnel) │
│ │
│ Inclus automatiquement : │
│ ✅ HTTPS / SSL │
│ ✅ CDN global │
│ ✅ Base de données MySQL │
│ ✅ Variables d'environnement │
│ ✅ Domaine .manus.space │
│ ✅ Scaling automatique │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## Configuration Avancée
### Variables d'Environnement
| Variable | Obligatoire | Description |
|:---------|:-----------:|:------------|
| `DATABASE_URL` | ✅ | Connexion MySQL/TiDB |
| `JWT_SECRET` | ✅ | Secret pour signer les sessions |
| `VITE_APP_ID` | ✅ | ID application Manus OAuth |
| `OAUTH_SERVER_URL` | ✅ | URL backend OAuth |
| `VITE_OAUTH_PORTAL_URL` | ✅ | URL portail login |
| `OWNER_OPEN_ID` | ❌ | OpenID du propriétaire |
| `STRIPE_SECRET_KEY` | ❌ | Clé Stripe (paiements) |
| `VITE_STRIPE_PUBLISHABLE_KEY` | ❌ | Clé publique Stripe |
| `STRIPE_WEBHOOK_SECRET` | ❌ | Secret webhook Stripe |
### Ports
| Service | Port | Description |
|:--------|:-----|:------------|
| Express + Socket.io | 3000 | Serveur principal (HTTP + WS) |
| MySQL | 3306 | Base de données |
| Vite (dev) | 5173 | Frontend dev server (dev uniquement) |
---
## Dépannage
| Problème | Solution |
|:---------|:---------|
| `ECONNREFUSED` MySQL | Vérifier que MySQL est démarré et accessible |
| `JWT_SECRET undefined` | Configurer la variable d'environnement |
| Socket.io déconnecté | Vérifier que le port 3000 est accessible (pas de proxy bloquant WS) |
| QR code ne s'affiche pas | Vérifier que le package `qrcode` est installé |
| Tests échouent | Exécuter `pnpm install` puis `pnpm test` |
| Build échoue | Vérifier `npx tsc --noEmit` pour les erreurs de types |
| File ne se met pas à jour | Vérifier la connexion WebSocket (indicateur vert) |
---
## Tests
### Exécution
```bash
# Tous les tests
pnpm test
# Avec couverture
pnpm test -- --coverage
# Un fichier spécifique
pnpm test -- server/onboarding.test.ts
```
### Résultats Actuels
```
✓ server/auth.logout.test.ts (2 tests)
✓ server/onboarding.test.ts (6 tests)
✓ server/queue.test.ts (5 tests)
Test Files 3 passed (3)
Tests 13 passed (13)
Duration 1.2s
```
---
## Monitoring
### Logs Applicatifs
```bash
# Logs serveur
tail -f .manus-logs/devserver.log
# Logs console navigateur
tail -f .manus-logs/browserConsole.log
# Requêtes réseau
tail -f .manus-logs/networkRequests.log
```
### Santé du Serveur
| Endpoint | Description |
|:---------|:------------|
| `GET /` | Landing page (vérifie le frontend) |
| `GET /api/trpc/auth.me` | Vérifie le backend + DB |
| WebSocket `connect` | Vérifie Socket.io |
---
<div align="center">
**[[Home]] | [[Architecture-Technique]] | [[Roadmap]]**
</div>