Rendre le compose deployable depuis le depot
env_file rendait obligatoire un fichier non versionne : un clone neuf, ou une stack Portainer construite depuis Git, echouait avec "env file .env not found". La declaration etait de toute facon redondante, Compose lisant deja un .env voisin pour resoudre les interpolations, et toutes les variables du .env.example etant couvertes par environment: ou ports:. Verifie : configuration resolue identique avec un .env present, a l'exception de APP_PORT qui n'est plus injecte dans le conteneur. C'est une variable cote hote, que le backend ne lit jamais et dont le port est fige dans le CMD. Documente le deploiement par stack Portainer : variables d'environnement en remplacement du .env, emplacement et proprietaire du dossier de donnees (uid 10001), mise a jour, administration par la console, et cas du proxy en Docker. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
107
README.md
107
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/<id-de-la-stack>/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
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user