Déploiement avec Docker
Mindwtr fournit une prise en charge officielle de Docker pour exécuter :
- mindwtr-app : la version web de bureau/PWA, servie par Nginx.
- mindwtr-cloud : le serveur léger de synchronisation et l’API REST d’automatisation des tâches.
Ces composants sont disponibles sous forme d’images Docker et peuvent être facilement orchestrés avec Docker Compose.
Démarrage rapide (Docker Compose)
La manière la plus simple de démarrer localement consiste à utiliser le fichier compose.yaml inclus dans le répertoire docker/ du dépôt.
Clonez le dépôt (si ce n’est pas déjà fait) :
bashgit clone https://github.com/dongdongbh/Mindwtr.git cd MindwtrDéfinissez la configuration HTTP locale :
bashexport MINDWTR_CLOUD_AUTH_TOKENS=your_token_here export MINDWTR_CLOUD_CORS_ORIGIN=http://localhost:5173Démarrez les services :
bashdocker compose -f docker/compose.yaml up --build -dAccédez aux services :
- PWA (application web) : ouvrez
http://localhost:5173dans votre navigateur. - Contrôle d’intégrité du Cloud : ouvrez
http://localhost:8787/health. - URL auto-hébergée pour les tests locaux :
http://localhost:8787 - URL de base de l’API REST :
http://localhost:8787/v1
- PWA (application web) : ouvrez
Ce fichier Compose par défaut utilise uniquement HTTP et est destiné aux tests locaux ou privés. Les clients de bureau et mobiles Mindwtr n’acceptent HTTP que pour les cibles locales ou privées reconnues, comme localhost, 127.0.0.1, 10.x.x.x, 172.16.x.x à 172.31.x.x, 192.168.x.x, les adresses IPv6 de bouclage ou privées, *.local et *.home.arpa.
Pour les URL publiques, les noms DNS personnalisés, les noms d’hôte VPN, Tailscale, ZeroTier ou tout nom qui n’est pas reconnu comme local ou privé, utilisez HTTPS. Le réglage Autoriser les connexions non sécurisées (HTTP) est un réglage de compatibilité pour les points de terminaison locaux ou privés de confiance ; il ne permet pas d’utiliser HTTP publiquement.
Configuration HTTPS avec Caddy
Pour la synchronisation publique depuis un ordinateur ou un appareil mobile, utilisez le fichier Compose reposant sur Caddy :
cp docker/.env.https.example docker/.env.https.localModifiez docker/.env.https.local :
MINDWTR_CLOUD_DOMAIN=mindwtr.example.com
MINDWTR_CLOUD_AUTH_TOKENS=your_long_random_token
MINDWTR_CLOUD_CORS_ORIGIN=https://mindwtr.example.com
MINDWTR_CADDYFILE=Caddyfile.httpsDémarrez la pile :
docker compose --env-file docker/.env.https.local -f docker/compose.https.yaml up -dVérifiez le serveur :
curl https://mindwtr.example.com/healthDans Mindwtr, sous Réglages -> Synchronisation -> Auto-hébergé, définissez l’URL auto-hébergée sur :
https://mindwtr.example.comMindwtr ajoutera automatiquement /v1/data.
HTTPS public
Utilisez Caddyfile.https lorsque MINDWTR_CLOUD_DOMAIN est un nom DNS public qui pointe vers cet hôte Docker. Les ports 80 et 443 doivent être accessibles pour l’émission automatique du certificat. Caddy obtient le certificat, le renouvelle et transmet les requêtes à mindwtr-cloud par proxy inverse.
HTTPS sur réseau local uniquement
Utilisez Caddyfile.local-https lorsque le nom d’hôte n’est résolu que sur votre réseau domestique :
MINDWTR_CLOUD_DOMAIN=mindwtr.home.arpa
MINDWTR_CLOUD_CORS_ORIGIN=https://mindwtr.home.arpa
MINDWTR_CADDYFILE=Caddyfile.local-httpsCette configuration utilise l’autorité de certification interne de Caddy. Chaque appareil client doit faire confiance au certificat racine local de Caddy avant que Mindwtr n’accepte la connexion HTTPS. Les certificats publics Let’s Encrypt sont l’option la plus fiable pour les clients mobiles.
Après le démarrage de la pile réservée au réseau local, exportez le certificat racine local de Caddy :
docker compose --env-file docker/.env.https.local -f docker/compose.https.yaml cp caddy:/data/caddy/pki/authorities/local/root.crt ./mindwtr-caddy-root.crtInstallez ce certificat comme racine de confiance sur chaque appareil qui se synchronisera avec ce nom d’hôte.
Configuration
Jeton de synchronisation
Le serveur Cloud exige un jeton pour l’authentification. Vous devez le définir dans les variables d’environnement.
Dans docker/compose.yaml (ou via une variable d’environnement), définissez :
MINDWTR_CLOUD_AUTH_TOKENS=your_token_hereMINDWTR_CLOUD_TOKEN reste accepté pour la rétrocompatibilité, mais il est obsolète.
Pour les secrets Docker, vous pouvez monter un fichier et le référencer à la place :
MINDWTR_CLOUD_AUTH_TOKENS_FILE: /run/secrets/mindwtr_cloud_tokensGénérer un jeton : Vous pouvez générer un jeton aléatoire robuste avec :
cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 50 | head -n 1Configuration du client
Pour connecter vos clients Mindwtr (bureau ou mobile) à ce Cloud auto-hébergé :
- Accédez à Réglages → Synchronisation.
- Sélectionnez Auto-hébergé (ou Cloud).
- Définissez l’URL auto-hébergée sur le point de terminaison de base de votre serveur :Mindwtr ajoutera automatiquement
http://localhost:8787/v1/dataà cette URL. - Saisissez le même jeton que celui configuré dans
MINDWTR_CLOUD_AUTH_TOKENS.
Pour HTTP sur un réseau local privé, utilisez une adresse locale ou privée telle que http://192.168.1.20:8787. Pour les URL publiques, utilisez la configuration HTTPS avec Caddy décrite ci-dessus.
Synchronisation Dropbox et PWA Docker
L’image Docker mindwtr-app sert la version navigateur/PWA. La synchronisation OAuth native avec Dropbox n’est pas disponible dans cet environnement d’exécution, car la connexion Dropbox est implémentée par les applications natives de bureau et mobiles. Ajouter VITE_DROPBOX_APP_KEY ou DROPBOX_APP_KEY via .env, env_file, l’environnement d’exécution Compose ou un argument de construction Docker n’activera pas Dropbox dans Docker.
Pour une synchronisation hébergée avec Docker, utilisez le serveur Cloud auto-hébergé fourni ou WebDAV. Si le point de terminaison auto-hébergé se trouve derrière Authelia ou un autre proxy SSO interactif, configurez le proxy pour que le chemin de synchronisation/API de Mindwtr utilise directement le jeton porteur de Mindwtr ; l’application mobile ne peut pas effectuer une connexion Authelia dans le navigateur devant /v1/data.
API d’automatisation des tâches
Le même conteneur mindwtr-cloud expose également l’API REST d’automatisation des tâches. Elle utilise la même URL de base et le même jeton porteur que la synchronisation.
Points de terminaison courants :
GET /v1/dataetPUT /v1/datapour la synchronisationGET /v1/tasksetPOST /v1/taskspour répertorier et créer des tâchesGET /v1/projectspour les projetsGET /v1/search?query=...pour rechercher des tâches et des projets
Exemple :
curl -X POST http://localhost:8787/v1/tasks \
-H "Authorization: Bearer your_token_here" \
-H "Content-Type: application/json" \
-d '{"input":"Review PR @work /due:tomorrow"}'Origine CORS (production)
Le serveur Cloud utilise par défaut http://localhost:5173 pour CORS. En production, définissez :
MINDWTR_CLOUD_CORS_ORIGIN=https://your-app-domain.examplePersistance des données
Pour protéger vos données Cloud lors des redémarrages des conteneurs, montez un volume pour le répertoire de données.
Dans votre compose.yaml :
volumes:
- ./data:/app/cloud_dataConstruction manuelle
Si vous préférez construire les images vous-même sans Compose :
Construire la PWA :
docker build -f docker/app/Dockerfile -t mindwtr-app .Construire le serveur Cloud :
docker build -f docker/cloud/Dockerfile -t mindwtr-cloud .GitHub Actions et GHCR
Le projet comprend un workflow GitHub Actions qui construit automatiquement les images et les publie dans le GitHub Container Registry (GHCR).
Images officielles :
ghcr.io/dongdongbh/mindwtr-app:latestghcr.io/dongdongbh/mindwtr-cloud:latest
Les versions préliminaires sont disponibles sous l’étiquette flottante beta, qui pointe toujours vers la version la plus récente (candidate ou stable), ou peuvent être épinglées par version, par exemple ghcr.io/dongdongbh/mindwtr-app:1.2.0-rc.1. latest reste toujours sur la version stable. Consultez Rejoindre les canaux bêta pour les autres plateformes.
Le fichier docker/compose.yaml est configuré pour utiliser ces images par défaut, ce qui permet de récupérer facilement la dernière version sans la construire localement.
Notes techniques
- Service de la PWA : l’application web utilise un rendu côté client. Le conteneur Nginx est configuré avec
try_filespour rediriger toutes les requêtes versindex.html, ce qui évite les erreurs 404 lors de l’actualisation d’une page. - Image de base : la construction utilise Bun (épinglé à la v1.3) et inclut les options C++20 requises pour
better-sqlite3.