2011-04-14 16 views
8

Nunca he trabajado para una empresa que está implementando una aplicación Django (con una gran base de usuarios), y tengo curiosidad acerca de cuál es la mejor manera de hacerlo.¿Cómo están los desarrolladores web con experiencia implementando Django en producción en EC2?

Ahora estoy alojando una aplicación de Django en EC2. El código de la aplicación está en mi cuenta de github. Tengo nginx sirviendo contenido estático, y detrás hay un único servidor apache ejecutando django + mod_wsgi.

Estoy tratando de averiguar cuál es la mejor práctica para la "implementación continua". En este momento, después de haber añadido una funcionalidad adicional hago lo siguiente en EC2:

1) git reset CABEZA --hard

2) git pull

3) Apache reinicio

4) reiniciar nginx

Tengo una lógica personalizada en mi archivo settings.py de modo que si estoy ejecutando en EC2, la depuración se establece en False, y mis bases de datos cambian de sqlite3 (desarrollo) a mysql (producción).

Esto parece funcionar para mí ahora, pero me pregunto qué hay de malo en este proceso y cómo podría mejorarlo.

Gracias

Respuesta

6

he trabajado con los sistemas que utilizan Fabric para implementarla en varios servidores

+0

+1 La tela es absolutamente el camino a seguir donde sea posible. –

+0

+1 fabric hace que la lógica de implementación sea repetible, versionable y lo mantenga simple –

+0

parece que la tela es el camino a seguir. Lo verificare este fin de semana. gracias por su ayuda chicos (todos a continuación incluidos) – josephmisiti

2

Soy el desarrollador principal en The Texas Tribune, que es 100% de Django. Implementamos en EC2 usando RightScale. No escribí personalmente las secuencias de comandos de implementación, pero nos permitió obtener nuevas instancias en la rotación muy, muy rápido y escalas a pedido. no es barato, pero valió cada centavo en mi opinión.

+0

gracias.También lo haré, aunque estoy buscando una solución gratis si es posible – josephmisiti

1

Estoy de acuerdo con John y digo que Fabric es la herramienta para hacer este tipo de cosas cómodamente. Probablemente no desee configurar git para que se implemente automáticamente con un enganche de confirmación de publicación, pero es posible que desee configurar un comando de estructura para ejecutar su suite de pruebas localmente, y luego avanzar a producción si pasa.

Muchas personas ejecutan archivos de configuración de desarrollo y producción por separado, en lugar de tener una lógica personalizada para detectar si se encuentra en un entorno de producción. Puede heredar de un archivo unificado y luego anular los bits que son diferentes entre dev y producción. Luego, inicia el servidor utilizando el archivo de producción, en lugar de confiar en un único settings.py unificado.

Si solo está usando apache para alojar la aplicación, puede beneficiarse de una solución más liviana. El uso de fastcgi con nginx le permitiría eliminar la sobrecarga de apache por completo. También hay un módulo wsgi para nginx, pero no sé si está listo para producción en este momento.

+0

¿Cuál es el beneficio de eliminar apache por completo? Me imagino que podría acelerar las solicitudes porque no serían redirigidos a un puerto diferente a través de nginx (tal vez)? Tenía la impresión de que apache es un producto mucho más maduro en comparación con nginx, ¿y es por eso que las personas continúan usándolo? – josephmisiti

+0

Apache es un producto más funcional, por lo que las personas continúan usándolo. La eliminación de capas innecesarias en su pila es una buena forma de mejorar la velocidad, y al lado del otro, nginx asesina a Apache para tareas que puede hacer. El .htaccess configurable por el usuario es probablemente la razón más común por la que las personas conservan apache. La reducción del uso de memoria es otra razón para eliminar apache. –

+0

Además, si ya tiene nginx en su pila, no tengo claro el comentario de "producto maduro". Si nginx falla, no es como si apache interviniera y asumiera el control. –

1

Hay una buena manera más de cómo gestionar esto. Para ubuntu/debian amis es bueno para las versiones manager y deployemnts al empaquetar su aplicación en .deb

+0

im usando ubuntu? Estoy un poco confundido acerca de los beneficios de esto? – josephmisiti

+0

No estoy seguro de usar tu ubuntu o algunos otros objetivos. El beneficio puede ser una administración de código fácil, puede administrar la combinación de opciones de configuración y gestionar automáticamente las dependencias. Puede ejecutar pre/post ... instalar scripts para actualizar configuraciones/bases de datos, etc. – rootart

+0

Esta es una idea horrible. Esto simplemente no es cómo las personas implementan proyectos de Python y Django. Usamos pip y virtualenv, y sur para migraciones. –

Cuestiones relacionadas