Docker es una plataforma open source para desarrolladores y sysadmin que permite crear, distriubuir y correr aplicaciones de forma consistente independiente de la configuración del OS y el harware que lo contenga. El proyecto Docker consiste de dos partes "Docker Engine" que es un runtime ligero y portable (lo que instalamos en nuestro servidor) con un conjunto de herramientas que nos permiten crear, iniciar y detener los contenedores. La otra parte del proyecto es "Docker Hub", que es un repositorio en la nube a través del cual podemos compartir los contenedores que hemos creado, si es que así lo queremos. Docker se ha planteado como objetivo eliminar la fricción entre el proceso de desarrollo, QA (Quality Assurance) y producción a través del uso de contenedores que son una envoltura para nuestra aplicación y todas las librerias que esta necesite. Cómo resultado de esta contenerización, el departamento TIC puede desplegar la aplicación sin ningun cambio ya sea en una latop, en un servidor físico, en un servidor virtual o en la nube, siempre y cuando tenga instalado el Docker Engine.
¿Qué lenguaje aprender primero?
Esta es la eterna pregunta de todo novato y cuando es dicha en foros públicos por lo general es seguida por un largo debate entre "fundamentalistas" que parecen estar hablando más de religión que de una herramienta tecnológica. Desde que las computadoras comenzaron a llegar a las aulas universitarias se han probado diferente paradigmas de programación y con ellos diferentes implementaciones de dichos paradigmas en la forma de lenguajes de programación concretos. Aún recuerdo BASIC, el leguaje que cualquiera que pasó por la revolución de las microcomputadoras a finales de los setenta y principios de los ochenta encontró como su única herramienta de desarrollo disponible, claro que BASIC era un "avance" comparado con programación en lenguaje de máquina o lenguaje ensamblador.
Usando CouchDB en nuestro VPS
CouchDB es un sistema gestor de bases de datos orientado a documentos, similar a MongoDB y es una de las muchas alternativas NoSQL exitentes en el mercado. Es decir, los datos no están guardados en tablas y tuplas. Pongamos un ejemplo para entenderlo, imaginen que quieres tener un registro de usuarios, donde cada usuario tiene un nombre, un correo y su edad, cada "registro" (conjunto de nombre + correo + edad) pasaría a ser un documento diferente en una gran repositorio de documentos, independiente de todos los demás. No existe una sección en donde puedas separar unos documentos de otros, todos están en el mismo repositorio. ¿Qué no es CouchDB?, no es un sustituto a las bases de datos relacionales tradicionales, debes tomar en cuenta cuando vas a desarrollar que no siempre lo que parece mas nuevo es la mejor solución, CouchDB no es la solución a todos tus problemas ni una evolución de las tablas relacionales, tengamos presente eso. Este tutorial describe como instalar CouchDB en Ubuntu 12.04 y como usar Futon (el sistema de administración de CouchDB).
iftop el «top» para interfaces de red
iftop es una herramienta que hace con el tráfico de una interface de red, lo que "top" hace con el uso de un procesador. Esta herramienta escucha todo el tráfico de red a una interface determinada y nos muestra una tabla que resume el uso de ancho de banda usado por cada par de host o IPs connectadas (servidor/cliente), es muy útil para identificar si estamos recibiendo un ataque desde una IP en particular. En Debian y Ubuntu se instala simplemente haciendo un "apt-get install iftop", pero para Centos la historia es un poco diferente. Aquí les paso los pasos necesarios para tener iftop corriendo en un Centos 6.x.
node-twitter un clone de twitter en node.js
Revisando los repositorios de Github por proyectos interesantes escritos en node.js, he encontrado uno llamado node-twitter de Vinit Kumar. El código se ve limpio y sólo requiere la intalación de MongoDB como motor de base de datos, que afortunadamente ya hemos descrito en este blog como instalarlo localmente. Una version operativa del proyecto se puede visitar en este URL: http://ntwitter.nodejitsu.com/login. En este post voy a describir brevemente como hacer para tener una versión similar corriendo en tu VPS o servidor físico si es que deseas iniciar un proyecto similar.
Cómo instalar Ghost (plataforma de blog en node.js)
Aunque WordPress es la plataforma de blog dominante en nuestros días, John O'Nolan inició un proyecto kickstarted para crear un sistema de blogging en node.js. Ghost se puso como meta recaudar £ 25,000 (U.S.$ 40,000) para financiar el desarrollo del proyecto y en 29 días recibió £ 196,362 (U.S.$ 314,000), debido a esta gran acogida es que decidió extender el proyecto y no sólo desarrollar un software para blogear escrito en node.js, sino que está construyendo el servicio para ofrecerlo de la misma manera a como lo hace WordPress.com. El servicio aún no está disponible, pero si se desea usar el software que es Open Source en un servidor propio, sólo debemos registrarnos en Ghost.org para poder descargarlo.
Este tutorial detalla los pasos de cómo tener Ghost corriendo en nuestro VPS, este tutorial asume que Ud. usa Ubuntu 12.04 (o más nuevo), node.js 0.10.21, MySQL y Nginx. De no estar familiarizado con alguno de estos componentes, no se preocupe aquí explicaremos detalladamente como instalarlos y configurarlos.
Asegurando tu server Ubuntu
La seguridad es uno de los puntos a los que debemos prestar mucha atención cuando ponemos un servidor en producción (es decir accesible a través de Internet), aunque no existe una receta mágina que vuelva invulnerable nuestro servidor, existen una serie de medidas básicas de seguridad que deberíamos tener en nuestro servidor para evitar los ataques más comunes y detectar algún intento de intrusión. En este post detallo una serie de medidas básicas para asegurar un servidor Ubuntu 12.04 independientemente de cual será la apliación a la cual lo destinaremos y de cual es el lugar donde lo hostearemos. Es posible tener configuraciones más seguras basados en el tipo de uso que le daremos al servidor (webapp, mail server, irc, etc.) y el data center o el servicio de nube que usemos, pero dado que las posibilidades serían infinitas, es que he decidido escribir este compendio de reglas mínimas.
node.js con Twitter Bootstrap
No hay duda que uno de los frameworks/templates para diseño de websites HTML5/CSS3 más usados en la actualidad es Bootstrap (un proyecto Open Source inciado por Twitter), una de las razones de su popularidad es que este template por defecto nos ofrece un diseño responsive y mobile first, lo cual convierte a esta herramienta en ideal para el desarrollo de websites que se vean bien no importa si se accede a ellos desde un smartphone, una tablet o un PC. El framework por defecto de node.js es Express y aunque es flexible gracias a su sistema de plantillas Jade, muchas frontend prefieren el familiar Bootstrap, razón por la cual aquellos que deseen desarrollar un backend en node.js y un frontend en Bootstrap podrían encontrar útil este breve tutorial.
Implementando un chat con node.js
Una de las ventajas que ofrece node.js es su naturaleza asíncrona y por lo tanto permite escalar fácilmente sin preocuparnos por sincrónizar procesos entre sí ya que no existen procesos una aplicación node.js consiste de un único hilo de ejecución. Una de las aplicaciones que más se beneficia de esta característica es justamente un chat y ha sido uno de los selling points favoritos de los evangelistas de node.js. Pero qué tan sincillo es programar un chat en node.js, pues bien como dice Eric Raymond en La Catedral y el Bazar: "Los buenos programadores saben qué código escribir. Los grandes programadores saben qué código reescribir". Así que para que empezar desde cero, he encontrado un muy buen esqueleto con que comenzar una aplicación de chat en Github, escrita por desarrollador llamado William Mora.
Usando MySQL con node.js
Imaginémonos que deseamos usar MySQL en un proyecto con node.js, después de todo MySQL es de lejos la DB relacional más usada ¿cómo hacerlo?. Pues bien aquí les dejo un pequeño tutorial que describe como usar la base de datos MySQL en un proyecto node.js usando el framework express. Este tutorial asume que ya tiene instalado node.js y MySQL ya sea localmente o en su servidor de desarrollo, no interesa el sistema operativo en teoría. Pero deseo advertir que este tutorial es el resultado de las pruebas realizadas en un Ubuntu 12.04 Server Edition y perfectamente podría correr en cualquier otra distribución de Linux.