diff --git a/README.md b/README.md index 6c6f07a..4d31fc5 100644 --- a/README.md +++ b/README.md @@ -424,6 +424,113 @@ identifier une ligne, insuffisant pour ouvrir le lien. --- +## Deploiement avec Portainer + +OpenMind se deploie comme une **stack** Portainer construite directement depuis +le depot Git. Aucun registre d'images n'est necessaire : Portainer clone le +depot et lance le build multi-etapes. + +### 1. Creer la stack + +*Stacks* -> *Add stack* -> onglet **Repository** : + +| Champ | Valeur | +|---|---| +| Name | `openmind` | +| Repository URL | l'URL de clone du depot | +| Repository reference | `refs/heads/main` | +| Compose path | `docker-compose.yml` | +| Authentication | uniquement si le depot est prive | + +Le premier deploiement compile le frontend puis l'image Python : comptez +plusieurs minutes. Les suivants reutilisent le cache de build. + +### 2. Renseigner les variables + +Le fichier `.env` n'est **pas** dans le depot : c'est normal, il contient la +configuration de votre instance. Utilisez la section **Environment variables** +de la stack, qui joue exactement le meme role. Toutes les variables ont une +valeur par defaut : ne declarez que ce que vous changez. + +Pour une instance publique derriere un reverse proxy : + +| Variable | Valeur | +|---|---| +| `APP_BIND` | `127.0.0.1` si le proxy tourne sur l'hote | +| `TRUST_PROXY_HEADERS` | `true` | +| `TRUSTED_PROXY_CIDRS` | le reseau d'ou arrivent les connexions du proxy | +| `DEFAULT_SHARE_EXPIRY_DAYS` | `30` | +| `MAX_SHARED_MAPS` | `10000` | + +Rappel : `TRUST_PROXY_HEADERS=true` sans `TRUSTED_PROXY_CIDRS` **empeche le +demarrage**, volontairement. Si la stack ne demarre pas, la raison est dans les +logs du conteneur, en clair. + +### 3. Le dossier de donnees + +Le compose monte `./data` a cote du fichier compose, c'est-a-dire dans le +repertoire de la stack cree par Portainer, typiquement : + +``` +/var/lib/docker/volumes/portainer_data/_data/compose//data/ +``` + +Ce dossier contient `openmind.db` et vos sauvegardes : **c'est lui qu'il faut +sauvegarder**. Si vous preferez un emplacement stable et explicite, remplacez la +ligne de volume par un chemin absolu de l'hote : + +```yaml + volumes: + - /srv/openmind/data:/app/data +``` + +Le conteneur tourne sous l'uid **10001**. Si vous creez le dossier vous-meme, +donnez-lui le bon proprietaire, sinon SQLite ne pourra pas ecrire : + +```bash +sudo mkdir -p /srv/openmind/data +sudo chown -R 10001:10001 /srv/openmind/data +``` + +### 4. Mettre a jour + +*Stacks* -> `openmind` -> **Pull and redeploy**, en cochant *Re-pull image and +redeploy* pour reconstruire. Les migrations de schema s'appliquent seules au +demarrage ; les partages existants sont conserves. + +### 5. Administration + +Portainer donne acces a la console du conteneur (*Containers* -> `openmind` -> +*Console*, commande `/bin/sh`). Toutes les commandes d'administration y +fonctionnent telles quelles : + +```bash +python -m app.cli stats +python -m app.cli shares purge-expired --dry-run +python -m app.cli backup /app/data/backups/openmind.db --yes --keep 7 +``` + +Pour automatiser sauvegarde et purge, gardez cron ou un timer systemd sur +l'hote : `docker exec openmind python -m app.cli ...`. + +### Si le proxy tourne aussi dans Docker + +Retirez la publication de port et placez les deux conteneurs sur un reseau +commun. Dans Portainer, ajoutez ces lignes a la stack : + +```yaml +services: + openmind: + ports: !reset [] + networks: [proxy] + +networks: + proxy: + external: true +``` + +--- + ## Deploiement derriere un reverse proxy Le conteneur ecoute simplement sur `8080` en HTTP. Le TLS est termine par le diff --git a/docker-compose.yml b/docker-compose.yml index 674e076..a0c4b68 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,8 +6,10 @@ services: image: openmind:latest container_name: openmind restart: unless-stopped - env_file: - - .env + # Pas de `env_file` : Compose lit deja automatiquement un fichier .env place + # a cote de ce compose pour resoudre les ${...} ci-dessous. Le declarer + # explicitement rendrait ce fichier obligatoire, et un deploiement depuis le + # depot (Portainer, clone neuf) echouerait, .env n'etant pas versionne. environment: # Le conteneur ecoute toujours sur 8080 ; APP_PORT ne change que l'hote. APP_NAME: ${APP_NAME:-OpenMind}