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
All checks were successful
Deploy Bot on NAS / deploy (push) Successful in 28s
This commit is contained in:
parent
66cabe2fec
commit
0c46ef5a81
2 changed files with 39 additions and 37 deletions
23
CLAUDE.md
23
CLAUDE.md
|
|
@ -12,13 +12,19 @@ Communauté RTF (3 clans : RTF, RTFC, RTFR).
|
||||||
| `main` | Production | `/share/CACHEDEV1_DATA/discord-bot-prod` |
|
| `main` | Production | `/share/CACHEDEV1_DATA/discord-bot-prod` |
|
||||||
| `dev` | Développement | `/share/CACHEDEV1_DATA/discord-bot-dev` |
|
| `dev` | Développement | `/share/CACHEDEV1_DATA/discord-bot-dev` |
|
||||||
|
|
||||||
|
`dev` est une branche permanente — ne jamais merger dans `main`.
|
||||||
|
|
||||||
## Déploiement
|
## 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.
|
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)
|
## Persistance des données (NE PAS écraser)
|
||||||
|
|
||||||
|
|
@ -56,8 +62,13 @@ docker-compose.yml # Déploiement container
|
||||||
- **Chimera** : easy, normal, hard, brutal, nightmare, ultra
|
- **Chimera** : easy, normal, hard, brutal, nightmare, ultra
|
||||||
- **CvC** : Clan vs Clan
|
- **CvC** : Clan vs Clan
|
||||||
|
|
||||||
## Pièges connus
|
## Pièges connus — CI/CD
|
||||||
|
|
||||||
- Le `.env` ne doit jamais être commité — il contient le token Discord
|
- **NAS_SSH_KEY doit être en base64** — `echo "..." > fichier` dans Alpine sh casse les sauts de ligne de la clé brute
|
||||||
- `data/`, `screenshots/`, `logs/` sont gitignorés — données persistantes sur le NAS
|
- **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`
|
||||||
- Le rsync exclut ces dossiers pour ne pas écraser les données en prod
|
- **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)
|
||||||
|
|
|
||||||
53
README.md
53
README.md
|
|
@ -107,8 +107,6 @@ CMD ["python", "bot.py"]
|
||||||
|
|
||||||
### 4. Create `docker-compose.yml`
|
### 4. Create `docker-compose.yml`
|
||||||
```yaml
|
```yaml
|
||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
discord-bot:
|
discord-bot:
|
||||||
build: .
|
build: .
|
||||||
|
|
@ -116,14 +114,12 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
|
- ./:/app
|
||||||
- ./screenshots:/app/screenshots
|
- ./screenshots:/app/screenshots
|
||||||
- ./bot_data.db:/app/bot_data.db
|
- ./data:/app/data
|
||||||
- ./logs:/app/logs
|
- ./logs:/app/logs
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
container_name: rtf-discord-bot
|
|
||||||
|
|
||||||
# Optional: Resource limits
|
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
|
|
@ -163,36 +159,31 @@ Add Reactions
|
||||||
|
|
||||||
URL : `https://discord.com/api/oauth2/authorize?client_id=YOUR_BOT_ID&permissions=378944&scope=bot`
|
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
|
Un push sur `main` déploie en production, un push sur `dev` déploie en développement.
|
||||||
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
|
|
||||||
|
|
||||||
### 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
|
```bash
|
||||||
# Connect to QNAP
|
ssh Elewyn@192.168.1.208
|
||||||
ssh admin@YOUR_QNAP_IP
|
cd /share/CACHEDEV1_DATA/discord-bot-prod # ou discord-bot-dev
|
||||||
|
/share/CACHEDEV1_DATA/.qpkg/container-station/usr/bin/docker compose up -d
|
||||||
# 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 &
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 📊 SQLite Database
|
## 📊 SQLite Database
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue