sábado, 2 de junio de 2012

Primer deploy a AWS. notitas

Esto es para levantar una App en Django/Python 

GLOSARIO:

AMI: Amazon Machine Image (Es un sistema operativo con todo lo necesario)
EC2: Elastic Compute Cloud (Es un server virtual)
EBS: Elastic Block Store (Un volumen de storage que puedes unir a tu EC2) Si alojo el contenido en la misma EC2 cuando la instancia peta o la termino. Se pierde. Si la almaceno en un EBS es persistente.
  1. Los grupos de seguridad. Puerto 80 a todo el mundo (0.0.0.0/0). Y el 22 a la IP de tu equipo. Asi me ha funcionado.
  2. Usar virtualenv para instalar los eggs del proyecto.
  3. Una IP elastica es como una IP estatica solo que se puede cambiar la instancia a la que la asocias y no tienes que hacer cambios de DNS. Te cobran cuando adquieres una IP elastica pero luego no la asocias a ninguna instancia. http://aws.amazon.com/articles/1346

inicializar un repositorio de codigo en esa misma instancia: 

http://askubuntu.com/questions/12647/setting-up-a-git-server
En Remoto
mkdir project.git
cd project.git 
git init --bare  

En Local
cd /tu-proyecto 
git remote add origin andres@mi-dominio.com:/home/andres/project.git
git push origin master
A partir de aqui. Cualquiera que tenga acceso al usuario andres podrá clonarse el codigo y pushear cambios para que los dos esteis sincronizados.
Create un usuario menos egocentrico. Por ejemplo si el repo lo vas a compartir con varios desarrolladores llamalo devel

Instalar mod_wsgi:
http://code.google.com/p/modwsgi/wiki/InstallationInstructions

REINICIAR APACHE en UBUNTU
sudo service apache2 restart

Gestión dependencias
Django + virtualenv en EC2
Mirar: pip install -r dependences.txt

para usar un virtualenv en un proyecto django. La manera mas guarra de hacerlo es añadiendolo hardcodeado el PYTHONPATH asi:
site_packages = '/home/miuser/.virtualenvs/mivirtualenv/lib/python2.6/site-packages'
site.addsitedir(os.path.abspath(site_packages))




MI PRIMER VIRTUAL HOST EN APACHE: Oye, funciona:)

    ServerName tudominio.com
    DocumentRoot /srv/www
    AliasMatch ^/([^/]*\.css) /.com/static/scss/$1

    Alias /media/ /srv/www/media/
    #Alias /static/ /srv/www/static/
    #EN las ultimas versiones de django. Ta dan un comando que es collect_static
    # Lo que hace es meterte todos los estaticos de todas las apps que tienes. Incluido
    # Las instaladas en el virtualenv y que tu no veras. Como por ejemplo el Admin de Django 
    # Una vez ejecutado. Todo estara en una carpeta. En mi caso la he llamado [collected_static]
    Alias /static/ /srv/www/collected_static/

    SetHandler None 
    Order deny,allow
    Allow from all
    
    WSGIDaemonProcess tu-fichero-wsgi processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup tu-fichero-wsgi

    WSGIScriptAlias / /srv/www/conf/pro/apache/tu-fichero-wsgi.wsgi
    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined

Esta es una version inacabada. Queda
  1. Crear un repo git desde el que coger el codigo mas reciente
  2. incluir Fabric para programar un deploy automatizado
  3. Incluir Nginx para servir los estáticos
  4. Gestionar los errores 404/500 creo que esto tiene algo que ver con Apache
  5. Y más cosas que se me olvidan seguro.

5 comentarios:

  1. Si. Con Rails 3. Solo por probar. La cuenta free. Esta muy bien. Aunque creo que me gusta mas amazon. Me parece que te da mas libertad. Para alguien como yo. Que no es en absoluto sysadmin.
    Amazon EC2 es una gran oportunidad de controlar un SO entero y jugar/aprender.

    ResponderEliminar
  2. Coño! :)
    Pero si eres tu :O
    NO me había dado cuenta. Estoy jugando a ser developer. He levantado esta web para mi mujer en la instancia free. Y ahora me estoy peleando con fabric. El fabric nuevo es muy diferente del que tenemos en el curro. Pero esta muy bien.+
    La web:
    avesedari.com

    ResponderEliminar
  3. Hola Andres,
    tu que conoces sobre direcciones ip elasticas de Amazon, sabes si estas se pueden reasignar AUTOMATICAMENTE a una instancia de respaldo, en el caso de que la instancia principal falle?

    ResponderEliminar
  4. Hola Caribe. pues la verdad es que no he hecho eso nunca. siento haberte dado la impresion de que entiendo. pero soy bastante novato con AWS :)

    ResponderEliminar