-
Notifications
You must be signed in to change notification settings - Fork 80
Multiples instances de pods dans l'environnement Docker #1353
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
f44159a to
772ed9d
Compare
Badatos
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merci pour cette PR :)
Je n'ai rien vu de bloquant, mais juste quelques remarques :
nb : pour la PR ciblant podV4, il faudra ensuite cibler la branche "dev_v4" et non plus "main" directement. (il faudra qu'on corrige cela dans le pull_request.md)
10e534f to
edd6e0e
Compare
edd6e0e to
42930b9
Compare
- docker initialization marker is the creation of a .initialized file instead of detecting if the database has been created or not - make createDb file cleaning is error-proof and can be executed multiple times in parallel - collectstatic logs are quieter - the default documentation advise to rely on the POD_INSTANCE environment var to discriminate ES_INDEX, caches and redis session prefix - docker pod entrypoints rely on the POD_INSTANCE en var to detect the right .initialized file - docker pod entrypoints rely on the POD_PORT en var to run the app on dedicated port - the 'Site' object is not statically initialized with initial_data.json, but dynamically in main/apps.py - the celery queues use the POD_INSTANCE var as keyprefixes - the default database is named after POD_INSTANCE if available
42930b9 to
93ae47f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bonjour,
Merci pour ces travaux.
J'ai quand même un questionnement vis-à-vis de la nouvelle fonction load-data dans pod/main/apps.py.
Je n'ai pas testé, mais de ce que j'en comprends, les données initiales ne sont plus sauvegardées dans la base de données lors du createDB mais à chaque fois que Django démarre.
Typiquement, j'ai l'impression que l'adresse du site, dans la table django_site, sera mise à jour à chaque fois.
Dans mon cas - j'imagine que je ne suis pas le seul - je n'ai qu'un site, et j'ai donc la ligne : 1 / video.umontpellier.fr / video.umontpellier.fr
Avec cette modification, au démarrage, cela va changer cette adresse par : 1 / pod.localhost:8000 / pod.localhost:8000 ?
J'ai raté quelque chose ?
Merci
Bonjour,
Ceci est une dernière PR en préparation à #1170
Elle introduit divers changements au niveau de la configuration, afin qu'un même dockerfile puisse lancer deux instances distinctes de Pod, utilisant les même services (ElasticSearch, Redis) sans conflit. C'est une étape nécessaire pour pouvoir ensuite tester la fédération entre les deux instances avec ActivityPub. Je mets les modifications dans cette PR afin de rendre la relecture de l'autre plus simple, et plus orientée vers le métier d'ActivityPub.
Aucun changement n'est cassant. Cette PR est juste une mise en place, les modifications apportées sont utilisées ensuite par #1170
Si la PR est acceptée j'en ouvrirai une nouvelle visant la branche
main.Les modifications apportées sont :
quietà la commandecollectstaticWARNmake createDbsont tolérantes aux erreurs (et donc la commande peut être lancée en parallèle par deux instances Pod sur une même base de code)POD_INSTANCEetPOD_PORT.POD_INSTANCEpeut être le nom d'une instance pod (par exemplepod-a,pod-betc),POD_PORTest le port sur lequel sera lancée l'instance dans le conteneur Docker.entrypoint.shde l'application Django, le marqueur pour vérifier que l'application a été initialisée n'est plus la détection du fichier .sqlite, mais un fichier.initializedconstruit à partir dePOD_INSTANCEentrypoint.shde l'application Django,POD_PORTest utilisé pour déterminer sur quel port lancer l'applicationSiteinitial n'est plus initialisé statiquement à partir deinitial_data.jsonmais dynamiquement dansmain/apps.py, à partir dePOD_INSTANCEetPOD_PORTPOD_INSTANCEest défini, la base de données par défaut prendra son nom plutôt quedb.sqlite3POD_INSTANCEcomme préfix (pour avoir un namespace dédié pour chaque instance de pod)POD_INSTANCEcomme namespace pour les caches, les sessions redis, et l'index ElasticSearchES_INDEXBefore sending your pull request, make sure the following are done
dev_v4branch.draftif it's still a work in progress.