Add "Installation"
parent
a8ca1e78ab
commit
025a5d6423
1 changed files with 284 additions and 0 deletions
284
Installation.md
Normal file
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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue