Jenkins 2 con Docker y GitLab

Anteriormente os hable de Docker, una solución increíble del mundillo de la virtualización, y muchos conoceran al famoso Señor Jenkins, o como yo lo veo de cierta forma la evolucion del siempre fiel CRON de Linux, pues bien! Jenkins cuenta con su imagen oficial basada en Docker que puedes poner en marcha de forma rápida y facilmente, no adentrare demasiado en las funcionalidades de Jenkins y pasare a comentaros como poner en marcha Jenkins desde un contenedor Docker y configurarlo con una cuenta de GitLab para la integración continua durante el proceso de desarrollo de un proyecto, basándonos en que habéis puesto en marcha ya Docker en vuestro servidor u ordenador y en que ya habéis probado un poco el entorno de Docker como os explique en mi post anterior Docker show time!.

1.- Desgarga de la imagen oficial de Jenkins desde los repositorios oficiales de Docker.

El repositorio oficial esta este link https://hub.docker.com/_/jenkins/ en vuestro caso podeis ejecutar simplemente desde la consola de vuestra preferencia el siguiente comando para la descarga de la imagen a vuestro repositorio local:

>_ docker pull jenkins

Luego pueden comprobar que la imagen ha quedado correctamente descargada verificando las imagenes que se encuentran descargadas en vuestro server Docker:

>_ docker images

Para desplegar la imagen de Jenkins asignando un nombre especifico y evitar que se le asigne de forma random ejecutar:

>_  docker run -p 8080:8080 -p 50000:50000 --name jenkins jenkins

Esto os creara el contenedor de Docker con el nombre jenkins en minusculas (importante!) y continuara monstrando el progreso durante la carga de Jenkins inicial, es importante que no salgais de la consola ni la canceleis o cerreis en ningun momento ya que esta primera fase genera un codigo de Unlock que luego necesitareis en el momento en que vayais a acceder a la administracion o gestion de Jenkins, una ves que os aparezca este codigo copiarlo en alguna parte segura para el paso que viene.

Sabiendo que el contenedor esta en marcha podemos acceder con nuestro navegador favorito a la dirección http://localhost:8080 donde lo primero que nos aparecerá sera una pantalla como esta:

Es en Administrator password donde tendreis que colocar el codigo que habeis copiado anteriormente y hacer click a siguiente!

En la proxima ventana se os pregunta si quereis seleccionar de la lista de Plugins disponibles para Jenkins o instalar los predeterminados, partiendo de la idea de que es primera ves que poneis en marcha Jenkins seleccionar los predeterminados.

Veran como comienzan a instalarse de forma automatica un listado de plugins preseleccionados.

Finalizada la instalacion de los plugins por defecto os dara la opcion de crear el usuario administrador, os recomiendo hacerlo de una ves estableciendo el nombre de usuario, contraseña e email que les venga bien, si se saltan este paso y reinician la instancia luego sera complicado recuperar la consola de administracion.

Y listo!, instalacion completada con exito, ahora pasaremos a la configuracion de las credenciales para que nuestro servidor Jenkins este vinculado a nuestra cuenta de GitLab.

Para trabajar con nuestro proyecto alojado en GitLab podemos hacerlo de varias formas, una de ellas seria acceder a nuestro proyecto de GitLab y en Settings / Integrations seleccionar la opción de Jenkins CI (An extendable open source continuous integration server) en este caso lo que haremos sera generar un Token desde nuestro GitLab profile que podremos usar para que Jenkins pueda acceder y comprobar el repositorio, con lo que accedemos a Profile / Settings / Access Tokens, aquí deberemos asignar un nombre al Token que queremos generar, pongamos por ejemplo Jenkins y en el campo Expires at lo dejamos en blanco para que dicho Token no tenga fecha de vencimiento por ahora, ya si deseamos revocarlo en algún momento podremos hacerlo sin problemas desde el botón rojo “Revoke“.

Teniendo esto hecho, ahora podemos volver a la consola de administración de nuestro Jenkins, y lo primero que haremos sera ir a la sección Administrar Jenkins, en el Filtro colocaremos la palabra clave git y buscaremos los plugins de GitLab y GitHub que no tengamos instalados y los seleccionaremos haciendo click al finalizar en Instalar sin reiniciar, después de esto podéis reiniciar el server de Jenkins desde el panel de administración.

Una ves finalizado podemos ir a la sección de configuración de las credenciales para añadir en las credenciales Globales el Token que hemos generado en GitLab que debemos haber apuntado previamente.

Haciendo click en Global nos pasara a la siguiente ventana en la que haciendo click en Add Credentials podremos añadir el Token.

Haciendo click en OK ya tendríamos creada nuestra credencial asociada a nuestro GitLab Token, ahora vamos a crear la tarea de Build automatico, lo haremos sobre un proyecto cualquiera que tengamos en GitLab y en el que cada ves que reciba un commit con un cambio aplicado al proyecto, Jenkins se percate de ello y realice la Build.

Hacemos click en Nueva Tarea añadimos un nombre al proyecto, en mi caso usare un repositorio de un blog hecho en Symfony 2.5.10, así que le pondré de nombre a la tarea symfony, en la sección Configurar el origen del código fuente selecciono la opción Git, añado el link del repositorio en cuestión en formato HTTP (https://jonas.marquez@gitlab.com/jonas.marquez/blog.git), en el campo Navegador del repositorio selecciono de la lista la opción de gitlab y añado la URL del proyecto (git@gitlab.com:jonas.marquez/blog.git), en Versión añado 1.0 ya que es la versión que de momento estoy probando.

Ahora en la sección Disparadores de ejecuciones seleccionamos la opción Build when a change is pushed to GitLab, con esto cada ves que se haga un push al repositorio Jenkins se encargara de descargarlo y hacer la respectiva Build del proyecto o lo que sea que definamos mas adelante.

Luego hacemos click en Apply y luego en Guardar, en principio con esto tendremos la tarea hecha y puesta en marcha, a partir de aquí solo tendremos que ir a nuestro proyecto en local y realizar alguna modificación en el README.md o a cualquier archivo en cuestión, hacer el respectivo commit y push del cambio e irnos a nuestro proyecto recientemente creado activando en la esquina superior derecha el “ACTIVAR AUTO REFRESCO“, a partir de aquí comenzaremos a ver como cada cierto tiempo pasados unos segundos luego de hacer un commit/push nuevo hacia GitLab se van generando Builds nuevas en nuestro proyecto en Jenkins de forma automática, si desean paralizar las Builds del proyecto en determinado momento lo pueden hacer sin problemas haciendo click en Desactivar el Proyecto (Botón Azul/Gris de la derecha).

Y eso es todo! ahora solo queda escribir código y hacer commits/push desde Git y Jenkins ira realizando las Builds y Pruebas por nosotros!

Espero que os sea de ayuda, hasta otra!

Docker show time!

Con los vientos que corren últimamente y todas las movidas de las nuevas tecnologías si hay algo que no se puede dejar pasar es el hecho de que al parecer el futuro es la virtualización!, no obstante con lo rápido que avanza todo estas tecnologías acotan mas y mas y es en este momento que tenemos que hablar de Docker!

Docker es un proyecto de código abierto que fue lanzado inicialmente el 13 de marzo de 2013 por Solomon Hykes, implementa una API de alto nivel y gestiona contenedores con recursos aislados, estamos acostumbrados a entornos basados en VMWare, VirtualBox, Hyper-V, etc, que no están mal y que para ser sinceros funcionan bastante bien pero no dejan de requerir que se ponga en marcha un OS y sobre el mismo el respectivo servicio que deseas poner en marcha, para que os hagáis una idea, si requieren en algún momento un servidor Web trabajando con VMWare requieren poner en marcha una VM, instalar un OS Base como Debian y luego instalar Apache, Nginex o lo que necesiten, con Docker al estar basado en las funcionalidades del kernel y utilizar aislamiento de recursos y namespaces separados puedes tener un Container exclusivamente con el Apache, otro container con MySQL en el cual gestiones las bases de datos, otro como Volumen de almacenamiento en el que guardes los archivos o ficheros de la Web y se guarden las bases de datos, es decir puedes tener los servicios separados, puedes crear clústers de estos servicios y mucho mas, ademas el despliegue se realiza con tan solo un comando, a continuación os explico un poco mas en detalle.

Lo primero que tienen que saber es que Docker es multi-plataforma, es decir que pueden ponerlo en marcha tanto en Windows, Linux como en Mac OS X, su gestión y administración es a través de su propia CLI que viene cargada de un montón de funcionalidades y opciones, la verdad es que es bastante extenso así que quien quiera ampliar aquí os dejo su documentación oficial.

En mi caso las pruebas las he estado haciendo en mi ordenador de sobre mesa basado en Windows 10, con lo que el terminal que he usado es el de PowerShell aunque para ser sincero he estado tirando mas de Cmder que me ha dejado muy buen sabor de boca por todas sus funcionalidades, aquí os dejo también su web oficial por si le quieren dar un vistazo!

Lo primero que tenemos que hacer es descargar he instalar Docker de su web oficial .

Ahora que ya lo tenemos instalado, imaginemos que queremos desplegar un contenedor con UBUNTU, podemos ubicar la información del contenedor oficial de UBUNTU desde los repositorios oficiales de Docker en este caso el enlace es https://hub.docker.com/_/ubuntu/.

Importante: los caracteres “>_” son para denotar que se trata de un comando, no debes ejecutar los comandos con estos caracteres solo a partir de la palabra docker incluyendo la palabra docker.

Para descargar el contenedor solo debemos ejecutar el siguiente comando en la consola:

>_ docker pull ubuntu

Iniciara una descarga de la imagen en cuestión, puede tardar mas o menos dependiendo de nuestra conexión a Internet.

Una ves finalizada podemos verificar que la imagen se encuentra en nuestro repositorio local con el siguiente comando:

>_  docker images

Ahora podemos desplegar un contenedor usando esa imagen como repositorio local simplemente con el comando:

>_ docker run -it ubuntu

Esto desplegara el contenedor y nos dejara dentro de la Shell del UBUNTU con el que podremos interactuar a plenitud, no obstante en cuanto hagamos un exit de la consola volveremos a nuestro entorno Shell o PowerShell o el que tengamos en uso en nuestro ordenador y el Container en cuestión se detendrá y con el cualquier servicio que este corriendo en dicho Container, pero no os preocupéis, a continuación detallo un montón de opciones con las cuales podrán lanzar Containers en modo dettached y así los contenedores quedaran en funcionamiento siempre, así como el comando para salir de la consola del contenedor actual sin que este se detenga que no es mas que Ctrl-P + Ctrl-Q.

Varios comandos importantes!

Crear un contenedor dettached y definiendo un nombre:

>_ docker run -d –name NOMRE

Si queremos mapear puertos hacia el contenedor:

>_ docker run -p in:out

ej: >_ docker run -p 8080:80 apache
Explicación: este comando inicia un contenedor llamado apache y definiendo la regla de que todo el trafico que entra al 8080 vaya al 80 del contenedor.
NOTA: los contenedores han de llamarse con nombres en minúsculas.

Si usas GIT y te conectas desde la consola de GIT a un contenedor Docker con attach no te dejara con los comandos básicos, así que tienes que añadir el prefijo “winpty“, imaginemos con el contenedor con ID ae143a78a8ba

ej: >_ winpty docker attach ae143a78a8ba

Distribuir imágenes

Descripción: no es mas que la publicación de las imágenes en tu repositorio de Docker como si de GIT se tratara.

>_ #docker login

>_ docker login hub.dondocker.com #DonDocker

>_ docker login [ hub.docker.com ] #Docker (no es necesario especificar)

Ahora etiquetamos la imagen con el nombre del servicio y el usuario:

>_ #docker tag //

>_ docker tag mi-apache hub.dondocker/canonale/mi-apache

>_ docker tag mi-apache [hub.docker.com/]canonale/mi-apache

Una vez etiquetado esta imagen solo falta subirla y, si se hace como con GIT: push.

>_ #docker push //

>_ docker push hub.dondocker/canonale/mi-apache

>_ docker push [hub.docker.com/]canonale/mi-apache

Ahora solo es necesario hacer un pull para disponer de esa imagen.

Salir de un contenedor sin que se detenga:

Para realizar el detach de la consola de un contenedor Docker evitando que este se detenga tenemos que ejecutar la secuencia de comando siguiente:

Ctrl-P + Ctrl-Q (Es decir, primero hacemos CONTROL+P y luego CONTROL+Q)

Crear un nuevo direccionamiento IP para Docker:

>_ docker network create –subnet=172.16.0.0/16 myNewLan

Con –subnet asignamos el tipo de red en este caso el direccionamiento sera clase C con mascara 255.255.0.0 y al final le asignamos el nombre “myNewLan”

Lanzar un container selecionando una red y asignando una IP especifica:

>_ docker run –net myNewLan –ip 172.16.26.10 -it debian bash

Luego de esto podemos hacer un docker ps o un docker ps -a y ver de esta forma el container lanzado, haciendo un attach a dicho container y ejecutando “ip addr” podemos ver que tiene asignada la IP 172.16.26.10.

Creacion de una imagen Docker a partir de un Docker file:

Crearemos una imagen de Docker basada en Debian en su ultima versión que contara con la instalación y puesta en marcha de OpenSSH-Server y habilitaremos la contraseña password para el usuario root, para conseguir que cuando lancemos la imagen en un contenedor podamos hacer login vía SSH con PuTTy por ejemplo hemos de crear un archivo (Bash Script) dentro de un directorio que llamaremos Debian_SSHD y lo llamaremos “entrypoint.sh” y dentro de este archivo el siguiente contenido:


#!/bin/sh

# Start the ssh server
/etc/init.d/ssh restart

# Execute the CMD
exec "$@"

Ahora crearemos el Dockerfile en  el mismo directorio del Script Bash anterior.

Dentro del directorio Docker_SSHd creamos el archivo Dockerfile escrito tal cual como lo he expuesto con la D mayúsculas, y dentro añadimos el siguiente contenido:

FROM debian:latest

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["/etc/init.d/ssh restart"]

Luego debemos acceder vía consola al directorio Docker_SSHd donde tenemos nuestro Dockerfile y ejecutar el comando que hará el build de dicha imagen:

>_ docker build -t img_sshd .

Con el punto (.) del final le decimos que ubique el Dockerfile en el directorio en el que nos encontramos.

Luego solo hay que ver la imagen que se ha generado.

>_ docker images

Y luego lanzar la imagen

>_ docker run -d –name consola sshd_img bash

La verdad es que todo el tema de Docker es para continuar y continuar con varios posts y es lo que pienso hacer mas adelante, el tema es extenso y las funcionalidades y aplicaciones muchas, así que por el momento lo dejare hasta aquí y espero que os sirva de ayuda a todos!

Hasta otra!

Apache Tomcat 8 Proxy Balancer en Debian Jessie

Siguiendo con los Cluster´s y dado que ya hemos hecho uno simplemente de Apache que mejor que darle paso a Tomcat de que se presente de la misma forma!

El esquema sera el mismo que el expuesto para el Cluster Apache Proxy Balancer si no lo has visto te invito a visitar el post y ver los requisitos.

Comencemos!

1.- Instalación y configuración de Servidor Apache2 (Proxy)

Iniciaremos por el servidor Apache que nos hará de proxy para todos las peticiones HTTP:

NOTA!: recuerda que los comandos los coloco con el carácter especial # pero tu has de obviarlo!


apt-get update && apt-get -y upgrade
apt-get install -y apache2 libapache2-mod-jk

Después de esto al acceder desde tu navegador Web a la IP del servidor 192.168.1.30 tendrías que poder la Web por defecto de Apache en la que se te muestra información básica del mismo, algo como lo que sigue:

Ahora configuramos el archivo por defecto de Apache para habilitar el Balancer desde el mismo, editamos el archivo /etc/apache2/sites-enabled/000-default.conf y añadimos las siguientes lineas:


JkMount /status status
JkMount /* loadbalancer

Quedando de esta forma:

Perfecto, ahora vamos a configurar el archivo workers.properties donde se definen los nodos del Cluster Tomcat, en este caso y por defecto el archivo se encuentra en /etc/libapache2-mod-jk/workers.properties, pero crearemos un archivo nuevo y en otra ubicación para evitar complicaciones y le daremos los permisos respectivos:


touch /etc/apache2/workers.properties && chmod 755 /etc/apache2/workers.properties

Ahora lo editamos y añadimos los siguientes parámetros:

worker.list=loadbalancer, status

worker.tomcat1.port=8009
worker.tomcat1.host=192.168.1.41
worker.tomcat1.type=ajp13
worker.tomcat2.port=9009
worker.tomcat2.host=192.168.1.42
worker.tomcat2.type=ajp13

worker.tomcat1.lbfactor=1
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2

worker.status.type=status

Fijate que has de cambiar el puerto y la IP de cada Worker en cada NODO Tomcat, ajustalo a la configuración IP segun tu caso.

Ahora editamos el archivo /etc/apache2/mods-enabled/jk.conf en el que comentamos la linea que comienza con el parámetro JkWorkersFile y añadimos una nueva con la dirección de nuestro nuevo archivo worker.properties creado anteriormente, tendría que quedarte así:

También es necesario que modifiques los parámetros Location que se encuentran mas abajo con la siguiente configuración:


<Location /jk-status>
# Inside Location we can omit the URL in JkMount
JkMount jk-status
Order allow,deny
#Deny from all
Allow from all
</Location>
<Location /jk-manager>
# Inside Location we can omit the URL in JkMount
JkMount jk-manager
Order allow,deny
#Deny from all
Allow from all
</Location>

Ha de quedar como sigue!

 

2. – Instalacion y configuracion de NODOS Tomcat 8

La siguiente configuración es la misma para ambos servidores NODO, solo los valores en ROJO han de ser ajustados segun el servidor que toque.

Lo primero es instalar Tomcat 8 y unos extras:


apt-get update && apt-get -y upgrade
apt-get install -y tomcat8 tomcat8-admin tomcat8-docs tomcat8-examples

Una ves finalizada la instalación tienes que añadir el usuario de administración, el código es el siguiente y ha de ir dentro de las etiquetas principales, solo has de asignar el usuario y la contraseña que desees.

<role rolename=”manager-gui”/>
<user username=”tomcat” password=”secret” roles=”manager-gui”/>

Ahora simplemente reiniciamos Tomcat 8 en los dos NODOS:


/etc/init.d/tomcat8 restart

Despues puedes comprar el estado de los mismos con:


/etc/init.d/tomcat8 status

Luego de esto puedes acceder a cada servidor desde su IP añadiendo el puerto por defecto 8080 (http://192.168.1.31:8080 y http://192.168.1.32:8080)

Si todo esta correcto verías un mensaje por defecto de Tomcat 8.

Ahora es necesario modificar el archivo /etc/tomcat8/server.xml, busca la linea <connector port=”8009” protocol=”AJP/1.3” redirectport=”8443” /> que se encuentra comentada, simplemente tendrás que descomentar eliminado las etiquetas <!– del principio y –> del final, en el NODO Tomcat 1 no hay problema en dejar el port 8009 como puerto por defecto pero en el NODO Tomcat 2 es necesario que lo cambies por otro, por ejemplo 9009.

A continuación hemos de crear un archivo index.jsp para realizar la prueba del balanceador, en este caso crearemos el directorio demo con el siguiente comando en ambos servidores Tomcat:


mkdir /var/lib/tomcat8/webapps/demo

Ahora crearemos dentro de dicho directorio el archivo index.jsp (mkdir /var/lib/tomcat8/webapps/demo/index.jsp) con el siguiente contenido:

<!DOCTYPE html>
<html>
<head>
<title>Hello Tomcat</title>
</head>
<body>
<h1>Welcome to Tomcat Server 1</h1>
<h3>Hello World!</h3>
</body>
</html>

Ten en cuenta cambiar el numero en rojo por 2 para el caso del index.jsp del NODO Tomcat 8 192.168.1.32.

Finalmente reiniciamos los servicios en los 3 servidores:

Apache (192.168.1.30)


/etc/init.d/apache2 restart

Tomcat 1(192.168.1.31)


/etc/init.d/tomcat8 restart

Tomcat 2 (192.168.1.32)


/etc/init.d/tomcat8 restart

Ahora accediendo a la IP del Apache Proxy http://192.168.1.30/demo podremos ver el mensaje Welcome to Tomcat 1 o Welcome to Tomcat 2 variando cada ves que actualicemos la Web ya que el Apache Proxy ira repartiendo o balanceando la carga de solicitudes HTTP que se realizan al servidor entre ambos NODOS Tomcat 8.

Accediendo a http://192.168.1.30/status podrás ver el estado actual de NODOS Tomcat que se encuentran operativos, estadísticas entre otra información valiosa así como realizar algunos cambios en los parámetros de configuración!

Eso es todo! espero que os sirva de ayuda, hasta la próxima!

Retomar una sesión SSH.

Screen Terminal

Cuantas veces has estado realizando una tarea bien sea en la oficina o en algun cliente que esta llevando mas tiempo de lo que te esperabas?, copiando o moviendo archivos o incluso eliminando archivos de grabaciones de audio o video que se estan llevando una vida porque son 50 GB de informacion, el reloj no se detiene y en menos de media hora tienes que estar en camino para poder llegar a recoger a tu hijo@ al cole, lo que estas haciendo es fundamental para que el sistema funcione correctamente y no puedes cerrarlo todo y dejar al cliente colgado!

Pues bien, la solucion es simple, “SCREEN“, si no esta instalado en el servidor en el que estas operando instalalo con APT:

apt-get install screen

Su uso es muy sencillo, una ves instalado solo tienes que abrir una consola con el comando screen:

$ screen -S nombreDeLaSesion

Algunas opciones interesantes de esta app son las siguientes:

OPCIONES
# -S sockname Da nombre a la sesión [pid].sockname.
# -ls Lista las sesiones abiertas de screen.
# -r Reattach a un sesión. Es posible especificar el nombre ej: screen -r sockname.
# -t título Permite dar un título a una ventana.
# Ctrl-a ? Ayuda y sumario de funciones.
# Ctrl-a c Crear una nueva ventana (sin nombre).
# Ctrl-a Ctrl-n Cambiar a la Siguiente o Anterior terminal.
# Ctrl-a Ctrl-N Cambiar a la Siguiente o Anterior terminal N [0-9].
# Ctrl-a ” Lista navegable de terminales en funcionamiento.
# Ctrl-a a Limpiar un Ctrl-a pulsado por error.
# Ctrl-a Ctrl-d Desconectar y dejar la sesión en funcionamiento.
# Ctrl-a x Bloquear todas las terminales con una clave.
# Ctrl-a d Dettach. Sale de la sesión pero la deja en segundo plano junto a todas sus ventanas.
# exit Cierra la ventana actual. Cerrando todas las ventanas se cierra la sesión de screen.

Como puedes ver hay numerosas opciones bastante interesantes yo hace años que la uso y te aseguro que uso como mucho 3 o 4 de ellas solamente, combinada con Tmux y otras las aplicaciones en un entorno de producción donde tienes que estar constantemente monitorizando o haciendo varias cosas vía Shell su uso se hace imprescindible, espero que te sea de ayuda el dato!

Hasta otra…

Instalación de COMPOSER version 1.4.1

Para los que como yo están adentrándose en el PHP Framework Symfony seguramente el nombre de COMPOSER les llegara a ser familiar, este mini-post tiene como objetivo simplemente comentar como instalarlo en un server Linux Debian Jessie 8.7, si eres como yo seguramente tengas un pequeño server o maquina virtual con Debian para cuando necesitas probar cosas o simplemente hacer algún desarrollo LAMP, los comandos son los siguientes y no hay mucho mas:

# apt-get update
# apt-get install curl php5-cli
# curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Al finalizar te mostrara un mensaje como este el que sigue indicando que se ha instalado correctamente:

Luego de esto solo tenemos que escribir en la consola el siguiente comando y nos mostrara la imagen que he colgado al inicio de este Post con una lista de todos los comandos que se pueden utilizar con COMPOSER.

Así de simple!

MYSQL Cluster 7.5.5 en Ubuntu 16.04.2

Hoy quiero continuar con el tema de los cluster´s y en este caso le ha tocado el turno a MySQL, esa famosa base de datos en la que muchos nos hemos apoyado en nuestros proyectos. Os comentare como hacer un cluster con cuatro servidores en los que definiremos 1 Manager, 2 Data Nodes y 1 MySQL Node, esto nos servirá para tener un entorno de base de datos con MySQL redundado y de alta disponibilidad, muchos pensaran: ¿Porque no hacerlo con Heartbeat y DRBD?, si también se puede sin problemas, pero esta ves quiero comentar como hacerlo con las herramientas que nos proporciona el mismo fabricante o desarrollador con la herramienta MySQL-Cluster en su versión reciente a día de hoy 7.5.5.

Como servidores usaremos Ubuntu en su versión actual LTS a día de hoy 16.04.2, no obstante se puede hacer sin ningún problema de la misma forma en Debian obviando el prefijo “sudo” en cada comando siempre que entremos como root a nuestros Debian, no obstante hoy lo haré todo bajo Ubuntu.

Requisitos:

  1. Cuatro (4) Maquinas Virtuales con Ubuntu Server 16.04.2 previamente instalado. (el proceso de instalación de Ubuntu es algo que no tocare en esta ocasión, quizás en otro Post), podéis usar VirtualBox, VMware, Hyper-V o con lo que os sintáis mas cómodos trabajando.
  2. Visibilidad de red entre las 4 maquinas virtuales, a efectos prácticos usaremos la red 192.168.1.0/24.
  3. El paquete de MySQL-Cluster (mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar) en su versión 7.5.5 en su versión Generic Linux en formato .TAR que podemos descargar de la Web oficial https://dev.mysql.com/downloads/cluster/
  4. Tiempo y ganas!

Manos a la obra

Os expongo a continuación como debería quedar el direccionamiento IP:

Nodo Dirección IP
Nodo de administración (MGM) 192.168.1.110
Nodo de datos (NDBD) “A” 192.168.1.111
Nodo de datos (NDBD) “B” 192.168.1.112
Nodo MySQL server (SQL) 192.168.1.113

Y para que os hagáis una idea mas gráfica la siguiente imagen:

Paso 1 – Instalación y configuración del Nodo de Administración (MGM).

Nos conectamos a la Shell de dicho servidor, tomando en cuenta que el servidor es un Debian y nos conectamos con el usuario principal con el que fue instalado deberíamos de estar en la ubicación /home/NOMBREDEUSUARIO donde NOMBREDEUSUARIO sera el nombre que hayamos asignado a dicho user, en mi caso es “xnosx” con lo que el directorio de mi usuario es /home/xnosx/.

En mi caso he descargado el archivo mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar de la Web de MySQL vía HTTP con lo que me he conectado al servidor MGM via WIN-SCP y cargado el archivo mi directorio home /home/xnosx/mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar y estando en mi directorio de usuario /home/xnosx hacemos los siguientes comandos-pasos.

NOTA: si quieres saber en que directorio te encuentras ejecuta el comando:

# pwd

Descomprimimos el archivo .TAR:

# sudo tar -xvzf mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar

Esto creara el directorio /home/xnosx/mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686, ahora re-nombramos dicho directorio a simplemente mysql.

# sudo mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686 mysql

Ahora entramos al directorio mysql copiaremos el contenido de los ficheros que comienzan por ndb_mgm del directorio bin y los pondremos en /usr/local/bin que es el directorio de los binarios de Linux y les añadiremos permisos de ejecución con los siguientes 3 comandos.

# cd mysql
 # cp bin/ndb_mgm* /usr/local/bin/
 # chmod +x /usr/local/bin/ndb_mgm*

Ahora debemos configurar este nodo de administración (MGM) creamos el directorio “mysql-cluster” dentro de “/var/lib” y dentro de “mysql-cluster” añadimos el fichero “config.ini” con la configuración que sigue:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M

[mysqld default]

[ndb_mgmd default]

[tcp default]

# Cluster Control / Management node
[ndb_mgmd]
hostname=192.168.1.110

# Data Node 1
[ndbd]
hostname=192.168.1.111
DataDir= /var/lib/mysql-cluster

# Data Node 1
[ndbd]
HostName=192.168.1.112
DataDir=/var/lib/mysql-cluster

# SQL Node
[mysqld]
hostname=192.168.1.113

# If you to add new SQL Node
[mysqld]

Ahora iniciaremos el nodo de administración MGM con el siguiente comando:

# sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload --configdir=/var/lib/mysql-cluster/

NOTA: noten que he he puesto el “–reload” en negritas y rojo, esto es porque sin este parámetro en el comando os dará error!

Si no nos da ningún error en principio el NODO MGM ya esta en marcha pero si reiniciamos el servidor no levantara el servicio por si solo, así que debemos añadir dicha linea al archivo /etc/rc.local, de esta forma el sistema levantara el servicio en el momento en que este arrancando la maquina virtual!

# sudo echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini --reload --configdir=/var/lib/mysql-cluster/' >> /etc/rc.local

Ahora tenemos que comprobar que el servicio esta levantado y funcionando, lo haremos con un “netstat -plntu” y luego entraremos con el comando “ndb_mgm” a la consola del mysql-cluster y una ves dentro con un “show” podremos ver el estado de las conexiones donde se vera que el nodo MGM se encuentra levantado y conectado como se muestra en la imagen a continuación:


Paso 2 – Instalación y configuración de los NODOS de datos (DATA-NODE).

Ahora vamos con los DATA NODE´S, la siguiente configuración ha de hacerse exactamente igual en ambos equipos con IP´s 192.168.1.111 y 192.168.1.112 ya que ambos serán por así decirlo una replica y estarán enlazados hacia el MGM, con lo que la misma configuración que os expongo acá ha de hacerse exactamente de la misma forma en ambos equipos, comencemos.

Como actualmente ya tenemos el paquete .TAR de mysql-cluster en el MGM y se supone que desde el MGM podemos ver el resto de servidores a través de la red, podríamos cargar este paquete a los dos servidores NODO con un simple SCP, asi que accedemos a nuestro servidor MGM y estando en el mismo directorio en el que se encuentra el paquete .TAR hacemos los siguientes comandos reemplazando la palabra USUARIO de cada comando con los respectivos nombres de usuario que hayan creado en estos dos servidores nodos:

# sudo scp mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar USUARIO@192.168.1.111:/home/USUARIO/
# sudo scp mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar USUARIO@192.168.1.112:/home/USUARIO/

Una ves cargados los paquetes a los dos servidores NODO comenzamos la instalación-configuración, primero debemos instalar una dependencia con el siguiente comando:

# sudo apt-get update && sudo apt-get install libaio1

Una ves finalizada la instalación de la dependencia debemos añadir el grupo “mysql” y el usuario “mysql” ligado al grupo que hemos creado, lo hacemos con el siguiente comando:

# sudo groupadd mysql && sudo useradd -g mysql mysql

Ahora teniendo esta parte podemos comenzar la instalación del MySQL-Cluster, como con el MGM descomprimiremos el paquete .TAR, re-nombramos el directorio generado por simplemente “mysql” y copiamos ese directorio “mysql” al directorio “/usr/local/”:

# sudo tar -xvzf mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar
# sudo mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686/ mysql/
# sudo mv mysql /usr/local/

Ahora accedemos a dicho directorio “/usr/local/mysql”:

# cd /usr/local/mysql

Ahora debemos crear las bases de datos del sistema, para ello ejecutamos el siguiente comando:

# sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

NOTA: al finalizar el comando nos devolverá una linea como esta “A temporary password is generated for root@localhost: ********” indicando la contraseña que se ha generado automáticamente para root respecto a MySQL, apuntarla en algún sitio porque luego os hará falta!

Si no devuelve ningun error proseguimos con la copia del ejecutable al directorio “/etc/init.d” y lo habilitamos:

# sudo cp support-files/mysql.server /etc/init.d/mysql
# sudo systemctl enable mysql

Ahora necesitamos mover todos los comandos binarios de MySQL al lugar que corresponden y crear el respectivo enlace simbólico y eliminar del directorio actual el directorio “bin”:

# sudo mv bin/* /usr/local/bin
# sudo rm -rf bin/
# sudo ln -s /usr/local/bin /usr/local/mysql

Ahora cambiamos los permisos y propietario del directorio “mysql” para que el propietario sea root y el grupo mysql y asignamos como propietario al directorio data a mysql:

# sudo chown -R root:mysql .
# sudo chown -R mysql data

Ahora crearemos el archivo de configuración “/etc/my.cnf” en ambos nodos con exactamente la misma configuración que expongo a continuación:

# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql

# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.1.110

[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.1.110

# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Ahora debemos crear los directorios de data de ambos nodos y asignar como propietario a “mysql”:

# sudo mkdir -p /var/lib/mysql-cluster/
# sudo chown -R mysql /var/lib/mysql-cluster

Ahora solo nos queda inicializar ambos nodos con los siguientes comandos:

# sudo ndbd --initial
# sudo systemctl start mysql

La consola nos devolverá un mensaje similar a “– Angel connected to ”192.168.1.110:1186″ y “– Angel allocated nodeid: 3”, esto quiere decir que el nodo se ha conectado al MGM y se encuentra operativo, podemos comprobarlo como con el MGM con los comandos “netstat -plntu” y desde el MGM hacer un “ndb_mgm” y luego un “show” donde veremos los nodos ya conectados.

Ahora teniendo toda esta parte debemos cambiar el password de root que se ha generado por el que nosotros deseemos en dicho nodo, con el siguiente comando se nos solicitara el nuevo password y la confirmación del mismo y se nos harán una serie de preguntas a las que responderemos según nuestros criterios y requerimientos:

# sudo mysql_secure_installation

Ahora una ves asignada la nueva contraseña ya podemos acceder desde la consola de cualquiera de los dos NODOS a la consola de MySQL para comprobar que todo funciona correctamente:

# sudo mysql -u root -p

Paso 3 – Instalación y configuración del nodo SQL (SQL-NODE).

En este ultimo servidor que sera el nodo desde el cual accederemos a los datos de los DATA-NODE que acabamos de configurar, el proceso es idéntico y solo cambia en algunos pasos.

Debemos instalar la dependencia con el siguiente comando:

# sudo apt-get update && sudo apt-get install libaio1

Una ves finalizada la instalacion de la dependencia debemos añadir el grupo “mysql” y el usuario “mysql” ligado al grupo que hemos creado, lo hacemos con el siguiente comando:

# sudo groupadd mysql && sudo useradd -g mysql mysql

Enviamos el archivo .TAR a este NODO desde el MGM como hicimos con los DATA-NODE:

# sudo scp mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar USUARIO@192.168.1.113:/home/USUARIO/

Ahora teniendo esta parte podemos comenzar la instalacion del MySQL-Cluster, descomprimiremos el paquete .TAR, re-nombramos el directorio generado por simplemente “mysql” y copiamos ese directorio “mysql” al directorio “/usr/local/”:

# sudo tar -xvzf mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686.tar
# sudo mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-i686/ mysql/
# sudo mv mysql /usr/local/

Lanzamos el script

# sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# sudo mv bin/* /usr/local/bin
# sudo rm -rf bin/
# sudo ln -s /usr/local/bin /usr/local/mysql

Ahora cambiamos los permisos y propietario del directorio “mysql” para que el propietario sea root y el grupo mysql y asignamos como propietario al directorio data a mysql:

# sudo chown -R root:mysql .
# sudo chown -R mysql data

Ahora crearemos el archivo de configuración “/etc/my.cnf” en ambos nodos con exactamente la misma configuración que expongo a continuación:

# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql

# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.1.110

[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.1.110

# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Inicializamos MySQL

# sudo systectl start mysql

Y finalmente cambiamos el password de root autogenerado:

# sudo mysql_secure_installation

Ahora tenemos que añadir el comando systemctl start mysql al archivo “/etc/rc.local” para que el servicio arranque de manera automática en el momento en que iniciamos nuestro servidor y ya tenemos esta parte, incluso ya podríamos ver desde la consola del MGM que el nodo se encuentra conectado y enlazado.


Paso 4 – Pruebas!

Ahora, desde la consola de nuestro SQL-NODE podemos conectarnos a la consola de MySQL y crear una base de datos de prueba:

# mysql -u root -p

Añadimos la contraseña nueva que hemos asignado a root anteriormente y estamos dentro de la CLI de MySQL, ahora con los siguientes dos comandos podremos ver las bases de datos que se encuentran actualmente, crearemos una nueva base de datos y luego volveremos a listar las bases de datos para comprobar así que la nueva base de datos se ha creado satisfactoriamente:

# show databases;
# create database db_sqlnode;
# show databases;

Con esto tendríamos que ver la nueva base de datos creada satisfactoriamente, si repetimos esta misma operación en el DATA-NODE principal veremos que allí también se encuentra creada la base de datos nueva, y si reiniciamos el DATA-NODE principal el DATA-NODE que esta como secundario sincronizaría dicha base de datos nueva manteniendo así la data de forma homogénea en todos los servidores.

Con esto ya tenemos nuestro cluster de MySQL con alta disponibilidad!

Cluster Apache Proxy Balancer

Que es un proxy?

Según la Wikipeda “en una red informática, es un servidor, programa o dispositivo, que hace de intermediario en las peticiones de recursos que realiza un cliente (A) a otro servidor (C)”, es decir, es un método usado para controlar en cierta forma el trafico.

En este caso quiero referirme específicamente a Apache Proxy, digamos que tenemos una pequeña Web corporativa donde mostramos simplemente la información de los servicios de nuestra empresa, un pequeño formulario de contacto y algunas imágenes, es evidente que una Web de este tipo no recibirá muchas visitas al día, digamos que como mucho concurrente-mente tendrá un aproximado de entre 10 y 50 visitas al día, ahora pensemos en el trafico que puede llegar a recibir Facebook!, la expresión correcta seria MADRE MIA! no?, pues si, no se la cifra exacta de la cantidad de visitas que recibe Facebook, pero os aseguro que la Web de Facebook no se almacena en un simple paquete de Hosting Reseller, ni en un VPS, ni siquiera en un server dedicado sino en granjas de servidores para garantizar así que la cantidad de visitas simultaneas que recibe esa Web no haga que los servidores caigan y consigan así ese trending topic en Twitter con el hashtag #facebook-down o algo similar.

Hoy quiero plasmar como poner en marcha de forma muy sencilla un cluster con balanceo de carga con un servidor Apache 2.4.10 basado en Debian Jessie 8.7 como HTTP Proxy y 2 servidores Backend basados en Debian Jessie 8.7 tambien, aunque como refiero en la imagen de arriba puede tratarse de servidores que se encuentren en el backend basados en distintos OS o incluso distintos tipos de versiones de Web Server como NGINX, IIS, Apache, etc.

IMPORTANTE:

Obviar en todos los comandos el caracter especial #

Que necesitamos:

  1. Una instalación limpia de 3 servidores (pueden ser maquinas virtuales tranquilamente no os agobies) con Debian Jessie 8.7 (No explicare como instalar Debian en esta ocasión, quizás mas adelante y luego añado acá el link a dicho post) .
  2. Un ordenador cliente con Kitty o en su defecto Putty, o la consola con la que estés habituado a trabajar.
  3. Obviamente conexión a Internet 😉
  4. Ganas de teclear un rato!

A ensuciarnos las manos

Los siguientes pasos son a ejecutar en los tres servidores:

Hacemos un update de las fuentes de APT:

# apt-get update

Instalamos Apache, actualmente al instalarlo desde APT instalara la version 2.4.10, pero probablemente si se hace en un momento en el que el release sea otra versión sera la que instale.

# apt-get install apache2 apache2-doc

Cada servidor ha de tener su respectiva IP con lo cual yo en particular asignare las siguientes:

  • 192.168.1.30 (Servidor Apache Proxy)
  • 192.168.1.31 (Servidor Apache Cluster 1)
  • 192.168.1.32 (Servidor Apache Cluster 2)

Teniendo instalado Apache 2.4.10 en cada servidor modificamos el contenido del index en los dos servidores Backend (Cluster1 y Cluster2) con el siguiente comando (como root):

En el Servidor Apache Proxy:

# cp /var/www/html/index.html /var/www/html/index_.html && echo "PROXY" > /var/www/html/index.html

En el Servidor Apache Cluster 1:

# cp /var/www/html/index.html /var/www/html/index_.html && echo "CLUSTER 1" > /var/www/html/index.html

En el Servidor Apache Cluster 2:

# cp /var/www/html/index.html /var/www/html/index_.html && echo "CLUSTER 2" > /var/www/html/index.html

Ahora si accedemos a cada una de sus IP´s a traves de un navegador veremos que cada una nos muestra PROXY o CLUSTER 1 o CLUSTER 2.

Ahora vamos al servidor Proxy y desde la consola necesitamos activar o habilitar los módulos necesarios para que Apache Proxy funcione correctamente con lo que ejecutamos los siguientes comandos uno a uno, con la ejecución de cada uno de estos comandos veremos de vuelta el aviso de que se debe reiniciar Apache para que entre en funcionamiento cada modulo, no obstante los ejecutamos todos y finalmente haremos el reinicio de Apache.:

# a2enmod proxy
# a2enmod proxy_http
# a2enmod proxy_balancer
# a2enmod lbmethod_byrequests

Ahora reiniciamos Apache 2 con el siguiente comando:

# service apache2 restart

Ahora en principio ya tenemos lo necesario para realizar la configuración del Proxy, así que vamos a  ello.

En el servidor Proxy con IP 192.168.1.30 hacemos un backup del archivo inicial por si acaso y editamos el archivo

/etc/apache/sites-available/000-default.conf quedando con el siguiente de la siguiente manera:


<VirtualHost *:80>

<Proxy balancer://mycluster>
BalancerMember http://192.168.1.31:80
BalancerMember http://192.168.1.32:80
</Proxy>

ProxyPreserveHost On

ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/

</VirtualHost>

En este caso se trata del archivo de configuración de Apache por defecto, lo que se refiere a cualquier solicitud de cualquier dominio que responda al puerto 80 (HTTP), en la sección de Proxy indicamos que se trata de un balancer llamado mycluster, dentro de las etiquetas incluimos a los dos miembros con la directiva BalancerMember indicando su respectiva ruta y puertos correspondientes, el parametro ProxyPreserveHost permite que el salto del servidor FronEnd (Proxy) al servidor BackEnd Cluster 1 o 2 sea transparente para el visitante de la Web, y las directivas ProxyPass y ProxyPassReverse gestionan el salto y la vuelta del servidor de FrontEnd a BackEnd.

Luego de estas modificaciones solo nos resta reiniciar Apache en el servidor Proxy:

# service apache2 restart

Ahora al tratarse de la configuración por defecto del servidor Proxy a nivel de Apache si intentamos acceder a su dirección IP a través del navegador con http://192.168.1.30 veremos que lo que nos muestra es CLUSTER 1, y si refrescamos o actualizamos la Web el contenido cambiara a CLUSTER 2, cada ves que refresquemos comenzara a pasarnos a mostrar el contenido de lo que hay en /var/www/html/* de cada uno de los servidores que estén añadidos al Cluster-Balancer, no obstante como usuarios siempre pensaremos que estamos accediendo al contenido en el Servidor Proxy.

Lo importante de todo esto es la escalabilidad y estabilidad, esto tomando en cuenta que en el caso de que la cantidad de visitas comience a llegar a tal punto en el que los servidores comiencen a caer podemos ir escalando el servicio para conseguir asi repartir de mejor manera el trafico o las peticiones HTTP de los usuarios, mientras mas visitas, añadimos mas servidores al cluster.

Ahora lo siguiente tiene que ser un cluster de MySQL, y dado que esto lo he montado todo en VMWare lo otro sera llevarlo a containers de Docker y comprobar diferencias de rendimiento!

Manten el statu-quo!

Adicional!

Hay algo adicional e interesante que es usado para manejar o gestionar lo relacionado con el balanceo que viene implícito en el Apache, el Balancer-Manager, para activarlo solo has de añadir una configuración adicional a la configuración del VHost, en este caso el archivo quedaría así:


<VirtualHost *:80>
BalancerMember http://192.168.1.31:80
BalancerMember http://192.168.1.32:80

ProxyPreserveHost On
SetHandler balancer-manager
Order allow,deny
allow from 192.168.1

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/

</VirtualHost>

Ahora reiniciamos el servicio de Apache como siempre:

# service apache2 restart

De esta forma accediendo desde la IP del Proxy y añadiendo balancer-manager como ruta podemos acceder al panel de configuración del Balancer del Proxy donde verían algo como lo que muestro en la imagen a continuación donde tendrás la opción de hacer cambios a nivel del Balancer y aplicarlos en caliente sin necesidad de reiniciar el servicio de Apache!

Reconstrucción de ligamento medial patelofemoral (MPFL) 1era Parte

Son muchas las cosas que han pasado en estos casi 2 años desde que puse en marcha este blog y que por mil motivos no continué, inicialmente por mi sincera incapacidad de dedicar algo de tiempo a el para al menos apuntar algo una ves  a la semana, algunas de estas cosas mas trascendentales o importantes que otras, una de ellas y la que creo mas importante me lleva a hablar un poco de medicina,  a lo que dedicare este post.

Ligamento Medial Patelo Femoral o en sus siglas MPFL es un ligamento que da cierta estabilidad a la rodilla permitiendo que la rotula se mantenga digamos centrada, desde mis 17 o 18 años venia padeciendo de problemas en mis dos rodillas ya que siempre han sido un poco laxas y en dos oportunidades sufri de luxacion de la rotula de mi rodilla derecha, esto al parecer hizo que mis ligamentos se estiraran o desgarraran y que con el tiempo sufriera de cada ves mas dolor en mis rodillas. No obstante no fue sino hasta hace aproximadamente 2 años y medio que bajando la sierra del Collserola con mi familia y los compañeros de clase de mi hija, cargando una mochila de camping de unos 15 kilos, con mi hija en brazos y mi mascota Nymeria (Border Collie de 1 año) atada al cinto de la mochila terminara por crujir (se veia venir), esto me llevo a sufrir de dolores bastante insorportables a partir de alli, trabajar a diario con dicho dolor hasta el punto de cojear mientras caminaba y no poder conducir mas de 20 minutos sin dolor, sin contar que mi actividad fisica se redujo a cero, pasar de correr 6 km diarios y hacer hasta mas de 50 km en bici a no hacer absolutamente nada e incrementar mi peso en 12 kg mas.

Finalmente lo que se sabia, operacion de reconstruccion de ligamento media patelo femoral, la operacion o cirujia para quien no la conozca en el siguiente video esta bastante detallado, les pongo en tipo animacion para evitar ser un poco gore al respecto:

Pues nada! comentar que la operacion realmente no es nada dolorosa, obvio, estas sedado hasta las celulas, te ponen lo que llaman un bloqueo a nivel del nervio femoral, eso te deja con la pierna dormida desde la cadera hasta la puta de los dedos, adicional te ponen la epidural con lo cual todo lo que hacen con tu pierna es totalmente desconocido para ti durante todo el procedimiento, por otro lado a mi adicional a todo ello creo que me han puesto algun tipo de anestesia adicional bien sea a nivel respiratorio o en la via ya que os juro que de lo ultimo que me acuerdo es del anestesista poniendome algo en la via y la mascarilla de oxigeno, lo proximo que recuerdo es del movimiento que note cuando me sacaban de la mesa de operaciones y me pasaban a la camilla para llevarme a reanimacion.

Ahora bien, nada mas llegar a reanimacion, el dolor comienza a aumentar rapidamente, es alli cuando te ponen el bloqueo en el nervio femoral, previa aplicacion de la respectiva morfina que siendo sinceros mola un poco LOL, en mi caso la operacion fue en el Hospital de la Esperanza y he de decir que la atencion muy bien, las enfermeras estupendas, algunas no tanto ya que se ve que no tienen mucha vocacion y estan mas por la pasta, pero luego el resto super amables y muy concientes de que somos personas y no numeros en un papel.

Mi medico cirujano al menos en mi experiencia ha sido genial, es un tío al que la experiencia se le nota con tan solo hablar 2 minutos con el, muy profesional, con un estado de animo positivo y que transmite confianza, muy profesional en todo momento, os dejo la información de el por si en algún momento tienen la necesidad de consultar con un especialista yo sinceramente lo recomiendo con los ojos cerrados su nombre es Joan Leal Blanquet en la Web de topdoctores.es podrán ver un poco mas de su información profesional.

A mi en particular me recibieron para el ingreso el dia anterior a la operacion sobre las 21:00h, la operacion fue a las 08:00h del dia siguiente, el dia anterior puedes comer y beber lo que quieras hasta media noche, ya despues de ello te piden que no comas ni bebas nada, al dia siguiente muy temprano lo primero es el razurado de la pierna entera, ducha con un jabon especial y enjuague bucal con un tipo de enjuague que ellos suelen usar, entiendo que sera tema de normativas sanitarias o que se yo, y si, si me preguntas tienes que ir con la tipica bata de papel e incluso calzoncillos del mismo material que ellos mismos te proporcionan, realmente incomodo la verdad! LOL

Como recomendación, si os toca ser intervenidos en las mismas condiciones/hospital, salir cenados de casa o cenar antes de entrar al hospital que fue lo que yo hice, cerca hay varios sitios donde cenar bien, llevar un disco duro con pelis y un portátil es fundamental, o una tablet en su defecto, aunque creerme que entre los sedantes y las visitas de las enfermeras a la habitación lo que mas desearan es dormir plácidamente en los pocos momentos en los que se encuentren a gusto!

De momento y para no hacer tan largo este post, lo dejare hasta aquí, no obstante os dejo algunas fotos del primer día antes de la operación y en un próximo post añado mas.

PD: el orden de las fotos es descendente en cuanto a cronología se refiere!

Un presunto sedante para dormir mejor
Otro angulo de la habitación, no muy chula la verdad, las plantas de abajo están mucho mejor porque están reformadas
Lo ultimo que te permiten comer a media noche de la víspera de la operación
La cama, un poco incomoda la verdad
Mi antes de la operación de la rodilla
Normas y reglas para las visitas en el hospital

Retomando cosas!

Hace siglos que ni tan siquiera recordaba que tenia un blog en la raíz de mi dominio de siempre (widevision.es), al parecer las horas son pocas y los días me quedan cortos para tantas cosas, no soy de mucho escribir, mas bien de mucho leer, normalmente suelo estar aprendiendo o probando sistemas nuevos, nuevos lenguajes de programación, intentando desesperadamente quizás retomar algún proyecto olvidado, pero otras veces me encuentro tan saturado de tantas cosas relacionadas con mi área laboral que termino haciendo cosas como bricolaje, dibujando, tocando el bajo eléctrico o simplemente viendo alguna serie de moda en Netflix. Hacia mucho tiempo que no escribía acá y creo que algo importante en la vida es tener los hábitos un poco organizados, en muchas oportunidades me parece que intento abarcar muchas cosas, muchas áreas y muchos temas sin considerar que los días tienen solo 24 horas, que tengo familia y que en la vida no todo es la parte laboral o profesional sino que también es de vital importancia dedicar un poco de tiempo a la familia, o incluso a aquellas pequeñas cosas de las que aveces ni nos inmutamos por los ritmos frenéticos de vida que tenemos en nuestra era.

Cosas tan simples como disfrutar de una buena taza de café y simplemente disfrutar del silencio, ver las nubes, ver los arboles, es mas, podemos irnos a algo tan básico como RESPIRAR!, si, aveces hasta respirar lo hacemos mal por el estrés, por no concentrarnos en ello, en fin, creo que es importante aveces hacer un completo breake de todas esas cosas que nos van intoxicando en el día a día y detenerse, y ni tan siquiera pensar, solo existir por un rato, respirar profundamente y sin mas.

Han pasado muchísimas cosas desde mi ultimo post aquí, y como algo que quiero hacer verdaderamente es retomar este blog, poderlo comenzar a desplegar por así decirlo y donde pueda comenzar a guardar un poco de información o compartir alguna otra, intentare dedicar algo de tiempo a diario para irlo actualizando, no se si tu ahora mismo estés leyendo esto, ni siquiera se en que fecha lo estarás leyendo, pero espero que lo que antes, ahora o en un futuro próximo comparta de alguna manera te sirva, bien sea a nivel profesional o personal, y si no es así al menos que a mi me sirva para desahogar o para invertir parte de mi tiempo, o que incluso me sirva para conseguir esa pequeña meta que me estoy planteando ahora mismo que no es mas que hacer que algo mas sea habitual en mi vida, tanto como el café que tomo por las mañanas.

Saludos!

Sysadmin Day (Ultimo viernes de Julio)

Sysadmin Day
Sysadmin Day

El pasado viernes 25/07 se celebro el día de los Administradores de Sistema, a todas aquellas personas que se dedican a esta actividad como su servidor, felicidades!

Parece mentira que aun existen personas que piensan que los Administradores de Sistema somos personas que perdemos nuestro tiempo frente a los ordenadores, otras piensan que somos locos, muchísimas veces me he topado con personas que me dicen cosas como: es que los informáticos son personas especiales, es decir son medio locos tu sabes no?, bueno como dice el dicho cada cabeza es un mundo, lo cierto es que los Administradores de Sistemas o Informáticos en general somos personas más que nada tercas, empecinadas en lograr cosas que parecen difíciles pero que muchas veces solo requieren un poco de tiempo o paciencia, yo en particular suelo ser así, en el momento en que estoy intentando instalar algo y no lo logro, o que estoy programando alguna función, o simplemente intentando automatizar algún flujo de trabajo en una red o algún ordenador y veo que no lo logro, es cuando me armo de paciencia y hasta que no lo consigo no me levanto del asiento, simplemente un poco de paciencia, lógica y muchas ganas de leer son pienso yo las herramientas más importantes para lograr nuestros cometidos!
A quien lo sea: Feliz día del Administrador de Sistemas!