Déploiement sur vps uWSGI et nginx
J'ai quelques question pour le déploiement d'un site d'Ecommerce.
Pour mon site d'Ecommerce j'utilise deux éléments que je ne sais pas gérer pour le déploiment.
J'utilise docker, et j'ai crée 4 containers :
-
1 pour l'application djangp
-
1 pur laase postgresql
-
1 pour celery
-
1 pour rabbitqm
Je pense savoir me débrouiller pour déployer les containers django et la base de donnée. Par contre vu que mon site à des taches asynchrones pour l'envoie de mail, je me demandais comment gérer cette partie asynchrone ? Est-ce que mon serveur uWSGI suffira ? J'ai lu que pur de l'asynchrone on puvait utilier Daphne mais le cas d'utilisation que j'ai trouvé n'était pas pour celery mais quelque chose d'un peu plus complexe.
Deuxième questions ppur géérer la partie front j'utilise python webpack boiler plate. Est-ce qu'un collectstatic suffira pour avoir tout mon design servis par nginx ? Ou dois je utilser umn autre container docker dans lequel je ferais tourner la commande "npm run build" ? Je ne sais pas si je suis très clair concernant wpack. C'est la première fois que j'utilise webpack et j'ai trouvé ça très pratique pour la phase de développement mais je n'ai pas pensé à la partie déploiment.
Dernière quesion, en tant que débutant sur quel vps me conseillerai vous de déployer ? j'avias pensé à ovh, digital ou scaleway.
Merci d'avance
Salut Flavien !
Pour ce qui concerne l'asynchrone effectivement, le serveur uWSGI ne sera pas suffisant pour exécuter les tâches asynchrones avec Celery.
Celery tourne dans un processus séparé (dans ton cas dans le container docker).
En bref, quand ton application Django doit effectuer une tâche asynchrone, elle l'envoie à la file d'attente RabbitMQ. Celery (dans son propre container) est constamment à l'écoute de cette file d'attente et traite les tâches lorsqu'elles apparaissent. Donc tu auras besoin de ton container Celery pour faire tourner les workers.
Maintenant pour avec webpack, tu peux simplement créer une commande de build dans ton Dockerfile qui lance npm run build.
Ensuite, normalement avec un collectstatic pour collecter tous les fichiers statiques (y compris ceux générés par webpack) dans un seul endroit ça suffira.
Ce que fait le collectstatic c'est rassembler tous les fichiers dans un seul endroit, dans ton cas tu as juste besoin de rajouter avant ça la génération des fichiers avec webpack mais pour la suite c'est pareil, tu auras tous tes fichiers dans un unique endroit qui seront servis par NGINX.
Et finalement pour le VPS moi j'utilise beaucoup Digital Ocean, j'aime beaucoup leur plateforme, jamais eu de problèmes, et les prix sont très abordables. Après c'est un avis très personnel, ça peut valoir le coup d'en tester plusieurs pour voir celui que tu préfères.
Je rajouterai également une note personnelle : je n'ai pas tous les tenants et aboutissants de ton application et sa taille, mais tu sembles avoir fait une infrastructure prévue pour un gros projet. C'est bien dans un sens car tu as quelque chose de robuste pour la suite, mais pour te donner une idée, sur Docstring je n'ai aucun container Docker et je n'ai même pas mis en place Celery encore car toutes les tâches que je pourrais déporter en asynchrone sont finalement très rapides à exécuter (typiquement, le cas des mails, je n'ai aucun cas de figure dans lequel une action doit envoyer plus qu'1 email à la fois, et c'est très rapide à faire, c'est juste une requête en plus qui va prende quelques centaines de ms, donc quasiment invisible pour l'utilisateur).
Ok merci pour les infos c'est très utilie !
Concerenant la taille de mon projet, c'esqt un petit projet. Je crée un site d'Ecommmerce pour une amie, et mon but est d'apprendre avec ce projet. Je n'ai pas pourut de me lancer en tant que freelance pour le moment, et j'ai remarqué qu'en entreprise docker est utilisé apprécié d'où mon interet pour elle.
Concernant les tâches asynchrone je suivais slmplement le livre que j'utilisais comme support pur faire ce site d'Ecommerce.
Quand à l'utilisation de webpack c'était une manière d'apréhender un peu plus l'univers du frontend. A termes je voudrais créer un site à l'image de coding in game ou leetcode mais pour django et la data. Mais pour cela il faut que je monte en compétence sur du front, mon prochain jecitf est de créer une application découplé django/react ou django/angular.
J'aurais prabablement quelques questions à te poser à ce moment là sur l'intégration d'un interpreteur python dans un site web.
Aurais tu un conseil du coup pour gérer l'asynchrone pour le déploiement ? Est-ce que quelquchose comme daphne te sermble pertinent ?
Bonjour Flavien,
si tu compte sutiliser plusieurs Docker container, si ce n'est pas déjà fait, je conseille vivement d'utiliser docker-compose . C'est un moyen simple et efficca ed edeployer et gérer plusieurs dockers container. docker-compose va s'occuper de mettre tous les docker sur un même network pour qu'ils puissent communiquer entre eux. Tu pourras aussi gérer directement les volumes de tes docker pour avoir des données persistantes.
De mon côté comme VPS j'utilise Linode pareil prix abordable. J'ai découvert récemment Contabo qui est encore moins cher.
Salut Flavien !
Pour le déploiement en ASGI, je ne l'ai jamais fait sur un gros projet (au-delà d'un simple tuto), mais je sais que Daphne est effectivement souvent conseillé (également dans la doc : https://docs.djangoproject.com/fr/4.2/howto/deployment/asgi/daphne/)
Sinon tu as uvicorn qui est plus léger et Digital Ocean disposent d'un tuto très complet sur le sujet :
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-asgi-django-app-with-postgres-nginx-and-uvicorn-on-ubuntu-20-04
Leurs tutos sont vraiment très bien fait et c'est ce qui m'avait mis le pied à l'étrier quand j'ai commencé à faire mes premiers déploiements donc je te conseille fortement de regarder sur leur site.
Pour Django + React ou Angular oui c'est intéressant après là encore il faut bien se poser les questions de pourquoi on souhaite utiliser ces technos car bien souvent on peut faire la même chose avec beaucoup plus simple. Dans le cas de Django couplé à une librairie front-end de ce genre il faudra que tu réalises une API avec Django (DRF) ou un autre framework si tu le souhaite (FastAPI par exemple qui est le plus en vogue).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte