La première est que le serveur que Django met à notre disposition n'est prévu que pour le développement : inutile de passer par du code Python pour charger des fichiers statiques (feuilles de style, fichiers JavaScript, images, ...).
Il est également probable que la base de donnée de votre application doive supporter plus d'un utilisateur.
SQLite fonctionne très bien dès lors qu'on se limite à un seul utilisateur : vous risquez de rencontrer des erreurs de base de données verrouillée pour écriture car un autre processus y accède déjà.
Il est donc nécessaire d'avoir un environnement plus solide pour la production.
Une autre raison de s'intéresser au déploiment dès à présent est qu'à trop attendre et peaufiner son développement en local, sa finalité (se retrouver exposé sur un serveur) risque d'être perdue de vue.
Vous risquez d'oublier une partie des désidérata ou une fonctionnalité essentielle, de passer énormément de temps à adapter les sources pour qu'elles fonctionnent sur un environnement en particulier.
Aborder le déploiement très tôt permet également de rédiger dès le début les procédures d'installation, de mise à jour et de sauvegardes.
Déployer une nouvelle version sera aussi simple que de récupérer la dernière archive depuis le dépôt, la placer dans le bon répertoire, appliquer des actions spécifiques (et souvent identiques entre deux versions), puis redémarrer les services adéquats.
Dans cette partie, les points suivants serons abordés :
* La définition de l'infrastructure nécessaire à notre application.
* La configuration de l'hôte, qui hébergera l'application : dans une machine physique, virtuelle ou un container. On abordera aussi rapidement les déploiements via Ansible, Chef, Puppet ou Salt.
* Les différentes méthodes de supervision de l'application : comment analyser les fichiers de logs et comment intercepter correctement une erreur si elle se présente et comment remonter l'information.
Comme abordé dans la première partie, Django est un framework complet intégrant tous les mécanismes nécessaires à la bonne évolution d'une application.
Il est ainsi possible commencer petit et de suivre l'évolution des besoins en fonction de la charge estimée ou ressentie, d'ajouter un mécanisme de mise en cache, des logiciels de suivi, etc.
Aussi : Docker, Heroku, Digital Ocean, Scaleway, OVH, Ansible, Puppet, Chef, ... Bref, sur Debian et CentOS pour avoir un panel assez large. On oublie Windows: rien que Gunicorn et Nginx n'y tournent pas.