2011-10-08 18 views
10

Estoy trabajando con un cliente que exige la configuración de servidor de varias etapas: servidor de desarrollo, servidor de escenario y servidor de producción/vivo.Django y servidores de varias etapas

Stage debe ser tan estable como sea posible para probar todas esas nuevas funciones que desarrollamos en el servidor de desarrollo y llevar esto al servidor en vivo al final.

Utilizamos git y github para controlar la versión. Utilizo Ubuntu Server Edition como el sistema operativo.

El problema es que nunca he trabajado en un plan de servidor de varias etapas. ¿Qué software/proyectos recomendaría que se haga de una manera adecuada para manejar dicha configuración, especialmente la implementación y el traslado de una nueva característica desarrollada al escenario y luego al servidor en vivo?

+0

Para aquellos que votaron para cerrar, ¿cómo son las herramientas y los procesos relacionados con la implementación no relacionados con el desarrollo de software? –

+0

También me llama la atención que la implementación y las herramientas relacionadas son una parte esencial del ciclo de vida del software. – Hellnar

+0

Josh: desafortunadamente esta pregunta no tiene una sola buena respuesta (es para abrir). Esta es la razón por la cual las personas votan para cerrarla. Este tipo de pregunta sería mejor para algún tipo de foro, pero no para Stackoverflow. –

Respuesta

7

Utilizamos dos métodos diferentes para mover el código del entorno al entorno. El primero es usar ramas y disparadores con nuestro sistema de control de fuente (mercurial en nuestro caso, aunque puedes hacer lo mismo con git). El otro, es usar fabric, una biblioteca de python para ejecutar código shell en varios servidores.

Usando control de fuente, puede tener varias ramas principales, como productiondevelopmentstaging. Supongamos que desea mover una nueva característica a la puesta en escena. Explicaré en términos de mercurial, pero puedes transferir los comandos a git y debería estar bien.

hg update staging 
hg merge my-new-feature 
hg commit -m 'my-new-feature > staging' 
hg push 

Luego, tiene su servidor de control remoto de origen presionando a todos sus servidores web usando un desencadenador. Un activador en cada servidor web hará una actualización y volverá a cargar el servidor web.

Para pasar de la etapa de producción a la de producción, es igual de fácil.

hg update production 
hg merge staging 
hg commit -m 'staging > production' 
hg push 

No es el método más bonita de despliegue, y hace retroceder bastante duro. Pero es rápido y fácil de configurar, y aún mucho mejor que implementar manualmente cada cambio en cada servidor.

No pasaré por la tela, ya que puede complicarse bastante. Debería leer their documentation para que comprenda de qué es capaz. Hay muchos tutoriales para tela y django. Recomiendo encarecidamente la ruta de la tela ya que te da mucho más control, y solo implica escribir algo de pitón.

2

Pruebe Gondor.io o Ep.io, ambos hacen que sea bastante fácil (especialmente gondor se destaca en esta área) tener dos instancias + con código muy similar, desde su VCS - y mover datos hacia adelante y hacia atrás. (si necesita una invitación, pregunte en el IRC, pero si recuerdo, ambos están abiertos ahora)

4

Hay un nice branching model for git (ya que también lo usa github, por ejemplo). Puede aplicar fácilmente este modelo de bifurcación utilizando git-flow, que es una extensión git que le permite aplicar algunas operaciones de repositorio de alto nivel que se ajustan a este modelo. También hay un nice blogpost sobre esto.

No sé exactamente qué quiere automatizar en su flujo de trabajo de implementación, pero si aplica el modelo mencionado anteriormente, la mayor parte del manejo de la versión correcta se realiza con git.

Para agregar un procesamiento automático adicional a esto, fabric es una herramienta simple pero excelente, y encontrará many tutorials about its usage (también en combinación con git).

Para manejar las dependencias de python usando virtualenv and pip es seguro que es un muy buen camino a seguir.

Si necesita algo más complejo, por ej. para manejar más de una instancia django en una máquina y para manejar dependencias de todo el sistema, etc. checkout puppet o chef.

Cuestiones relacionadas