Configurar compresión gzip en nginx

nginx La compresión de lo que el servidor web envía al cliente es una de las técnicas más sencillas para mejorar la respuesta de nuestras webs. En nginx lo habilitamos facilmente a través de las directivas adecuadas del archivo nginx.conf en el directorio /etc/nginx. Por defecto suelen aparecer pero comentadas. Una configuración típica podría ser esta:

 ##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

La información de que hace cada línea la tienes aquí. Y no olvides que una vez hechos los cambios debes reiniciar el servidor web para que tomen efecto.

Status Cake,una alternativa gratuita a pingdom

herramientas Seguro que conoces Pingdom, la popular herramienta web de monitorización que dispone de 14 días de prueba gratis, pero lo mas probable es que no conozcas Status Cake, una alternativa totalmente gratuita en su opción básica (perfectamente funcional) con una alternativa comercial más avanzada.

panel principal de status cake

Status Cake dispone de monitores http, dns, smtp, ssh, ping y tcp genéricos. En su opción gratuita realiza tests de entre 5 minutos y 24 horas y elige aleatoriamente el servidor desde el que se realiza la prueba (aunque puedes indicarle si quieres confirmación del estado desde diferentes lugares) y te alerta por correo de cualquier incidencia. En la opción de pago admite que elijas manualmente desde donde se harán las pruebas, granularidad de hasta 1 minuto en los tests y alertas por SMS.

Además, disponemos de completos paneles informativos de las incidencias y tiempos de respuesta de los diferentes monitores como puedes ver en los siguientes pantallazos:

status cake key details

status cake status periods and downtime root causes

status cake latest tests

Y informes más “ejecutivos” que pueden enviarse directamente por email para informar al jefe de nuestro buen trabajo 🙂

status cake email reports

Otra alternativa más también gratuita es Uptime Robot pero después de evaluarlas ambas me quedo con Status Cake. Ahí te dejo también el enlace por si quieres echarle un vistazo 😉

Centralizando los datos de munin de varios servidores

herramientas Hemos hablado bastante por aquí en los últimos años acerca de munin. No en vano se trata de una de mis herramientas de monitorización favorita. Vamos a completarlas con alguna cosa más.

Cuando queremos monitorizar varios servidores diferentes, lo más cómodo es verlos todos en la misma página del navegador. Para ello hacemos lo siguiente:

En primer lugar, recordad que munin tiene dos módulos diferentes: munin y munin-node. En el artículo inicial de esta “saga” instalábamos tres paquetes: munin, munin-node y munin-plugins-extra. Ahora instalaremos los tres sólo en la máquina que centralizará los datos de la monitorización. Esta máquina se configurará igual que vimos ya en su día y debe de contar con un servidor web, intérprete de php y todo lo que ya hablamos en su momento. En las máquinas que solamente queremos monitorizar sólo instalaremos los dos paquetes finales (munin-node y munin-plugins-extra).

En todas las máquinas (salvo la que centralizará la comunicación) tendremos que editar el fichero /etc/munin/munin-node.conf. En este fichero nos aseguraremos de que aparecen dos líneas como estas:

host_name nombre2.midominio.net
allow 33.44.55.66

Donde 33.44.55.66 es la IP de la máquina que centralizará la monitorización de munin y nombre2.midominio.net será el nombre con el que queremos que aparezca esta máquina en nuestro panel de monitorización. Una vez hecho esto reiniciamos el daemon de munin-node: systemctl restart munin-node

En la máquina donde queremos ver las gráficas editamos el fichero /etc/munin/munin.conf y escribimos algo como esto:

[nombre1.midominio.net]
    address 127.0.0.1
    use_node_name yes

[nombre2.midominio.net]
    address 11.22.33.44
    use_node_name yes

[nombre3.midominio.net]
    address 55.66.77.88
    use_node_name yes

El primer bloque (nombre1.midominio.net) corresponde a la máquina en la que estamos editando el fichero y por eso usamos 127.0.0.1 como dirección. Cada uno de los otros corresponde con una de las máquinas cuya información queremos recoger y centralizar en esta.

Por defecto las máquinas aparecerán en el panel de monitorización en orden alfabético. Si queremos alterar dicho orden debemos de introducir una nueva directiva:

[midominio.net;]
        node_order nombre2.midominio.net nombre1.midominio.net nombre3.midominio.net

Ojo al punto y coma final de la directiva que es importante para que funcione. Luego reiniciamos el daemon munin (systemctl restart munin).

Ahora, cuando entremos en nuestra página de monitorización veremos en la sección overview una línea llamada midominio.net y luego otra por cada una de las máquinas monitorizadas:

Página de Overview de munin con varios servidores

Y si pulsamos en la línea correspondiente a midominio.net veremos los datos de todos los servidores ordenados en columnas:

Página de monitorización de munin con varios servidores

Y ya. La próxima entrada que hagamos sobre esto irá sobre la posibilidad de que munin realice notificaciones en caso de error o de exceder de ciertos límites. Si, si, yo tampoco lo sabía, pero se puede 😉

Probando el Aruba Cloud Server Smart de 1€

hosting Por fin he tenido tiempo de hacer una primera prueba medianamente seria con mis nuevos VPS de Aruba y, para matar dos pájaros de un tiro, he instalado una instancia de Chamilo LMS para evaluar si me sirve como aula virtual para el curso de este año. He usado el VPS más pequeño de la familia: el de 1Gb de RAM y 1 core de CPU por 1€ al mes. Además, si funcionan bien el hecho de que ofrezcan dos meses gratis me permitirá usarlo con mis alumnos para algunas prácticas sin necesidad de que realicen desembolso alguno. Si, los que tenemos poco tiempo disponible tenemos que aprovechar al máximo el que tenemos 🙂

No voy a describir todo el proceso en detalle y con pantallazos porque es bastante fácil e intuitivo (casi siempre) y si ya has trabajado con algún otro VPS no tendrás problemas. Lo primero que tienes que elegir una vez has hecho login es el datacenter dentro del cual quieres crear tu máquina. Yo escogí uno de los dos italianos porque es un Tier IV y eso mola y porque tiene un 100% de uptime desde su creación en 2011. Posiblemente el francés me daría mejores respuestas desde nuestro país, pero ya tendré tiempo de probarlo. Luego eliges el tamaño de VPS y el sistema operativo a instalar y a esperar. Aquí me he encontrado los dos primeros “inconvenientes”. Por un lado, dentro la lista de sistemas operativos a elegir sólo hay tres opciones de 32 bits (os recuerdo que instalar un sistema operativo de 64 bits en una máquina con menos de 4 gigas de RAM es bastante ineficiente): debian 7, CentOS 6 y Ubuntu 12.04, todas ellas obsoletas… Así que como mi idea era trabajar con Debian 8 instalé la versión de Debian 7 32 bits con idea de usar luego el procedimiento estándar de upgrade. En una máquina nueva y sin dependencias ni software actualizado no debería de dar problemas y, efectivamente, no lo hizo.

El segundo inconveniente fue que la creación de la máquina virtual tardó más de lo que me esperaba. Alrededor de una hora o tal vez algo mas. Ya sabeis como es la impaciencia en estas cosas. Nos pasamos meses pensando en cambiar de hosting y en elegir el adecuado y luego queremos una instalación en segundos 🙂 Pero una vez instalada todo fue como la seda. Hice un login en mi Debian 7, seguí el procedimiento que he enlazado antes y todo listo. Y este es el aspecto que presenta el panel de control web de la VPS (Como siempre, pulsa sobre las imágenes para verlas con mayor calidad):

Panel de control de Aruba Cloud

Como se aprecia, la solapa de “Edit/Upgrade” aparece deshabilitada. Esto es debido a que sólo se puede actualizar la máquina cuando está apagada y, según pone en las FAQs, hacia un modelo mayor.

La primera comparación inevitable con mi anterior hosting es la relativa a los componente virtualizados. Para evaluar esto de forma gráfica instalé phpsysinfo. Estos son los resultados obtenidos:

phpsysinfo en el Aruba Cloud Smart de 1Gb

Y estos los de mi hosting de Gigas (con dos cores y 4 Gigas de RAM). Como se ve, la CPU virtualizada en Aruba Cloud es superior a la que nos proporciona Gigas. Ya veremos si esto se mantiene (o mejora) cuando probemos un VPS de dos cores.

phpsysinfo en el VPS de Gigas

Para monitorizar los recursos he instalado munin y por el momento todo parece muy estable. Lógicamente la máquina apenas ha tenido uso estos días, así que no hay sorpresas con esto. Ya os contaré que tal va cuando se enfrente a una carga moderada:

munin en el Aruba Cloud Smart de 1Gb

Y poco mas. Lo siguiente será trasladar este blog a un VPS más robusto o, incluso, haciendo una separación en dos capas. Ya veré. Y queda pendiente también que os cuente mis primeras impresiones con Chamilo y la configuración necesaria para que funcione con nginx, que no es trivial. Para la próxima. Salud y bienvenidos de vuelta al curso 😉

Aruba Cloud: Nos mudamos de hosting

hosting Pues eso, que tenemos mudanza en ciernes. Llevo ya casi cuatro años en Gigas y sigo tan contento como el primer día, conste. Más si cabe. Pero en Aruba Cloud me han ofrecido un bono gratuito de prueba y voy a aprovechar para hacer algunos cambios.

Aruba es una empresa de hosting con datacenters en Italia, Francia, Reino Unido y la República Checa y distintos niveles de servicio que empiezan desde 1€/mes por una máquina con 1 core y 1 Giga de RAM. Ya iremos contando por aquí lo que vamos haciendo, pero valga esta entrada como propósito de intenciones… 😉

NOTA: De cara al público tienen también un servicio de prueba gratuita que te permitiría probar uno de estos VPS de 1€/mes durante dos meses.

Chuletillas (y XXXXV) – Integrar comandos MySQL en un shell script

chuletaExisten diversas formas de integrar comandos de MySQL dentro de un shell script de linux. La más cómoda, creo, es utilizar el parámetro -e del cliente en línea de myql. Por ejemplo, así:

#!/bin/sh
# comandos bash...
mysql -u usuario -p -e "CREATE DATABASE ejemplo;"
#comandos bash...

Lo que pasa es que así puesto sirve de bien poco porque nos va a pedir el password de forma interactiva. Para evitarlo podemos poner la password en el propio archivo del script. No es un método elegante ni especialmente seguro, pero en entornos poco críticos sirve perfectamente:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "CREATE DATABASE ejemplo;"
#comandos bash...

Por último, si tenemos que ejecutar varios comandos, lo más cómodo es escribirlos uno a continuación de otro en un archivo independiente (con extensión sql por claridad) y ejecutarlos usando el comando source de mysql:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "source /opt/sripts/imysql/importar_databases.sql"
#comandos bash...
NOTA: Todo lo dicho aquí sirve igualmente para MariaDB

StartEncrypt, la respuesta de StartSSL a Let’s Encrypt

seguridad StartSSL, pionera en esto de dar certificados gratutitos, ha lanzado una agresiva campaña de respuesta a Let’s Encrypt ofreciéndonos su propio servicio para automatizar la instalación, gestión y renovación de certificados: StartEncrypt. Si alguien lo ha probado ya que avise y, si no, tendremos que hacerlo por aquí en breve. Que remedio 😉

NOTA: Por si mi lector no lo recuerda, hace bien poco contamos por aquí como configurar Let’s Encrypt en una web con nginx.

Cuentas de correo de “usar y tirar” o de un solo uso

correo Los correos electrónicos de un sólo uso son una gran herramienta para evitar el spam. Cuando queremos probar o evaluar un servicio para el que nos exigen una cuenta de correo electrónico y la evaluación no se hace efectiva mientras que no validemos dicha cuenta (por regla general haciendo click en un link que recibimos en la misma) lo más cómodo y práctico es recurrir a una de estas cuentas. Tienen, por supuesto, otros usos, pero mejor no te doy ideas por si acaso… 😉
Este tipo de correos tienen también una parte negativa, no lo olvides: la privacidad de lo que recibes en ellos es nula, puede que no puedas volver a usarlos en el futuro para recuperar la contraseña del servicio o, por el contrario, puede que alguien que no seas tu “suplante” tu personalidad a través de dicho correo y te robe la identidad en el servicio para el que la utilizaste en primer lugar… Así que ten mucho cuidado donde y para que las usas y trata de ser consciente de los riesgos que corres.

Allá por el año 2000 que fue cuando empecé a usar este tipo de cuentas e hice mi primera lista había apenas cinco servicios de este tipo. Ahora tengo listados más de 30. El único que sobrevive de aquellos tiempos es Mailinator…

No te voy a recomendar ninguno. Échales un vistazo por ti mismo. En esta lista encontrarás de todo: servicios con registro, sin él, que destruyen los correos en unos minutos, que los guardan para siempre, que te permiten elegir la cuenta o que la generan de forma aleatoria… Lo dicho, si necesitas algo así busca por ti mismo que es lo que mejor se ciñe a lo que quieres:

Albóndigas gemelas (o de las tontunas que se hacen con el Photoshop)

chuleta Observad atentamente las albóndigas de las dos latas de aquí abajo. ¡Si!¡Son la misma! No me puedo imaginar que alguien piense que es más difícil hacerle una foto a una albóndiga que coger una foto ya hecha y modificar con el photoshop el cubierto que la sostiene y los guisantes que la acompañan… O a lo mejor es que se trata de un modelo de albóndiga de una belleza sin parangón y yo, ay, no soy capaz de apreciarlo…

Si, ya, es una tontuna… pero llevo dos días con ella en la cabeza y no quiero volver a dejar abandonado el blog otra vez. Espero que mi lector no me lo tenga mucho en cuenta 😉

find, ejemplos de uso

chuleta El comando find es uno de los más útiles y versátiles de que disponen nuestros Linux. La potencia y la cantidad de opciones disponibles de esta utilidad es increible. Yo, que tengo una pésima memoria, tengo una chuletilla donde voy recopilando los más útiles que encuentro y/o he usado en alguna ocasión. Os copio aquí una selección y una pequeña introducción previa con los comandos más básicos para los novatos.

NOTA: Si no ejecutas el comando como root habrá muchos archivos y/o directorios a los que no tengas acceso y a los que, por tanto, el comando find no podrá acceder y no aparecerán en la lista. Aún como root es normal que en ocasiones te encuentres errores de acceso en determinados ficheros. Algo como esto:

find: «/proc/9308/task/9308/fd/5»: No existe el archivo o el directorio

NOTA (y II): Piensa que puedes combinar fácilmente entre si la mayoría de los ejemplos que veremos a continuación para obtener búsquedas aún más precisas.

Si queremos buscar un archivo de nombre archlinux.iso en nuestro equipo:

find / -name archlinux.iso

Si queremos restringir la búsqueda al directorio /opt (y todo lo que haya debajo):

find /opt -name archlinux.iso

En cualquiera de los casos anteriore podemos usar comodines en el nombre del archivo:

find / -name archlinux*.iso

Y si queremos que la búsqueda sea “insensible” a que el nombre del archivo (o la parte de este que especificamos) esté en mayúsculas o minúsculas:

find / -iname archlinux*.iso

Si sólo estamos interesados en encontrar directorios:

find / -type d -name log

Y sí sólo queremos encontrar ficheros:

find / -type f -name temp

Para encontrar archivos con distintos patrones (por ejemplo todos los iso y los tar.gz):

find /mnt/temp -type f \( -name *.iso -o -name *.tar.gz \)

O archivos que no cumplan un patrón (todos los que no sean iso):

find /mnt/temp/downloads -type f -not -name *.iso

Para encontrar archivos y directorios vacíos:

find / -empty

Para encontrar los ficheros que pertenecen a un determinado usuario:

find /opt -user josemaria

Para encontrar todos los ficheros con un determinado patrón cuyo contenido ha sido modificado por última vez hace exactamente tres días:

find /mnt/datos *.odt -type f -mtime 3

Idem pero modificados por última vez hace menos de 7 días:

find /mnt/datos *.odt -type f -mtime -7

Idem pero modificados por última vez hace más de un año:

find /mnt/datos *.odt -type f -mtime +365

NOTA: Si cambiamos mtime por atime en los tres ejemplos anteriores se realiza la búsqueda teniendo en cuenta el momento del último acceso al fichero y si usamos ctime se tiene en cuenta la última modificación no sólo del contenido del fichero sino también de sus atributos (propietario, permisos, etc.)

Para buscar los archivos con un determinado patrón y guardarlos comprimidos:

find /mnt/temp -type f -name *.txt | xargs tar cvzf textos.tar.gz

Para buscar los archivos con un determinado patrón y borrarlos:

find /mnt/temp -type f -name *.txt -exec rm {} \;

Para encontrar todos los archivos de más de 500 Megas:

find / -type f -size +500M

Idem al anterior pero mostrando el tamaño del archivo (en bytes) antes del nombre:

find / -type f -size +500M -printf '%s %p\n'

Para buscar los 10 archivos o directorios que más espacio ocupan:

find / | sort -nr | head -10

NOTA: ¿find o locate? La única ventaja de locate frente a find es que es más (mucho más) rápido, así que si realizas búsquedas a menudo y quieres que sean como centellas no te leas este texto que no es para ti. Las ventajas de find frente a locate son muchas otras (¡todas las demás que se te ocurran!). Y si no me crees leete esto.