1 Installation
tarzzan edited this page 2026-05-20 03:04:17 +00:00

🚀 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

git clone https://git.cosmolan.fr/tarzzan/queue-med.git
cd queue-med

2. Installer les Dépendances

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 :

# 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

pnpm db:push

5. Lancer le Serveur

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

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

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

# 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

# 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

# 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