¿Cómo gestionas los sitios web y las configuraciones de producción con GIT?

Estoy lidiando con un proyecto django que estamos impulsando en vivo incluso mientras escribo esto. El server de producción es un linode y como parte de la configuration tenemos SSL y certificates, y varias diferencias con respecto al desarrollo y el control de calidad.

En mi settings.py , tengo el siguiente código:

 import socket hostname = socket.gethostname().lower().replace('-', '_').split('.')[0] try: exec("from %s_local_settings import *" % hostname) except ImportError: pass 

que carga la configuration local para esa caja de linode en particular. Pero en el mismo linode, tendremos otra instancia del proyecto (la que estamos organizando para un cliente). Esta primera instancia es como publicidad / demostración / entrenamiento. Por lo tanto, mi pequeño truco de nombre de nodo no va a funcionar …

¿Cómo manejas este tipo de problema en un entorno de producción? Pronto tendremos un respaldo de linode con bases de datos duplicadas, por lo que la complejidad continúa creciendo y no estoy seguro de cómo rastrear y mantener fácilmente todos los cambios.

Estoy usando git, y creé una twig llamada producción-www, supongo que a medida que avanzamos, me fusionaré de master en la twig de producción-www y los files que son particulares de esta installation no serán sobreescrito (a exception del file de nombre de nodo para el que no tengo solución en este momento).

¿Alguien está haciendo algo más fácil o más inteligente que esto?

Confirme un file settings.py de ejemplo en el repository (por ejemplo: settings.py.example) y luego copie y edite con el nombre de host real para cada implementación. Intentar detectar cosas como nombre de host, nombres de ruta, etc. puede ser desorderado y rápido.

Las nuevas implementaciones no lo afectarán, ya que no está en el repository, pero probablemente le pidas a git que ignore el "settings.py" por sí mismo para no comprometer un file de configuration de desarrollo por crash.

He retocado con Silk Deployment, que es un set de herramientas de Python basado en Fabric que usa Git para sincronizar configuraciones en implementaciones. Está destinado para su uso con Django y es muy, muy bueno. Bien vale la pena mirar!