ubuntu

Como excluir servicios con Docker Compose ?

El comando docker-compose up inicia todos los servicios de nuestro proyecto. Incluso servicios que no deseamos como herramientas ( drush, por ejemplo ) o servicios de mantenimiento esporadicos ( docker-compose run –rm ). Entonces como podemos evitar que ciertos servicios se inicien con docker-compose up ?

Existe una opcion en nuestro archivo de configuracion docker-compose.yml con la cual podemos indicar que algun(nos) servicios no esten disponibles al levantar nuestro proyecto.

Profiles en Docker Compose

Cuando declaramos un servicio dentro de nuestro archivo docker-compose.yml podemos establecer la opcion profiles y establecer a que perfiles de ejecucion pertenecera ese servicio.

version: ‘2’

services:
node:
image : node:14
volumes:
– .:/var/www/html
command: “npm start”

db:
image: mysql:5.7
volumes:
– ./mysql:/etc/mysql/conf.d/
– ./db_init.sql:/docker-entrypoint-initdb.d/init.sql

puppeteer:
profiles: [“puppeteer”]
build: ./puppeteer/
volumes:
– ./puppeteer/:/var/www/html/
– ./config:/var/www/html/config
command: “npm start”

En este archivo de configuracion, estamos asignando al perfil puppeteer al servicio puppeteer. Por lo tanto cuando ejecutemos el comando:

docker-compose up -d

Solo se iniciaran los servicios node y db, excluyendo el servicio puppeteer.

Si quisieramos ejecutar el servicio puppeteer debemos indicar el nombre del servicio

docker-compose run –rm puppeteer npm start

Como instalar una app ASPNETCore en Linux

ASPNET Core es un framework de desarrollo web OpenSource de Microsoft. En este articulo, vamos a detallar los pasos para configurar tu servidor Linux una aplicacion ASPNET Core.

Creacion del VPS

Creamos nuestros VPS en cualquiera de las plataformas disponibles actualmente ( DigitalOcean, Linode, AWS Ligthsail, etc ). En nuestro ejemplo en particular utilizamos Ubuntu 20.04

Instalacion del Framework ASPNET Core

Para instalar las librerias basicas del framework debemos ejecutar los siguientes pasos con permiso de root

snap install dotnet-sdk --classic --chanel=5.0
snap install dotnet-runtime-50 --classic

Creamos un alias del comando de ejecucion dotnet

snap alias dotnet-runtime-50.dotnet dotnet

Configuramos la variable de entorno DOTNET_ROOT. Esta variable indica donde estan instaladas las librerias de dotnet

export DOTNET_ROOT=/snap/dotnet-sdk/current

Publicacion de nuestra app

Una vez instalada el framework debemos levantar nuestra aplicacion usando el comando dotnet.

Para esto, debemos copiar nuestra aplicacion/bin/Release a una carpeta local, luego entramos a la carpeta donde copiamos el proyecto y ejecutamos nuestra aplicacion indicando en este caso el puerto donde se accedera.

cd webapp
dotnet webapp.dll --urls "http://*:3000"

Como redimensionar un video en Linux

Podemos redimensionar facilmente el tamaño de los videos usando la linea de comandos a traves del programa ffmpeg

$ ffmpeg -i archivooriginal.mp4 -vf scale=800:-1 archivodestino.mp4

El comando ffmpeg recibe dos parametros:

  • -i archivoorigina.mp4
    En este parametro indicamos el nombre del archivo de video que queremos redimensionar.
  • -vf scale=800:-1
    Aca le indicamos a ffmpeg que redimensione el video a 800px de ancho. El valor de -1 indica que la altura se redimensiona automaticamente.

Como bloquear una IP usando UFW en Ubuntu Server

Las nuevas versiones de ubuntu viene con una nueva herramienta para administrar el firewall del sistema. UFW es la version NO COMPLICADA de administrar el firewall.

Bloquear una IP

# ufw deny from 200.44.170.2 to any

Este comando le indica a nuestro servidor que cualquier peticion que provenga de la IP 200.44.170.2 la vamos a IGNORAR

Rechazar una IP

# ufw deny from 200.44.170.2 to any

Este comando le indica a nuestro servidor que debemos notificar a la IP 200.44.170.2 que no queremos atenderlo

Como apagar los monitores cuando se activa el screensaver en GNOME

En mi configuracion de Workspace yo tengo 3 monitores ( esperemos muy pronto 4 ) y como tengo prendida la PC todo el dia … muchas veces los monitores se quedan prendidos TODO EL DIA. Ademas de esto, cuando finalmente se apagan los monitores mi perro roza el escritorio, yo llego a buscar un papel y se mueve ligeramente el mouse y listo monitores prendidos y que se niegan a apagarse.

Ya habiamos tocado este tema en una entrada anterior Como apagar los monitores cuando se activa el screensaver en KDE, pero yo no soy mucho de usar KDE.  En ese articulo vimos, que para apagar los monitores solo teniamos que ejecutar el comando

xset dpms force off

El problema era ejecutarlos en el momento adecuado ( al bloquear la session, posiblemente con CTRL + L o por inactividad ) sin embargo, recientemente encontre un codigo que me avisa cuando el screensaver se activa y cuando se apaga. Entonces programe un script para que los monitores se apaguen automaticamente, xq eso de estar ejecutando un comando manualmente cuando me iba a retirar de la PC como que era mucho estress para mi.

MOUSEID=`xinput list | grep Mouse | egrep -o “id=([0-9]{1,2})” | egrep -o “[0-9]{1,2}”`

dbus-monitor –session “type=’signal’,interface=’org.gnome.ScreenSaver'” |
while read x; do
case “$x” in
*”boolean true”*)
echo SCREEN_LOCKED + `date`
sleep 2s
xset dpms force off
xinput –disable $MOUSEID
;;
*”boolean false”*)
echo SCREEN_UNLOCKED + `date`
xinput –enable $MOUSEID
;;
esac
done

Ustedes solo deben guardar este script en su $HOME y ejecutarlo al iniciar session. Por ejemplo, añadiendolo al archivo $HOME/.profile

Ahora paso a explicar un poco mas a detalle el script para todos los interesados:

MOUSEID=`xinput list | grep Mouse | egrep -o “id=([0-9]{1,2})” | egrep -o “[0-9]{1,2}”`

Esta linea me obtiene el ID del dispositivo mouse en mi sistema. Este id es diferente en cada computadora

dbus-monitor –session “type=’signal’,interface=’org.gnome.ScreenSaver'” |

Esta linea se encarga es escuchar permanentemente el BUS de log del sistema y me avisa cuando sucede un evento de org.gnome.ScreenSaver

Este solo puede ser de dos tipos:

  • TRUE cuando se activo el screensaver
  • FALSE cuando se desactivo el screensaver

 

Cuando se activa el screensaver, le indico al sistema que espere 2 segundos ( sino lo hago a veces la pantalla no se apaga 🙁 ) y luego le indico a las pantallas que se apaguen. E inmediatamente deshabilito el mouse. Esto, porque basta que me pare bruscamente del escritorio para que se mueva el mouse y por ende se activen las pantallas.

Cuando se desactiva el screensaver, le indico al sistema que me reactive el mouse

Hibernar en Ubuntu

Siempre he tenido la costumbre de dejar mis PC prendidas 24/7. Principalmente por si me despertaba a las 3am y queria jugar un AOC ? o para evitar tener que volver a abrir las 30 pestañas de chrome. Sin embargo, desde que me compre mi disco solido habia decidido poner a hibernar mi maquina. Sin embargo, por algun motivo en ubuntu no funcionaba correctamente. Buscando encontre un script ( en el repositorio de ubuntu ) llamado hibernate.

sudo apt search hibernate

Y si, hace lo que su nombre sugiere. Te permite poner a hibernar tu maquina. Con dos comandos principalmente hibernate-ram hibernate-disk

Cualquiera de ellos, debe ser ejecutado como root. La diferencia esta que hibernate-ram pone tu maquina en bajo consumo de energia e hibernate-disk copia la ram al disco duro y te permite desenchufar completamente tu maquina.

🖐️ Ubuntu: Como evitar actualizar el Kernel

En linux los drivers del hardware que usas son desarrollados por la comunidad de software libre. Y como tal, pueden tener algunos bugs en su funcionamiento o pueden simplemente no ser soportados.

En alguna ocasion ( en realidad mas de una ) un hardware puede funcionar bien en una version de los drivers y en la siguiente no 🙁 . Y como la mayoria de los drivers vienen integrado en el kernel de linux, una actualizacion de kernel puede desactivar algun dispositivo de tu maquina.

Para prevenir eso, evito actualizar el kernel una vez que estan todos mis dipositivos funcionando. Podemos bloquear la actualizacion del kernel usando los siguientes comandos:

sudo apt-mark hold linux-image-generic
sudo apt-mark hold linux-headers-generic

Y si deseas volver a actualizarlos, pues debes desmarcarlos:

sudo apt-mark unhold linux-image-generic
sudo apt-mark unhold linux-headers-generic

NGINX – Logging Country Access

Trabajando con NGINX para controlar el acceso de ciertos paises, encontre un modulo GeoIP Country, que nos permite determinar en funcion de la IP el pais de origen de un request.

Al agregarlo en nuestro nginx.conf podemos bloquear facilmente visitas de ciertos paises. Por ejemplo:

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
RU no; #Rusia
UK no; #Ukrania
CN no; #China
}

Sin embargo, al tenerlo instalado en nginx, tambien podemos hacer uso de la variable $geoip_country para mapear en nuestro access log, de que pais vino el request. Asi el pais no este bloqueado.

Para esto definimos nuestro propio formato en log_format:

log_format main ‘$status $body_bytes_sent $geoip_country_code $sent_http_content_type “$request_method $scheme://$host$request_uri” $http_referer @$remote_addr $http_user_agent ‘;

Y lo aplicamos en la declaracion de access_log:

access_log /var/log/nginx/access.log main;

Y listo, ahora tendremos la informacion del pàis de nuestras peticiones:

200 8938 PE text/html; charset=UTF-8 “GET https://www.mariouriarte.com/?s=react” https://www.mariouriarte.com/?s=nginx @190.202.62.205 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/75.0.3770.90 Chrome/75.0.3770.90 Safari/537.36

Como convertir imagenes webp a png usando la linea de comandos

El formato webp, es el “nuevo” formato de google para compresion de imagenes sin perdida ideal para internet. Una misma imagen en webp ( 94k ) y en png ( 1.1 M ).

Sin embargo,  no todas las aplicaciones de linux ( o windows o mac ) estan preparadas para trabajar con este formato. Asi que para poder usarlas fuera del navegador deberemos convertirlas.

En linux existe una herramiento webp que vamos a instalar

sudo apt install webp

Y ahora podemos hacer la conversion con el siguiente comando

dwebp <imagen.webp>  -o <imagen.png>

Por si acaso, tambien podemos hacer el camino inverso. Hacer la conversion al nuevo formato webp usando el comando

cwebp <imagen.png> -o <imagen.webp>

Yo ya tengo varios proyectos web y mobiles donde valdria la pena usarla.

Como cambiar la zona horaria desde el terminal

Si necesitas cambiar la zona horaria de tu computadora o servidor puedes hacerlo de la linea de comandos o terminal.

Para tal efecto existe el comando timedatectl.

Podemos consultar la zona horaria actual

$ timedatectl status

Este mismo comando nos sirve para cambiar nuestra zona horaria:

$ sudo timedatectl set-timezone America/Lima

Si deseas consultar la lista de zonas horarias que existentes:

$ timedatectl list-timezones