# OVH Deployment Guide - RollerLogic

Ce document décrit la configuration initiale du serveur OVH et le workflow de déploiement automatisé via CI/CD.

Last updated: 2026-02-10

## 1) Infrastructure Summary

- **Server IP**: 51.75.55.185
- **SSH user**: taaazzz
- **SSH**: `ssh taaazzz@51.75.55.185`
- **Swarm network**: `traefik-public` (overlay, external)
- **Traefik**: HTTPS via Let's Encrypt (pré-configuré)
- **Architecture**: Docker Swarm multi-services (API, Admin, Maintenance)
- **Images Docker**:
  - `ghcr.io/taaazzz-prog/rollerlogic-api:vX.X.X`
  - `ghcr.io/taaazzz-prog/rollerlogic-admin:vX.X.X`
  - `ghcr.io/taaazzz-prog/rollerlogic-maintenance:vX.X.X`
- **Registry**: GitHub Container Registry (GHCR)

## 2) DNS Configuration

Records A pointant vers `51.75.55.185` :

- `rollerlogic.com` → 51.75.55.185
- `api.rollerlogic.com` → 51.75.55.185
- `admin.rollerlogic.com` → 51.75.55.185

Les domaines sont configurés via les labels Traefik dans [rollerlogic-stack.yml](rollerlogic-stack.yml).

## 3) CloudDB (MySQL/MariaDB)

**Connexion** :

- Host: `gb9434-001.eu.clouddb.ovh.net`
- Port: `35670`
- Database: `RollerLogic`
- User: `Taaazzz` (compte administrateur)
- Password: stocké dans Docker secret `rollerlogic_db_password`

### Déploiement initial du schéma

```bash
# Depuis votre machine locale
scp rollerlogic-api/src/schema.sql taaazzz@51.75.55.185:/tmp/

# Sur le serveur
ssh taaazzz@51.75.55.185
mysql -h gb9434-001.eu.clouddb.ovh.net -P 35670 -u Taaazzz -p RollerLogic < /tmp/schema.sql
rm /tmp/schema.sql
```

### Création d'un compte admin

```sql
-- Une fois un compte créé via l'app, le marquer admin :
UPDATE users SET is_admin = 1 WHERE email = 'admin@exemple.com';
```

## 4) SMTP Configuration (OVH)

**Paramètres SMTP** :

- Host: `ssl0.ovh.net`
- Port: `465`
- Secure: `true` (TLS implicite)
- User: `contact@taaazzz-prog.fr`
- From: `contact@taaazzz-prog.fr`
- Password: stocké dans Docker secret `smtp_pass_v2`

## 5) Docker Secrets (Configuration Initiale)

Créer les secrets Docker **une seule fois** sur le serveur :

```bash
ssh taaazzz@51.75.55.185

# Mot de passe base de données
echo "VOTRE_MOT_DE_PASSE_DB" | docker secret create rollerlogic_db_password -

# Secret JWT (généré aléatoirement)
openssl rand -base64 32 | docker secret create rollerlogic_jwt_secret -

# SMTP password (déjà créé)
# smtp_pass_v2

# Vérifier les secrets
docker secret ls
```

## 6) GitHub Container Registry (GHCR)

**Configuration requise** :

1. **Token GHCR** : Générer un Personal Access Token avec permissions `write:packages` et `read:packages`
2. **GitHub Secrets** (dans Settings → Secrets → Actions) :
   - `GITHUB_TOKEN` : auto-fourni par GitHub Actions
   - `GHCR_PAT` : votre Personal Access Token pour login GHCR sur OVH
   - `OVH_SSH_PRIVATE_KEY` : clé SSH privée pour connexion au serveur

**Login GHCR sur le serveur** (si besoin manuel) :

```bash
ssh taaazzz@51.75.55.185
echo "YOUR_GHCR_PAT" | docker login ghcr.io -u taaazzz-prog --password-stdin
```

---

## 7) Workflow de Déploiement (CI/CD Automatisé)

Le projet utilise **GitHub Actions** pour automatiser le build, push et déploiement. Voici le workflow complet :

### Étape 1 : Bump de version

```bash
# Depuis votre machine locale
cd d:\Jeu\RollerLogic

# Incrémenter la version (patch, minor ou major)
npm run version:bump:patch   # v1.3.70 → v1.3.71
# OU
npm run version:bump:minor   # v1.3.0 → v1.4.0
# OU
npm run version:bump:major   # v1.0.0 → v2.0.0
```

**Ce que fait le script** :

- Met à jour [version.json](../../version.json)
- Synchronise vers `rollerlogic-api/package.json`, `rollerlogic-mobile/package.json` et `admin/js/config.production.js`
- Affiche les commandes git à exécuter (ne les exécute pas automatiquement)

### Étape 2 : Commit et Push

```bash
# Commiter les changements de version
git add .
git commit -m "bump: v1.3.71"
git push
```

**⚠️ Le push déclenche automatiquement le workflow GitHub Actions** ([.github/workflows/cd.yml](.github/workflows/cd.yml))

### Étape 3 : CI/CD automatique (GitHub Actions)

Le workflow `cd.yml` s'exécute automatiquement :

1. **CI** : Tests et build des projets `rollerlogic-api` et `rollerlogic-mobile`
2. **Build & Push** (conditionnels - builds intelligents) :
   - 🔍 **Détection automatique** : Analyse les fichiers modifiés dans le commit
   - ✅ **API** (contient jeu + backend) : Build uniquement si changement dans `rollerlogic-api/`, `rollerlogic-mobile/` ou `Dockerfile`
   - ✅ **Admin Panel** : Build uniquement si changement dans `admin/`
   - ✅ **Maintenance** : Build uniquement si changement dans `maintenance/`
   - Tagge avec la version (ex: `v1.3.71`), le SHA commit et `latest`
   - Push vers GitHub Container Registry
3. **Deploy** :
   - Met à jour automatiquement `rollerlogic-stack.yml` avec les nouveaux tags
   - Copie le fichier sur le serveur OVH via SCP
   - Se connecte en SSH et exécute `docker stack deploy`
   - **Redémarre uniquement les services modifiés** (pas d'interruption des autres)
   - Vérifie le healthcheck

**💡 Builds intelligents** :

- Modification du jeu uniquement → Rebuild API seulement (~2 min)
- Modification du panel admin uniquement → Rebuild Admin seulement (~30 sec)
- Modification des deux → Rebuild API + Admin
- **Force rebuild** : Ajouter `[rebuild-all]` dans le message de commit pour tout rebuilder

**Exemples** :

```bash
# Rebuild seulement ce qui a changé (automatique)
git commit -m "fix(game): correct level 5 bug"
# → Build API uniquement

# Forcer le rebuild de tout (rare, utile après problème de cache)
git commit -m "chore: update dependencies [rebuild-all]"
# → Build API + Admin + Maintenance
```

**Suivi du déploiement** :

- GitHub Actions → onglet "Actions" du dépôt
- Durée totale : ~3-5 minutes

### Vérification post-déploiement

```bash
# Vérifier les services déployés
ssh taaazzz@51.75.55.185 "docker service ls | grep rollerlogic"

# Voir les logs
ssh taaazzz@51.75.55.185 "docker service logs -f rollerlogic_rollerlogic-api"

# Tester l'API
curl -I https://rollerlogic.com/api/health
curl https://api.rollerlogic.com/version
```

---

## 8) Déploiement Manuel (Fallback)

Si le CI/CD échoue ou pour un rollback rapide, utiliser le script PowerShell :

```powershell
# Depuis d:\Jeu\RollerLogic
.\scripts\deploy\deploy-to-production.ps1
```

Ce script effectue manuellement ce que fait le workflow CD : mise à jour du stack et déploiement.

---

## 9) Volumes et Assets

**Volumes persistants montés** :

- `/var/www/rollerlogic-api/private` → `/app/private` (avatars premium, ball-skins)

**Structure sur le serveur** :

```
/var/www/rollerlogic-api/private/
├── beta_testeur/          # Avatars beta testeurs
├── avatars/
│   └── cool/              # Pack "cool" (19 fichiers)
└── ball-skins/
    ├── elementaires/      # Skins élémentaires (10 fichiers)
    └── halloween/         # Skins Halloween (11 fichiers)
```

**Copie de nouveaux assets** :

```powershell
# Depuis Windows
scp -r d:\Jeu\RollerLogic\fichiers\nouveau-pack taaazzz@51.75.55.185:/var/www/rollerlogic-api/private/avatars/
```

---

## 10) Notes Importantes

- ✅ **Builds intelligents activés** : Seuls les services modifiés sont rebuildés et redéployés
  - Modification du jeu → Pas d'interruption du panel admin
  - Modification du panel admin → Pas de déconnexion des joueurs
  - Gain de temps : 30 sec au lieu de 3-5 min pour un changement isolé
- ✅ **Ne jamais éditer manuellement `rollerlogic-stack.yml`** : le workflow CD le met à jour automatiquement
- ✅ **Les secrets Docker sont persistants** : pas besoin de les recréer à chaque déploiement
- ✅ **Le workflow CD gère tout** : build, push, update stack, deploy
- ⚠️ **En cas d'échec GitHub Actions** : utiliser `scripts/deploy/deploy-to-production.ps1` en manuel
- 📝 **Format des versions** : Toujours préfixer avec `v` (ex: `v1.3.71`)
- 🔄 **Force rebuild** : Ajouter `[rebuild-all]` dans le message de commit si besoin de tout rebuilder

---

## 11) Troubleshooting

**Service ne démarre pas** :

```bash
docker service ps rollerlogic_rollerlogic-api --no-trunc
docker service logs rollerlogic_rollerlogic-api --tail 50
```

**Problème de connexion DB** :

```bash
# Tester la connexion depuis le serveur
mysql -h gb9434-001.eu.clouddb.ovh.net -P 35670 -u Taaazzz -p RollerLogic
```

**Rollback vers version précédente** :

```bash
# Modifier manuellement le tag dans rollerlogic-stack.yml puis redéployer
ssh taaazzz@51.75.55.185
cd /home/taaazzz/RollerLogic
nano rollerlogic-stack.yml  # Changer v1.3.71 → v1.3.70
docker stack deploy -c rollerlogic-stack.yml rollerlogic --with-registry-auth
```
