sábado, 25 de abril de 2015

Dominios

​Finalmente llegamos a la parte en la que se puede hacer público nuestro trabajo o al menos de una forma fácil de acceder. Esto se logra a través del link, URL o dirección que se le otorgue al proyecto, lo cual se consigue a través de un dominio.


Antes de arrancar, quiero primero dejar claro 3 conceptos básicos que usaré más adelante:
  • Internet Protocol (IP): Es un número único con el cual se identifica una computadora conectada a una red privada o pública.
  • Puerto: Es el número que estará asociado al proyecto y gracias a este junto a la dirección IP, podremos acceder a nuestro proyecto local y remotamente.
  • Domain Name System (DNS): Es el sistema que permite traducir el URL en el identificador del proyecto (una dirección IP y un puerto).
Ya con esto en mente, podemos entender lo que ocurría en post anteriores cuando teníamos acceso a nuestros proyectos con MEAN.js y Rails, ya que en ambos casos les comentaba que requerían acceder al navegador y usar un link de la forma localhost:3000, donde localhost es un alias al IP 127.0.0.1 (este IP hace referencia a tu propia computadora) y 3000 es el puerto que hace referencia a nuestro proyecto.

Ahora bien, para tener acceso remotamente lo que se necesita hacer es conocer tu IP y puerto por el cual la aplicación escucha las peticiones. Dentro de nuestro proyecto podemos cambiar el puerto usado, pero atención, porque existen una serie de puertos reservados para uso del sistema y otras aplicaciones, además de unos permisos que debes modificar.

El siguiente paso es asignar un dominio a nuestra dirección y esto lo logramos contratando el servicio de una empresa como Go Daddy, en ella verán una interfaz como esta al registrarse:


Y luego acceden a su lista de dominios -> seleccionan (o compran) uno -> administrar -> Archivos de zona DNS y verán esta ventana:


En ella notarán 2 secciones que realmente nos interesan:
  • A (Host):Son registros que simplemente apuntan un nombre de dominio o subdominio a una dirección IP.
  • CNAME (Alias): Son los registros que apuntan un subdominio a un registro A (host) existente, para que el subdominio se resuelva hacia la dirección IP adecuada.
Y aquí es donde existirá una diferencia cuando proporcionemos al sistema los datos, porque podemos tener:

1 - Dominio usando tu propia computadora como Host

Lo único que necesitamos es crear un registro con la IP de nuestra computadora e indicar como queremos que sea de tipo Host y un valor do Host como por ejemplo el famoso www.
Después de esto esperamos unos minutos (horas algunas veces) y podremos acceder a nuestra aplicación con nuestro dominio con el Host que establecimos, por ejemplo www.lattke.org.

2 - Usando Heroku

Ya que también conocemos esta herramienta, les comento los pasos básicos, que también son muy fáciles:
  • Primero creamos un registro tipo CNAME con el Host que apunte al link de la aplicación, por ejemplo fathomless-plateau-6378.herokuapp.com y que haga referencia al host que deseamos por ejemplo www.
  • Segundo le avisamos a nuestra aplicación en Heroku que tiene un dominio nuevo y lo hacemos ejecutando el comando heroku domains:add www.lattke.org.
  • Nuevamente esperamos un tiempo a que se actualicen todas la tabla de DNS y podremos acceder en línea a nuestra aplicación bajo nuestro dominio personalizado.
Para mucha más información sobre este caso consulta la documentación oficial.

3 - Usando Github.io

Esta es otra herramienta que nos brinda Github, esta da la posibilidad de usar el dominio github.io con nuestro nombre de usuario y tener paginas web en línea muy fácilmente. Para este caso necesitamos primeramente configurar nuestra página siguiendo los pasos como nos lo indica la documentación oficial de Github.io. Este último requiere realmente sólo 4 sencillos pasos:
  • Nombre del proyecto igual al nombre de usuario seguido de .github.io
  • Tener tu archivo index.html en la carpeta de origen.
  • Agregar un archivo llamado CNAME con el link que deseas que tenga tú página, por ejemplo tony.lattke.org
  • Subir los archivos al repositorio.
Ahora sólo necesitas hacer lo siguente en Go Daddy:
  • Crear un registro tipo Host con la IP apuntando a 192.30.252.153 (esta es la IP de Github.io) e indicar el valor del Host que deseamos (en mi caso tony, porque quiero que mi página se le pueda acceder bajo el link tony.lattke.org).
  • Crear otro registro del tipo CNAME para indicar el Host nombre_usuario.github.io (en mi caso tonylattke.github.io) y que apunte a tu Host (en mi caso a tony).
Otras posibilidades

  • En un post comentaba la posibilidad de usar Dropbox para publicar nuestras páginas web y si recordamos esto lo lograba a través del uso de la carpeta pública. Ahora bien estos links también los podemos disfrazar usando nuestro dominio y lo único que necesitas hacer es acceder al menú de configuración del dominio, luego la sección reenvío y seleccionas administrar, seleccionas que deseas agregar un reenvío y veras una ventana como esta:


  • Luego agregas el link y tendrás el archivo bajo este dominio.

  • Google drive permite igualmente agregar archivos HTML y permitir visualizarlos en el navegador. Lee esta información para saber como compartir tus páginas con Google.
Ya con este post logre terminar todo lo que postule en el primer post :) ahora en próximos tutoriales hablaré sobre los Frameworks Web que me quedaron pendientes Django, Yesod y Catalyst.

Como siempre, si algo no queda muy claro siempre me pueden escribir a mi correo tonylattke@gmail.com o también pueden dejar comentarios al final de este post y trataré de ayudarles lo antes posible.

martes, 14 de abril de 2015

Heroku: Configuraciones y Logs


​ Seguimos con Heroku gracias a comentarios y dudas que recibí sobre dynos y configuración. Visita el post anterior por cualquier duda sobre instalación, creación de proyecto y conceptos bases sobre Heroku.


1 - Variables de entorno

Estas variables son las que tenemos en nuestro sistema virtual, en ellas solemos guardar las contraseñas de base de datos, claves de librerías como las generadas por aplicaciones de Twitter y Facebook. Podemos consultar, editar, agregar y eliminar de dos formas nuestras variables:
  • Por la interfaz web dentro de la aplicación en el menú Settings->Config Variables. La vista luce como la siguiente imagen:

  • A través de la consola:
    • heroku config: Para consultar la lista de variables.
    • heroku config:get NOMBRE_VARIABLE: Para ver el valor de la variable.
    • heroku config:set NOMBRE_VARIABLE=VALOR: Para crear y editar la variable.
​Para acceder a estos valores desde nuestra aplicación varia mucho con cada lenguaje, por eso aquí les dejo unos ejemplos:

Ahora bien tenemos la variable en Heroku, pero no en nuestra computadora. Para solucionar eso, lo que hacemos es simplemente ir a nuestro .bashrc y agregamos todos estos valores con un comando como este export NOMBRE_VARIABLE=VALOR.

Consulta la documentación oficial para más información.

2 - Dynos

Los dynos como vimos en el post anterior, son una instancia de una computadora que provee el ambiente requerido para correr nuestro proyecto. Existen 3 tipos de Dyno:
  • Web: Son todas las computadoras que estarán corriendo nuestro proyecto.
  • Worker: Son los que corren las tareas que asignemos a cada cierto tiempo, como por ejemplo mantenimiento, envío de reportes, respaldos, etc.
  • One-off: Es el que tenemos por defecto y nos permite acceder a través de la consola a una instancia de nuestro proyecto. El comando para lograr esto es: heroku run bash.
Podemos hacer cambios de la cantidad de dynos que necesitemos a través de la interfaz web (dentro de la ventana de recursos -> dynos -> edit) o por la consola con el comando heroku ps:scale. Por ejemplo heroku ps:scale web=5 worker=2​ asigna 5 dynos web y 2 workers. Ojo estos cambios ya requieren inversión de dinero.

Consulta la documentación oficial para más información.

3 - Log

Es la bitácora de eventos ocurridos durante la ejecución del proyecto. El comando para verlos es heroku logs, el cual tiene el siguiente formato de salida:

tiempo fuente[dyno]: mensaje
  • tiempo: Hora y fecha de la entrada.
  • fuente: Existen 2 tipos: app (son todas tus aplicaciones dyno) y heroku (todos los componentes del sistema que tengas en heroku).
  • dyno: Es el dyno que esta corriendo la acción.
  • mensaje: Especifica normalmente una descripción de lo que ha ocurrido.
​ Por defecto siempre veremos las últimas 100 líneas, pero podemos cambiarlo para pedir un poco más con el flag -n, por ejemplo el comando para ver las últimas 423 líneas del log sería heroku logs -n 423. Se puede solicitar hasta un máximo de 1500 líneas.

Consulta la documentación oficial para más información sobre logs.


También existe Papertrail como menciona Oliver Pérez, una ayuda extra sobre logs. Con Papertrail tenemos servicios como el envío de correos automáticamente al administrador a causa de errores, tendremos una interfaz web amigable para realizar búsquedas, administración por sistemas, entre otros.

Como siempre, si algo no queda muy claro siempre me pueden escribir a mi correo tonylattke@gmail.com o también pueden dejar comentarios al final de este post y trataré de ayudarles lo antes posible.

sábado, 4 de abril de 2015

Heroku


​En este nuevo post les vengo hablar de Heroku, porque quiero terminar los puntos sobre el desarrollo web que nombre en el primer post. Luego continuaré con los frameworks Django, Yesod y Catalyst.


Heroku es una plataforma como servicio de computación en la Nube (PaaS Platform as a Service), que tiene soporte a distintos lenguajes de programación como Ruby, Python, Haskell, Java, entre otros.

1 - Registro e instalación de Heroku


Lo primero que necesitamos es registrarnos totalmente gratis en página oficial, damos nuestro email, creamos contraseña, validamos correo... típico registro.

En segundo lugar instalamos la herramienta en nuestra computadora, según el sistema operativo que tengamos. Visita la ​​página de descarga aquí. En el caso de linux podemos descargar con el siguiente comando ​wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh.

2 - Llave

Al tener nuestro sistema en la nube necesitamos autenticar y vincular a nuestra computadora con nuestra cuenta de Heroku y para eso generamos una llave de acceso con el siguiente comando ssh-keygen -t rsa -C "usuario@dominio.com". Lo dejamos en el directorio por defecto por motivos de facilidad y creamos una contraseña.

Luego Heroku necesitará acceder a nuestro archivo .netrc en el home de nuestro usuario y para eso ejecutamos el comando chmod 0600 ~/.netrc

Y para comunicarle finalmente a Heroku ejecutamos heroku keys:add, el cual añadirá la llave creada a la lista de llaves de nuestro usuario en Heroku, ya que se nos pedirán el email y contraseña que usamos en nuestra cuenta creada en el paso anterior.

Para saber más sobre llaves consulta la documentación oficial.

3 - Usar la herramienta

Ahora podemos iniciar sesión con el comando heroku login cada vez que queramos.

En este momento podemos configurar aplicaciones ya existentes y subirlas a la nube. Para eso existen pasos muy específicos dependiendo del framework o lenguaje de nuestra aplicación, pero todos tienen en común el uso de Dynos, las cuales son son piezas fundamentales dentro de la herramienta Heroku.

Un Dyno es una instancia de una computadora en la que tenemos corriendo nuestro proyecto y para que este sepa como hacerlo, le proveemos la información para iniciar la ejecución de la aplicación a través del archivo llamado Procfile. Este archivo luce así:

Podría en este punto decirles los cambios específicos que son necesarios dentro de un proyecto para lograr subirlo a la nube, pero por motivos de genericidad de este tutorial prefiero continuar con los siguientes pasos necesarios. Aquí les comparto en todo caso los links para configurar una aplicación en Rails, Django o Yesod.

Uno de los pasos que necesitamos es entrar en nuestra aplicación y ejecutar el comando ​​heroku create​ y veremos que se creará una aplicación asociada a nuestra cuenta.

Luego necesitmos notificar al repositorio que se creo de nuestra aplicación, y para eso retomamos Git (instalamos con sudo apt-get install git en el supuesto de que no lo tengan todavía) y en caso de no recordar los comandos de consulten el post sobre herramientas de desarrollo. Lo primero es agregar los archivos git add . luego crear el commit git commit -a y finalmente subir lo que tenemos git push heroku master, aquí se solicita siempre la clave de nuestra llave creada en el primer punto. ​

Al terminar de subirse nuestros archivos tendrás un link parecido a este: ​fathomless-plateau-6378.herokuapp.com donde la primera parte del link es el identificador de nuestra aplicación y ahora tendrás la aplicación en linea!

Claro necesitamos por lo general migrar al estado de la base de datos que tengamos en el sistema y para eso ejecutamos en el caso de Rails heroku run rake db:migrate (también tendremos que configurar la base de datos dependiendo de nuestra aplicación). Heroku por defecto trabaja con el manejador de base de datos Postgres.

Tendremos la disponibilidad de ejecutar cualquier otro comando en el servidor y para eso necesitamos sólo correr ​heroku run bash y estaremos en la consola del servidor.

5 - Vista web

Contamos también con la vista la página web de Heroku para manejar todas nuestra aplicaciones y para eso accedemos a dashboard.heroku.com y tendremos una página como esta:


Y para manejar una aplicación en particular, accedemos al link y veremos una página como esta:


En la página podemos ver que se puede controlar la cantidad de Dynos, Workers, bases de datos y Addons que usemos. Ya a partir de este punto notamos que podemos empezar a invertir dinero al usar los recursos, pero por suerte con la configuración básica podemos aprender y hacer pruebas de manera gratuita.

Entre otras opciones podemos controlar el acceso de otros desarrolladores, ver actividad del repositorio, visitas y configurar dominios, nombre, variables de entorno y propiedad de aplicación.

4 - Addons

Los addons son los programas que podemos instalar en el servidor y este es ciertamente uno de los mayores atractivos de Heroku. Podemos acceder a addons.heroku.com y ver la gran cantidad y variedad de addons disponibles.


Particularmente les recomiendo revisar el addon de Postgres, el cual permite aumentar la cantidad de filas en la base de datos según lo que necesitemos. Noten el cambio de precio según el plan que escojamos, pero nuevamente digo que podemos desarrollar completamente gratis si usamos los planes básicos.


Otra herramienta es Scheduler ya que permite colocar tareas en nuestro servidor que se ejecuten diariamente, por hora o cada 10 minutos. Herramienta muy útil para hacer respaldos, actualizaciones, mantenimiento, entre otros.

Exiten otras herramientas PaaS como alternativa a Heroku y las más populares son:
Si algo no queda muy claro siempre me pueden escribir a mi correo tonylattke@gmail.com o también pueden dejar comentarios al final de este post y trataré de ayudarles lo antes posible.