Files
openmind/docker-compose.yml
snoopy 55e5b359a1 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>
2026-09-10 11:08:30 +02:00

47 lines
2.0 KiB
YAML

services:
openmind:
build:
context: .
dockerfile: Dockerfile
image: openmind:latest
container_name: openmind
restart: unless-stopped
# 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}
DATABASE_URL: ${DATABASE_URL:-sqlite:////app/data/openmind.db}
MAX_MAP_SIZE_MB: ${MAX_MAP_SIZE_MB:-10}
MAX_NODES: ${MAX_NODES:-5000}
SHARING_ENABLED: ${SHARING_ENABLED:-true}
SHARE_CREATE_RATE_LIMIT: ${SHARE_CREATE_RATE_LIMIT:-10/hour}
SHARE_READ_RATE_LIMIT: ${SHARE_READ_RATE_LIMIT:-120/minute}
SHARE_WRITE_RATE_LIMIT: ${SHARE_WRITE_RATE_LIMIT:-60/hour}
MAX_SHARED_MAPS: ${MAX_SHARED_MAPS:-10000}
MAX_SHARE_SIZE_MB: ${MAX_SHARE_SIZE_MB:-0}
DEFAULT_SHARE_EXPIRY_DAYS: ${DEFAULT_SHARE_EXPIRY_DAYS:-30}
ALLOW_PERMANENT_SHARES: ${ALLOW_PERMANENT_SHARES:-true}
TRUST_PROXY_HEADERS: ${TRUST_PROXY_HEADERS:-false}
TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-}
CORS_ORIGINS: ${CORS_ORIGINS:-}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
STATIC_DIR: /app/static
# En developpement, le port est publie sur toutes les interfaces.
# En production derriere un reverse proxy, restreignez-le a la boucle locale
# en posant APP_BIND=127.0.0.1 dans .env : le service n'est alors joignable
# que par le proxy, jamais directement depuis l'exterieur.
ports:
- "${APP_BIND:-0.0.0.0}:${APP_PORT:-8080}:8080"
volumes:
# Bind mount explicite : les partages SQLite restent accessibles sur l'hote.
- ./data:/app/data
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8080/api/health"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3