From 0c46ef5a81fffbf3f9f71039e810d88927d3ff07 Mon Sep 17 00:00:00 2001 From: Elewyn Date: Thu, 30 Apr 2026 16:46:57 +0200 Subject: [PATCH] docs: update CLAUDE.md with CI/CD lessons, update README deployment section --- CLAUDE.md | 23 +++++++++++++++++------ README.md | 53 ++++++++++++++++++++++------------------------------- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 5b516f9..99472cf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,13 +12,19 @@ Communauté RTF (3 clans : RTF, RTFC, RTFR). | `main` | Production | `/share/CACHEDEV1_DATA/discord-bot-prod` | | `dev` | Développement | `/share/CACHEDEV1_DATA/discord-bot-dev` | +`dev` est une branche permanente — ne jamais merger dans `main`. + ## Déploiement -CI/CD via Forgejo Actions → runner `vm-runner` (192.168.1.53) → rsync vers NAS QNAP (192.168.1.208). +CI/CD via Forgejo Actions → runner `vm-runner` (192.168.1.53, Alpine) → rsync vers NAS QNAP (192.168.1.208). Push sur `main` ou `dev` déclenche le déploiement automatique. -Secret requis dans Forgejo : `NAS_SSH_KEY` (clé privée ed25519 pour SSH Elewyn@NAS). +Secret requis dans Forgejo : `NAS_SSH_KEY` — **doit être encodé en base64** : +```bash +base64 -w 0 ~/.ssh/runner-nas +``` +Coller le résultat dans le secret (pas le contenu brut du fichier). ## Persistance des données (NE PAS écraser) @@ -56,8 +62,13 @@ docker-compose.yml # Déploiement container - **Chimera** : easy, normal, hard, brutal, nightmare, ultra - **CvC** : Clan vs Clan -## Pièges connus +## Pièges connus — CI/CD -- Le `.env` ne doit jamais être commité — il contient le token Discord -- `data/`, `screenshots/`, `logs/` sont gitignorés — données persistantes sur le NAS -- Le rsync exclut ces dossiers pour ne pas écraser les données en prod +- **NAS_SSH_KEY doit être en base64** — `echo "..." > fichier` dans Alpine sh casse les sauts de ligne de la clé brute +- **Runner tourne dans Alpine** — `actions/checkout@v4` ne fonctionne pas (pas de Node.js) → utiliser `git clone`; `rsync` et `openssh-client` doivent être installés via `apk add` +- **Chemin Docker sur QNAP** : `/share/CACHEDEV1_DATA/.qpkg/container-station/usr/bin/docker` — `docker` n'est pas dans le `$PATH` SSH +- **Pas de `--build`** — le code est monté en volume (`./:/app`), un simple redémarrage suffit +- **Pas de `container_name`** — les envs prod et dev partagent le même NAS, un nom hardcodé crée un conflit ; Docker Compose dérive le nom depuis le dossier +- **rsync exclut `__pycache__/`** — créés par Docker (root), l'user Elewyn ne peut pas les supprimer via rsync `--delete` +- **rsync exclut `.github/`** — vestige de l'ancien CI GitHub Actions, ne pas envoyer sur le NAS +- **Clé SSH workstation** : `~/.ssh/runner-nas` (ed25519, autorisée dans `~/.ssh/authorized_keys` sur le NAS pour l'user Elewyn) diff --git a/README.md b/README.md index aa55582..aadfefb 100644 --- a/README.md +++ b/README.md @@ -107,8 +107,6 @@ CMD ["python", "bot.py"] ### 4. Create `docker-compose.yml` ```yaml -version: '3.8' - services: discord-bot: build: . @@ -116,14 +114,12 @@ services: env_file: - .env volumes: + - ./:/app - ./screenshots:/app/screenshots - - ./bot_data.db:/app/bot_data.db + - ./data:/app/data - ./logs:/app/logs environment: - TZ=Europe/Paris - container_name: rtf-discord-bot - - # Optional: Resource limits deploy: resources: limits: @@ -163,36 +159,31 @@ Add Reactions URL : `https://discord.com/api/oauth2/authorize?client_id=YOUR_BOT_ID&permissions=378944&scope=bot` -## 🚀 Déploiement sur QNAP +## 🚀 Déploiement -### Via Container Station (Recommandé) +Le déploiement est automatisé via Forgejo Actions. -1. Install Container Station via App Center -2. Create /share/Container/discord-bot/ -3. Copy all files into this folder -4. Edit .env with your tokens -5. Container Station → "Create" → "Create Application via docker-compose" -6. Select your docker-compose.yml -7. Start the container +Un push sur `main` déploie en production, un push sur `dev` déploie en développement. -### Via SSH (Alternative) +### Prérequis (une seule fois) + +1. Créer le `.env` sur le NAS dans chaque `DEPLOY_PATH` : +```env +DISCORD_TOKEN=your_bot_token_here +AUTHORIZED_CHANNEL_ID=your_channel_id_here +``` + +2. Ajouter le secret `NAS_SSH_KEY` dans Forgejo (clé ed25519 encodée en base64) : +```bash +base64 -w 0 ~/.ssh/runner-nas +``` + +### Démarrage initial (première fois sur le NAS) ```bash -# Connect to QNAP -ssh admin@YOUR_QNAP_IP - -# Navigate to folder -cd /share/Container/discord-bot/ - -# Install dependencies (if Python is installed) -pip3 install -r requirements.txt - -# Test run -python3 bot.py - -# Create auto-start service via QNAP interface -# Control Panel → Applications → Autorun -# Add: cd /share/Container/discord-bot && python3 bot.py & +ssh Elewyn@192.168.1.208 +cd /share/CACHEDEV1_DATA/discord-bot-prod # ou discord-bot-dev +/share/CACHEDEV1_DATA/.qpkg/container-station/usr/bin/docker compose up -d ``` ## 📊 SQLite Database