Una de las novedades de Google que más me ha llamado la atención en los últimos meses es GAE (Google App Engine), que permite utilizar la red de Google para desplegar nuestra aplicación web y ganar de forma transparente la habilidad de soportar millones de visitas diarias a la vez de tener la data replicada, resolviendo los dos problemas serios que enfrenta todo Startup de la industria de las Tecnología de la Información, escalabilidad y disponibilidad del servicio.
El principal problema actualmente con GAE, es que esta en fase beta y sólo se puede acceder a él por invitación, afortunadamente cuento con una de esas invitaciones, pero me puse a pensar en todos aquellos que desean probar el servicio y no tienen una cuenta actualmente. Por más que quisiera ser generoso, Google no permite más de tres proyectos en GAE actualmente, y no puedo borrar proyectos, así que hasta yo debo ser cuidadoso con mis tres oportunidades.
Entonces ¿qué podemos hacer,? pues bien, Google ofrece actualmente en el SDK del GAE un webserver muy simple que nos permite probar nuestra aplicación GAE en nuestra propia máquina, el problema es que por defecto el script dev_appserver.py sólo escucha en el localhost en el puerto 8080. Se me ocurrio sencillamente jugar un poco con las opciones de configuración y consegui que trabajara usando el IP público y el puerto 80, actualmente tengo ese tipo de solución corriendo en http://gae.volkanrivera.com
Es importante tener presente que no todas las funcionalidades de GAE estan soportadas por el dev_appserver.py la pérdida más importante es la posibilidad de logueo usando una cuenta de Google. Tenga en cuenta que éste tipo de solución que expongo aquí implica ciertos riesgos así que le recomiendo que lo haga sobre un servidor virtual que puede sencillamente apagar en caso de problemas (alguien hackeo el dev_appserver.py y lo esta usando para enviar spam).
Comencemos con la configuración, como usuario "root" instale estos paquetes:
# apt-get install g++ zip unzip less postfix proftpd pound
De ser necesario puede reconfigurar el postfix usando éste comando:
# dpkg-reconfigure postfix
Cuando sea preguntado sobre que tipo de instalación desea para el proftpd, selecciones "standalone".
Luego edite el archivo /etc/proftpd/proftpd.conf y agregue estas líneas:
TimesGMT off
DefaultRoot ~
Hagalo después de éstas línea:
# Port 21 is the standard FTP port.
Port 21
Adicionalmente deshabilite el protocolo ipv6 en el /etc/proftpd/proftpd.conf de ésta forma:
UseIPv6 off
Ahora edite el archivo del proxy inverso /etc/pound/pound.cfg y sólo deje estas líneas, tenga cuidado en reemplazar www.xxx.yyy.zzz por el IP público de su server:
User "www-data"
Group "www-data"
LogLevel 1
## check backend every X secs:
Alive 30
ListenHTTP
Address www.xxx.yyy.zzz
Port 80
xHTTP 0
Service
BackEnd
Address 127.0.0.1
Port 8080
End
End
End
Luego edite el archivo /etc/default/pound y coloque el valor de la variable startup=1
Ahora instalemos el SDK, para ello debemos descargarlo e instalarlo como root de ésta forma:
# cd /usr/src
# wget http://googleappengine.googlecode.com/files/google_appengine_1.0.2.zip
# unzip google_appengine_1.0.2.zip
# mv google_appengine /usr/local/gae
Ahora que tenemos instalado nuestro SDK debemos proceder a crear un usuario que deseamos usar para probar el GAE en nuestro caso usaremos el nombre de usuario gae, pero puede ser cualquiera.
# adduser gae
Finalmente cambiamos al usuario "gae" y continuamos el resto de la configuración como dicho usuario:
$ cd ~/
$ cp -R /usr/local/gae/demos/guestbook/ ./
Necesitamos crear dos scripts uno para arrancar el servidor GAE y otro para detenerlos aquí esta el script para arrancar el dev_appserver.py, puede llamarlo start_gae
#!/bin/bash
/usr/local/gae/dev_appserver.py
–enable_sendmail
$1
2>~/gae.log &
Aquí esta el script para detenerlo, puede llamarlo stop_gae:
#!/bin/bash
kill -9 `lsof -i :8080 | grep ^python | awk ‘{print $2}’`
Antes de arrancar el servidor GAE, necesitamos crear los siguientes archivos, lo haremos con el mismo usuario que correrá GAE usando estos comandos:
$touch /tmp/dev_appserver.datastore
$touch /tmp/dev_appserver.datastore.history
Si no tiene privilegios para crear esos archivos, pues sencillamente creelos como "root" y luego cambie el propietario con el comando chown.
Ahora ya estamos listos para iniciar el servidor GAE, que por el momento lo usaremos para correr la aplicación demo que viene dentro del SDK llamada guestbook, para ello como el usuario "gae" ejecutaremos éste comando:
$ ./start_gae guestbook/
De haber hecho todo de bien Ud. debería de obtener ésto con un netstat -tl:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:webcache *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp6 0 0 *:ssh *:* LISTEN
tcp6 0 0 *:smtp *:* LISTEN
Observe que "webcache" es el nombre del puerto 8080. Ahora como usuario "root" debemos de iniciar el proxy inverso, para ello usamos este comando:
# /etc/rc.d/pound start
Listo ahora podemos ver nuestro guessbook sencillamente apuntando al IP público o usando un nombre de dominio válido apuntado a dicha IP.