docs: update CLAUDE.md with CI/CD lessons, update README deployment section
All checks were successful
Deploy Bot on NAS / deploy (push) Successful in 28s

This commit is contained in:
Elewyn 2026-04-30 16:46:57 +02:00
parent 66cabe2fec
commit 0c46ef5a81
2 changed files with 39 additions and 37 deletions

View file

@ -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)

View file

@ -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