2012-02-24 17 views
5

¿Cómo se debe implementar y ejecutar el proyecto? Hay muchas herramientas en este espacio. ¿Cuál debería usarse y por qué?¿Cuál es la mejor manera de ejecutar un proyecto django en awws?

  • Supervisor
  • Gunocorn
  • Ngnix
  • Tela
  • Boto
  • Pip
  • virtualenv
  • equilibradores de carga
+0

Fuera de tema, pero podría considerar usar Heroku para implementar un proyecto de Django en AWS y omitir la mayor parte de este debate. –

Respuesta

11

Depende de su configuración. Estamos utilizando la siguiente pila para nuestro entorno en Rackspace, pero puede configurar lo mismo en AWS con instancias EC2.

  • Ubuntu 11.04
  • Barniz (en la memoria caché) para evitar búsquedas en disco
  • Nginx al servidor de contenido estático
  • Apache para contenido dinámico servidor (MOD-WSGI)
  • Python 2.7.2 con Django
  • Jenkins para nuestra continua construye
  • GIT para el control de versiones
  • Tela f o la implementación.

Así que la forma en que funciona es que Jenkins está buscando un empuje GIT al repositorio de origen. Jenkins luego baja los cambios desde el origen. Crea un huevo Python, ejecuta pruebas unitarias, utiliza Fabric para implementar este huevo en los entornos necesarios y vuelve a cargar la configuración de Apache para asegurarse de que los procesos de Apache bifurcados recogen el nuevo huevo de Python.

Espero que esto ayude.

+0

Nice stack Michael, ¿tienes tu configuración de Nginx en el código fuente de tu proyecto? ¿Qué está gestionando la ejecución de su proyecto python y el número de subprocesos? Creo que Supervisor y Gunocorn pueden ayudar aquí. –

+1

Fuera de interés, ¿cuál es el motivo para utilizar Apache + ModWSGI y Nginx en lugar de solo Nginx frente a uWSGI? Además, para el contenido estático, ¿por qué las unidades ec2 lo cambian en lugar de solo alojarlo en s3? ¿Hay un impacto en el rendimiento? – jvc26

+2

Gran punto. Comenzamos con Apache/ModWSGI, luego agregamos NginX a la mezcla más tarde, por razones de predicción, queríamos mantener Apache en nuestros entornos de PROD. S3 es increíble, totalmente. Tenemos la mayoría de nuestras cosas en Cloudfiles (el equivalente de S3). Pero hay archivos estáticos que cambian muy a menudo para nosotros y CloudFiles no le permite establecer un TTL de almacenamiento en caché en el CDN de <20 minutos. – Michael

3

Como Michael Klockel ya se ha dicho depende de la configuración, que tengo:

  • Ubuntu 10.04 LTS
  • Nginx
  • Uwsgi
  • control de versiones Git
  • virtualenv pitón y PIP

Puede verificar la configuración de implementación que e: Django, Virtualenv, nginx + uwsgi import module wsgi error

y por eso uso nginx y uwsgi aquí: http://nichol.as/benchmark-of-python-web-servers

También utilizo tela para el despliegue de la aplicación, y el chef en solitario http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

caché Johny para las consultas SQL y cuervo y centinela para mantener un registro de lo que está sucediendo en la aplicación.

2

Utilizaría uWSGI+Nginx desde una perspectiva de rendimiento (creo que la comparación ya se ha vinculado en otra respuesta), pip y virtualenv para la implementación, ya que mantiene las cosas independientes, y facilita la implementación limpia utilizando tejido o similar. Use git para control de versiones. Jenkins puede manejar la integración continua. Utilizaría el AWS load balancer (ELB) frente a las instancias de EC2 para equilibrar: hace el trabajo sin tener que preocuparse demasiado por ello. django-storages para cargar sus archivos estáticos en s3, lo que le ahorra el esfuerzo de tener otro servidor para distribuir archivos estáticos.

Sin embargo, depende un poco de los gastos generales de administración. Si está buscando algo limpio y simple para el despliegue y la escala, eliminaría toda la pila AWS EC2, use Heroku como interfaz y s3 ​​para sus archivos estáticos. Esto ahorra todo el tiempo de administración de mantener los cuadros, y le permite concentrarse en el desarrollo.

Cuestiones relacionadas