Je suppose que cette question semblera incroyablement triviale pour certains lecteurs, mais en tant que développeur mais avec peu d'expérience dans le déploiement d'applications dans autre chose qu'un manuel, appuyez et espérez en quelque sorte, j'espère que vous comprendrez que c'est assez intimidant de voir le nombre d'approches et d'outils différents, je pourrais donc faire avec quelques conseils pour me lancer dans la bonne direction.
Je suis développeur, maintenant seulement dans mon temps libre, ce qui est limité. Jusqu'à présent, j'ai travaillé avec Java, créé des applications Web et j'ai été raisonnablement satisfait du déploiement d'un fichier de guerre dans un environnement Tomcat qui maintient les choses bien encapsulées.
Je travaille maintenant en Python et Django, mais à mesure que je me rapproche du point où je dois déployer, je veux mettre en place un workflow de devops solide pour automatiser autant que possible et m'assurer de pouvoir déployer de manière fiable, mais étant donné que mon le cas d'utilisation est relativement simple, je veux éviter d'apprendre un gros ensemble d'outils gras qui est trop conçu pour mes besoins et qui nécessite un gros investissement de temps, je préfère utiliser le codage de mon application.
Je suis donc à la recherche d'un terrain d'entente qui me permet de déployer et de gérer mes applications de manière fiable sans investir beaucoup de temps à configurer et à apprendre un écosystème de gros devops.
Quelques détails supplémentaires ...
Le contexte
- Je développe sur un Mac, en utilisant PyCharm pour construire Django 2, Python 3.
- J'utilise git (mais pas sur github) pour gérer la gestion des versions des logiciels.
- Je suis à l'aise avec d'autres langages et langages de script et j'ai écrit quelques scripts bash (probablement assez amateur), bien que je n'aime pas bash. J'ai également essayé Perl, dont je me suis rendu compte que ce n'est pas vraiment un langage pour barboter (c'est-à-dire que vous devez passer du temps à l'apprendre correctement)
- J'ai l'intention de déployer sur un environnement VPS, probablement DigitalOcean.
- Mon application n'est pas essentielle à la mission, mais il est important que je sache si le site tombe en panne et que je dois avoir un moyen de récupérer de manière fiable si c'est le cas, qu'il s'agisse de redémarrer l'application, de redémarrer le serveur ou de passer à un autre serveur ( ou autre).
Exigences particulières
Possibilité de configurer un nouvel environnement pour recevoir l'application.
Jusqu'à présent, pendant que j'apprends, cela a été manuel, et chaque fois que je l'ai fait, j'ai recommencé à zéro avec une nouvelle Droplet. Je voudrais que ce soit beaucoup plus simple (automatisé) afin que si je dois configurer un nouvel environnement en cas d'urgence, je puisse le faire de manière fiable.
Possibilité de déployer l'application dans un environnement de mise en scène aussi identique que possible au live, idéalement comme un processus automatisé déclenché par un push git utilisant une approche d'intégration continue (ce que je n'ai jamais fait auparavant).
Capacité à "appuyer sur le bouton" lorsque je suis satisfait de l'application dans l'environnement de mise en scène pour passer automatiquement à un environnement en direct.
Manière de surveiller le site (juste un sondage sur une page fera l'affaire)
Moyen de basculer le site en direct vers un autre serveur si j'ai besoin de récupérer après une panne d'application ou de serveur sur le site en direct. Je pense que peut-être une approche bleu-vert fonctionnerait pour moi?
Qu'est-ce que j'ai essayé ou envisagé?
Configuration manuelle de l'environnement en direct avec l'application Django, puis copiez-y manuellement la nouvelle base de code en cas de changement. Cela semble sujet aux erreurs humaines et je crains de faire une erreur dans un déploiement provoquant une défaillance irrécupérable.
Docker. J'avoue que lorsque j'ai découvert Docker, cela semblait être un rêve devenu réalité, mais après un peu d'expérimentation et de recherche, je suis intimidé par tout ce que j'ai besoin d'apprendre et de savoir pour le mettre en place et le gérer. Il se peut que cela en vaille la peine, car une fois que cela fonctionne, le risque est très faible, mais pour le moment, cela me semble être un investissement de mon temps plus important que ce que j'espère.
Bash scripts. Utilisez-les pour configurer l'environnement d'origine et pour des tâches spécifiques telles que la mise à jour de l'application. Mon inquiétude à ce sujet est que les scripts seront du code qui doit être testé et je crains que cela prenne beaucoup de temps pour créer un ensemble d'outils fiable de cette façon.
J'ai examiné les options de Digital Ocean pour les adresses IP flottantes et la possibilité d'avoir deux serveurs pour une approche "bleu vert" qui semble tout à fait sensée. Si je choisis cette voie, j'ai encore besoin d'automatiser le déploiement.
Alors ... je cherche des conseils sur une approche devops qui trouve le bon équilibre entre minimiser les risques (par exemple le risque de casser l'application en direct avec une mise à jour, ou le risque de ne pas pouvoir récupérer d'une panne) et de minimiser le temps investissement que je dois faire pour configurer les environnements et le flux de travail.