Django Deployment 4: Server

En este post explicaré como tengo configurado mi server (MediaTemple dv) para hacer hosting de mis aplicaciones de django. La meta fue crear la configuración más simple posible para poder hacer deployments rápidos y consistentes.

La primera parte fue instalar mod_wsgi que ya expliqué como hacer en otro post.

El próximo paso es crear un subdomain usando el Plesk que provee MediaTemple con mi contrato. En este ejemplo usaremos el domain ponysite.example.com. Cuando se crear el subdomain NO es necesario activar Python Support, en realidad aconsejaría que no lo activaran para evitar confusiones.

Ahora debemos copiar los archivos de nuestra aplicación de django, crear el virtualenv para esta aplicación y dejarle saber a apache donde está cada cosa.

Primero creemos la carpeta donde vamos a poner todas nuestros proyectos de django. A mi me gusta tenerlas en una carpeta que se llama webapps en el directorio /var.

$cd /var

$mkdir webapps

Ahora copio mi proyecto pony_site a esta carpeta. Desde mi sistema local hago los siguiente

$scp ~/Projects/pony_site.tar.gz [email protected]:/var/webapps/

Esto se encarga de copiar la carpeta del proyecto al servidor. Es buena idea comprimir los archivos antes de copiarlos ;-). Una vez copiados y descomprimidos los archivos quedamos con la aplicación en /var/webapps/pony_site

Ahora crearemos un virtualenv para este site. Me gusta guardar los virtualenvs en el servidor en la carpeta /var/virtualenvs así que la creo

$cd /var

$mkdir virtualenvs

Una vez instalado usamos virtualenvwrapper para crear el ambiente que requiere esta aplicación. En un post anterior explique como instalarlo y configurarlo.

$mkvirtualenv ponysite.example.com –no-site-packages

una vez creado lo activo

$workon ponysite.example.com

Ahora solo queda usar pip y nuestro archivo de requirements.txt para instalar todas las dependencias de este proyecto.

(ponysite.example.com)$pip install ponysite.example.com -r /var/webapps/pony_site/requirements/requirements.txt

Esto instala todas las dependencias que definimos en requirements.txt. Ahora sólo queda configurar a Apache para que sepa de donde debe servir la aplicación y los files estáticos.

Para esto debemos crear dos archivo un django.wsgi y un vhost.conf.

El primero, django.wsgi es un simple archivo de Python que le daja saber a apache donde estar nuestro virtualenv, nuestro app y cual es el settings module que debe usar. Este archivo lo colocamos en el root de nuestro proyecto

/var/webapps/pony_site/django.wsgi


El segundo, vhost.conf le deja saber a Apache donde está el archivo django.wsgi, en que directorio esperamos tener nuestra aplicación y donde queremos guardar los archivos estáticos (imagenes, css, js, etc.).

Con la configuración que tengo en MediaTemple y como estoy usando Plesk debo crear el archivo vhost.conf en:

/var/www/vhosts/example.com/subdomains/ponysite/conf/vhost.conf

de esta manera me aseguro que Plesk no va a editar o borrar este archivo en el futuro.


Listo esto es todo. Ahora solo queda hacer restart a Apache y con suerte cuando abras el subdomain en el browser todo se verá bien.

$service httpd restart

Para un post futuro voy a escribir sobre fabric una herramienta para hacer todo este proceso mucho mas automatizado.

Si tienes preguntas, no entiendes algo, encontraste un error o sabes una mejor forma de hacer lo que explico aquí te pido que me dejes saber en los comments.

<<Django Deployment 1: Instalación de mod_wsgi

<<Django Deployment 2: Organización de Archivos

<<Django Deployment 3: Virtualenv, virtualenvwrapper, pip