From e8efff39f962a56dd6e575fd3a63b3763999f3fb Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Tue, 19 May 2026 21:53:10 +0200 Subject: [PATCH] =?UTF-8?q?structure=20compl=C3=A8te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 11 +++++++++++ .env.example | 30 ++++++++++++++++++++++++++++++ .gitignore | 8 ++++++++ Dockerfile | 18 ++++++++++++++++++ README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d114251 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.git +.gitignore +.env +.env.example +__pycache__/ +*.pyc +.venv/ +venv/ +.idea/ +data/ +sav_knowledge/ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..0fc8fa2 --- /dev/null +++ b/.env.example @@ -0,0 +1,30 @@ +# Bot Telegram terrain ETM — variables d'environnement. +# Copier en .env (jamais commite) et renseigner les valeurs. + +# --- Telegram --- +TELEGRAM_BOT_TOKEN= +# IDs des groupes Telegram (negatifs pour les groupes) +GROUPE_CHANTIER= +GROUPE_MAGASINIER= +# Groupe SAV : a creer sur Telegram, puis renseigner l'ID +GROUPE_SAV=0 +PATRICK_ID= + +# --- Nextcloud --- +NEXTCLOUD_URL=https://cloud.etm-schurig.eu/remote.php/webdav +NEXTCLOUD_USER= +# Mot de passe Nextcloud ou, de preference, un mot de passe d'application +NEXTCLOUD_PASSWORD= +NEXTCLOUD_DECK_URL=https://cloud.etm-schurig.eu/index.php/apps/deck/api/v1 +# Nextcloud Deck — recuperer les IDs via l'API ou l'interface Deck +DECK_BOARD_ID=0 +DECK_COL_FIN=0 +DECK_COL_SAV=0 +DECK_COL_MATERIEL=0 + +# --- Ollama (LLM) --- +OLLAMA_ENABLED=true +# ATTENTION : en conteneur, 'localhost' ne pointe PAS vers la VM. +# Renseigner l'adresse reelle d'Ollama (autre conteneur, hote, ou machine distante). +OLLAMA_URL= +OLLAMA_MODEL=phi3 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3470559 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.env +data/ +sav_knowledge/ +__pycache__/ +*.py[cod] +.venv/ +venv/ +.idea/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..551db6e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +# Bot Telegram terrain ETM — conteneur. +FROM python:3.12-slim + +WORKDIR /app + +# Si une dependance native echoue a s'installer (ex. chromadb / hnswlib), +# decommenter la ligne suivante : +# RUN apt-get update && apt-get install -y --no-install-recommends build-essential \ +# && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Code de l'application. +# data/ et sav_knowledge/ sont exclus (.dockerignore) : ce sont des volumes. +COPY . . + +CMD ["python", "main.py"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..c96da96 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# etm-terrain + +Bot Telegram terrain d'ETM-Schurig, conteneurisé : rapports des +techniciens, FAQ, SAV. Migré depuis le poste de développement. + +C'est l'**unique** processus qui écoute Telegram (un seul `getUpdates` +par token). Les autres composants de la VM (le scheduler) ne font +qu'**envoyer** des notifications. + +## Contenu du dépôt + +Le code de l'application — `main.py`, `config.py`, `handlers/`, +`services/`, `models/`, `scripts/`, `utils/` — vit ici, à la racine. + +Ce squelette fournit l'emballage Docker autour : + +- `Dockerfile` — construction de l'image +- `.dockerignore` — ce qui n'entre pas dans l'image +- `.env.example` — gabarit des variables d'environnement +- `.gitignore` + +## Données (volumes) + +Deux dossiers sont des volumes montés — **jamais** dans l'image, **jamais** +dans Git : + +- `data/` — index ChromaDB, base tickets, PDF source +- `sav_knowledge/` — index SAV + +Les PDF source (documentation Victron) se placent dans +`data/docs/Doc_8_Victron/` sur la VM. L'index ChromaDB se **reconstruit** +à partir d'eux (script de réindexation) — il n'a pas à être migré. + +## Lancement + +Ce dépôt n'a pas de `docker-compose` propre : le bot est démarré par le +compose chapeau du dépôt `etm-infra`. Voir `etm-infra/README.md`. + +## À savoir + +- **Ollama** : en conteneur, `localhost` ne pointe pas vers la VM. + Renseigner `OLLAMA_URL` avec l'adresse réelle d'Ollama dans le `.env`. +- Le `.env` est injecté par le compose chapeau (`env_file`) ; les + variables sont donc disponibles même sans fichier `.env` dans l'image.