Docker y la revolución de los containers

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.

Sigue leyendo

¿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.

Sigue leyendo

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).

Sigue leyendo

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.

Sigue leyendo

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.

Sigue leyendo

MongoDB es fácil

MongoDB es una base de datos NoSQL orientada a documentos que son guardados en una estructura JSON dinámica que es denominada BSON (Binary JSON). Debido a que JSON es un formato de datos familiar para los programodores JavaScript, es que muchos desarrolladores node.js usan esta base de datos para sus proyectos. Otra gran ventaja de MongoDB es que es un proyecto Open Source y por lo tanto es posible de ser necesario modificar el códio. El nombre MongoDB proviene de la palabra inglesa "humongous" (que significa enorme) y justamente este sistema de base de datos está diseñado para ser enorme permitiendo escalar horizontalmente la base de datos, es decir podemos agregar "X" número de nodos a nuestra base de datos expandiendo de forma casi ilimitada la capacidad de almacenamiento de la misma.

En este breve tutorial explicaremos como instalar MongoDB en un servidor Ubuntu 12.04, aunque los pasos de la instalación son los mismos para Debian los comandos para administrar el daemon del MongoDB son diferentes y a menos que indique lo contrario este tutorial debe ser usado para intalar, configurar y administrar MongoDB en un servidor Ubuntu 12.04.

Sigue leyendo

Cómo usar node.js en producción

node.js es una de las muchas herramienta que trata de dar una solución al clásico problema C10K que aqueja al popular servidor web Apache. Para ello node.js ofrece un modelo de eventos asíncronos, de un sólo hijo de ejecución. Sin embargo la parte del non-blocking  que tanto promocionan en el website oficial de node.js asume que lo único que ejecutará node.js seran queries contra un servicio RESTful. Sin embargo en el mundo real una aplicación web es más que queries contra un servicio RESTful y es por ello que si dejamos que node.js se haga cargo del envio de los archivos css, html, las imágnes y todos los otros objetos que constituyen una página web la parte del non-blocking no se cumple y difícilmente el servicio pueda escalar a más de unos cuantos cientos de clientes simultáneos, de alli la razón de muchas de las críticas que ha recibido node.js. Cuál es la solución usar un servidor web que se haga cargo de servir el contenido estático de nuestra aplicación web y para no ello no hay nada mejor que el pequeño y ágil Nginx.

En este post les explicaré como configurar node.js y Nginx en un servidor Ubuntu 12.04 para correr una aplicación desarrollada en node.js. Por favor tengan en cuenta que estos pasos también pueden ser seguidos en Debian (omitiendo el comando sudo, siempre y cuando estemos logueados como root), si desea hacer lo mismo con distribuciones basadas en RPM como Centos o Fedora entonces siga las ideas generales pero no podrá copiar y pegar directamente los comando listados en este tutorial.

Sigue leyendo

Comandos básicos para controlar Exim

Exim es el servidor de correo usado por defecto en Debian, la distribución que uso en la mayoría de mis proyectos. Exim no es tan popular como Postfix o Sendmail, pero desde mi punto de vista resulta mucho más robusto y escalable que los dos anteriores, pero como dice el refran en gustos y colores no han escrito los autores. Este post contiene los comando básicos que se pueden usar para gestionar la cola de correos de Exim en las operaciones, espero que les sea de utilidad en caso de que les toque lidiar con un VPS debian.

Sigue leyendo

Usando PHP en Heroku

Aunque muchos no lo saben y Heroku no lo publicita es posible desplegar aplicaciones PHP o Perl en el servicio PaaS de Heroku. Claro que hay algunas limitaciones, la primera es que MySQL no es la base de datos relacional que ofrece la plataforma, sino que los es PostgreSQL. Esto hace que algunas muy populares webapps como WordPress por ejemplo no puedan ser deplegadas directamente en Heroku y tal vez es la razón por la cual no se publicita mucho el soporte a PHP. En este muy breve tutorial explicaremos como tener una aplicación PHP con base de datos PostgreSQL corriendo en Heroku.

Sigue leyendo