2009-03-14 16 views
11

J'ai un site en cours d'exécution sur django, (mais la question s'applique à quoi que ce soit, php, etc)Dois-je utiliser git pour déployer des sites Web?

Actuellement, je suis en utilisant unison pour déployer mes changements, et je (un peu utilisé pour) l'amour parce que avant que je le faisait manuellement !!

Maintenant, comme je me mouille les pieds avec git, je commence à l'aimer! Et je me demande si je devrais peut-être l'utiliser à la place de l'unisson pour déployer mes changements!

De cette façon, je vais avoir l'avantage supplémentaire de pouvoir annuler mes changements si le déploiement en quelque sorte s'est avéré être un désastre!

La question est:

  • Est-git approprié pour le déploiement de sites Web?

  • Des choses/problèmes/gotchas dont je devrais être au courant?

Répondre

16

J'utilise git pour suivre mon site, et je le déployer comme ceci:

git archive --format=tar --prefix="homepage/" master | gzip | ssh webserver "tar xvz -C ~/public_html" 

Cela mérite une petite explication.La commande d'archivage pour git exportera les fichiers pour la branche master, qui sera compressée avec gzip pour minimiser le trafic réseau. Il est reçu à distance via ssh, qui est décompressé dans le répertoire de destination final.

Le script de déploiement que j'utilise a un peu plus de contenu, mais c'est le morceau le plus important.

+0

Comment vous organiser pour les fichiers à supprimer du serveur? Est-ce que 'rsync' peut prendre une entrée de type tar? – mjs

+0

A chaque déploiement, un nouveau répertoire, versionné, est créé et lié par un lien symbolique, ce qui facilite la restauration. C'est là que la partie "a un peu plus de passe" entre en jeu. –

+0

Jusqu'à présent, j'utilise aussi l'unisson. Cela a l'avantage que les changements des deux côtés sont synchronisés automatiquement (sauf que le même fichier a été modifié des deux côtés). Je veux aussi passer au déploiement git sur le serveur. Mais pas comme ça. Une extraction git est exécutée sur le serveur. Le code est mis à jour par git pull. – guettli

5

Eh bien, j'utiliser SVN pour déployer mon site, donc je dirais allez-y! Gardez à l'esprit que vous devrez peut-être redémarrer/recharger le serveur chaque fois que vous mettez à jour le code du site Web (je ne suis pas sûr que Django ou quoi que ce soit que vous utilisiez puisse le contourner).

+0

Pour référence: ce n'est pas directement django qui détermine si le serveur doit être rechargé, mais le pont serveur-python. Dans la configuration Apache-w/-modpython, les modifications apportées au code python nécessitent un redémarrage apache, les modifications apportées aux modèles (ou aux fichiers statiques) ne le sont pas. Les changements ORM exigent beaucoup plus. –

+0

Techniquement, l'importateur personnalisé de mod_python peut recharger le code Python modifié sans redémarrer le serveur, mais je redémarre généralement pour être sûr. –

9

Si la question est de savoir si vous pouvez utiliser git pour déployer votre application django, la réponse est sûre! Toutefois, le déploiement en production d'une application populaire peut devenir complexe - et aller bien au-delà du simple retour en arrière des fichiers. Vous devrez peut-être exécuter des scripts DB (à la fois mettre à niveau et rétrograder des scripts), redémarrer des tâches cron ou déplacer des fichiers.

Dans le cadre de votre processus de déploiement, vous souhaiterez peut-être sauvegarder votre base de code dans son intégralité afin de pouvoir revenir en arrière sur un nombre quelconque de versions. Un moyen de le faire est avec Capistrano qui automatise l'ensemble du processus de déploiement pour vous. Vous créez des scripts dans votre environnement de développement et lancez des commandes telles que: capitaliser le déploiement, plafonner deploy_with_migrations, annuler le recouvrement, etc. et tout est automatisé depuis la connexion jusqu'au processus de sauvegarde et l'exécution de scripts DB. En automatisant le déploiement, vous éliminez les erreurs dans votre environnement de production. Récemment, j'ai parlé à une organisation qui a accidentellement supprimé l'ensemble de sa base de données au cours d'un déploiement et qui avait besoin de tout restaurer à partir de sauvegardes. Les erreurs de déploiement peuvent vraiment casser votre entreprise si vous voulez automatiser cela si vous êtes sérieux à ce sujet.

Bien que Capistrano soit un outil de déploiement basé sur Ruby couramment utilisé avec Rails, il est agnostique en termes de capacités d'automatisation. Il existe de nombreux articles sur Internet qui traitent des avantages du déploiement d'applications Django avec Capistrano (google-django capistrano).

Vous pouvez également consulter check out this link here

+0

Je pense que vous êtes trop compliquer cela .. La question ne mentionne jamais rien qui ressemble à des sites Web commerciaux populaires/complexes .. mais, Capistrano est une bonne suggestion – dbr

9

Vous pouvez jeter un oeil à Fabric, populaire parmi les Djangonauts ...