Dokos supporte désormais un mode de déploiement unifié utilisant ASGI (Asynchronous Server Gateway Interface) via Uvicorn, permettant d'exécuter le serveur web, les workers temps réel (Socket.IO) et les tâches en arrière-plan (RQ) dans un seul processus. Ce mode est particulièrement adapté aux petits sites ou aux environnements d'essai où l'optimisation de la mémoire est cruciale.
--dev permet de recharger le serveur à chaque modification de code Python.pip install uvicorn)Pour démarrer Dokos en mode unifié, utilisez la commande suivante :
bench --site [votre_site] serve --unified
Cette commande lance un serveur Uvicorn qui gère :
| Paramètre | Description | Valeur par défaut |
|---|---|---|
--web-threads | Nombre de threads pour le serveur web | 4 |
--job-threads | Nombre de threads pour les tâches RQ | 2 |
--dev | Recharger le serveur à chaque modification de code Python | Désactivé |
--serve-assets | Servir les fichiers statiques (/assets et /files) depuis ASGI | Désactivé |
--preload-drivers | Précharger les pilotes de base de données (ex: mysql, postgres) | Activé |
Exemple avec paramètres personnalisés :
bench --site [votre_site] serve --unified --web-threads 8 --job-threads 4 --dev
Pour activer le service des assets statiques via ASGI, ajoutez cette variable dans votre fichier sites/common_site_config.json :
{
"FRAPPE_SERVE_ASSETS": 1
}
Pour réduire l'empreinte mémoire, Dokos utilise désormais des importations paresseuses pour les modules non critiques. Voici les principaux modules concernés :
pypdf, cssutilsopenpyxl, pandasPillowgoogle-api-python-clientwerkzeug.test, unittest.mockrq, profilerCes modules ne sont chargés qu'au moment de leur première utilisation, ce qui accélère le démarrage du serveur.
Les modules critiques sont préchargés pour éviter les latences lors de la première requête. Vous pouvez configurer les modules à précharger dans sites/common_site_config.json :
{
"preload_modules": [
"frappe.core.doctype.user.user",
"frappe.desk.doctype.notification.notification"
]
}
Le cache client est désormais limité par taille en octets plutôt que par nombre d'entrées, évitant ainsi une consommation mémoire excessive.
Le secret d'authentification pour Socket.IO (socketio_auth_secret) est automatiquement généré s'il n'est pas présent dans Redis. Aucune configuration manuelle n'est nécessaire.
Le backend "python-embedded" pour Socket.IO a été supprimé. Toutes les connexions utilisent désormais le nouveau backend basé sur asyncio.
pip install uvicorn
bench --site essai.dokos.local config set-common-config -c FRAPPE_SERVE_ASSETS 1
bench --site essai.dokos.local serve --unified --web-threads 4 --job-threads 2 --dev
https://essai.dokos.localws://essai.dokos.local/socket.io/)Si vous utilisiez précédemment Gunicorn, voici les étapes pour migrer vers le mode unifié :
bench stop
bench config set-common-config -c use_gunicorn 0
8000)location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
bench start
tail -f sites/[votre_site]/logs/web.log
pip install uvicorn)--port 8001redis-cli get socketio_auth_secret
--no-cache à la commande de démarrage--job-threads (ex: --job-threads 4)tail -f sites/[votre_site]/logs/worker.log
--dev pour un rechargement automatique.--web-threads 2 --job-threads 1) pour réduire la consommation mémoire.htop ou glances pour surveiller la consommation mémoire.