Dodock est un framework applicatif full-stack fondé sur les métadonnées. Il fournit tous les outils nécessaires pour déployer des applications métier en production : base de données, cache, tâches de fond et notifications temps réel.
L'architecture de Dodock s'organise autour du concept de bench : un environnement qui héberge plusieurs sites (tenants) partageant les mêmes applications.
| Concept | Description |
|---|---|
| Bench | Environnement complet contenant applications, sites et processus |
| Application | Package Python qui étend le framework (dodock, dokos, etc.) |
| Site | Tenant avec sa propre base de données et configuration |
| DocType | Définition d'un type de document (schéma + comportements) |
| Document | Instance d'un DocType (enregistrement en base) |
Dodock est une plateforme multi-tenant. Chaque tenant (appelé "site") possède :
Les applications sont partagées entre tous les sites du bench.
Dodock repose sur une pile technique moderne et éprouvée.
| Composant | Technologie | Rôle |
|---|---|---|
| Base de données | MariaDB | Stockage persistant des données |
| Cache | Redis | Cache, files d'attente, pub/sub |
| Backend | Python (Werkzeug/Gunicorn) | Logique métier et API REST |
| Temps réel | Node.js (Socket.io) | Notifications en direct |
| Frontend | JavaScript (Vue.js) | Interface utilisateur |
| Reverse Proxy | Nginx | Routage et SSL (production) |
MariaDB stocke toutes les données : documents, métadonnées des DocTypes, utilisateurs et configurations. Chaque site possède sa propre base de données, garantissant une isolation complète en environnement multi-tenant.
Trois instances Redis distinctes assurent différentes fonctions :
| Instance | Rôle |
|---|---|
| redis_cache | Cache en mémoire pour accélérer les lectures |
| redis_queue | Files d'attente pour les tâches de fond (RQ) |
| redis_socketio | Pub/Sub pour la communication temps réel |
L'initialisation d'un bench avec bench init crée cette structure :
dokos-bench/
├── apps/ # Applications installées
│ ├── frappe/ # Framework (obligatoire)
│ ├── erpnext/ # Application métier
│ └── custom_app/ # Applications personnalisées
│
├── sites/ # Sites hébergés
│ ├── assets/ # Assets compilés (JS, CSS)
│ ├── apps.txt # Apps installables
│ ├── common_site_config.json # Configuration partagée
│ └── monsite.localhost/ # Répertoire du site
│ ├── site_config.json # Configuration du site
│ ├── private/ # Fichiers privés
│ ├── public/ # Fichiers publics
│ └── locks/ # Verrous de synchronisation
│
├── config/ # Configuration Redis
│ ├── redis_cache.conf
│ ├── redis_queue.conf
│ └── redis_socketio.conf
│
├── logs/ # Journaux des processus
├── env/ # Environnement virtuel Python
└── Procfile # Définition des processus
L'exécution de Dodock nécessite des services système (base de données, cache) et des processus applicatifs (serveur web, workers).
Les services système dépendent de l'architecture de déploiement. Les processus applicatifs sont définis dans le Procfile en développement et dans config/supervisor.conf en production.
| Service | Rôle |
|---|---|
| MariaDB | Base de données relationnelle |
| Redis | Cache et files d'attente pour les workers |
| Nginx | Reverse proxy (production uniquement) |
| Supervisor | Gestion des processus (production uniquement) |
Serveur WSGI : répond aux requêtes HTTP. En développement, bench start lance le serveur Werkzeug. En production, Gunicorn est configuré automatiquement via Supervisor.
Workers Redis : exécutent les tâches de fond (emails, rapports, calculs). Démarrés automatiquement par bench start en développement, configurés dans Supervisor en production.
Scheduler : planifie l'exécution des tâches programmées (horaires, quotidiennes, etc.). Même gestion que les workers.
| Aspect | Développement | Production |
|---|---|---|
| Lancement | bench start | Supervisor |
| Configuration | Procfile | config/supervisor.conf |
| Serveur WSGI | Werkzeug (mono-thread) | Gunicorn (multi-workers) |
| Reverse proxy | Non | Nginx |
developer_mode est un paramètre distinct du mode de déploiement. Lorsqu'il est activé, les modifications apportées aux DocTypes, rapports et autres composants via l'interface soient répercutées dans le dépôt de l'application, le site doit être en developer_mode.
Cette option s'active dans le fichier site_config.json du site :
sites/{votre_site}/site_config.json
{
"developer_mode": 1
}
Activé : les modifications apportées aux DocTypes, rapports, scripts et autres composants sont sauvegardées dans le code source de l'application. Elles peuvent être versionnées avec Git, partagées et déployées sur d'autres instances.
Désactivé : les modifications restent isolées sur l'instance courante. Elles ne sont pas synchronisées avec le dépôt de l'application, ce qui complique le suivi des changements et la collaboration.
L'accès complet aux options de développement nécessite d'être connecté en tant qu'Administrator.
Le framework détermine le site cible selon :
Host de la requêteX-Frappe-Site-Name (pour les API)currentsite.txt (en développement)Chaque site possède un fichier site_config.json :
{
"db_name": "site1_db",
"db_password": "••••••••",
"encryption_key": "••••••••"
}
La configuration commune se trouve dans common_site_config.json.