linux

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"

Bash: Ejecutar un proceso en domingo

Tenemos un proceso configurado en CRON para ejecutar un script de bash. Sin embargo, ciertas partes de dicho proceso solo deben ejecutarse un dia a la semana.

Para eso vamos a programar nuestro script en bash para solo se ejecute en domingo.

day=`date +%u`
if [ $day eq 0 ]; then
# Proceso que se ejecuta solo en domingo
fi

El comando date +%u nos devuelve el numero de dia de la semana.
Siendo 0 domingo, 1 Lunes, 2 Martes, 3 Miercoles, 4 Jueves, 5 Viernes, 6 Sabado.

#HappyCoding

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.

DU Ordenado

Uno de mis comandos favoritos es

du -hs *

el cual me permite conocer los directorios y la cantidad de Gigas que ocupan. Sin embargo, en una lista larga de archivos estos suelen venir desordenados. Y aunque se puede concatenar con el comando sort, al tener estos registros un sufijo ( K, M, G ) suele ser inservible utilizar el comando sort.

Sin embargo, hoy descubri un parametro de sort ( -h ) el cual le permite entender los sufijos. Ahora si tengo una lista de 50 directorios, perfectamente ordenados por tamaño.

du -hs * | sort -h

Script Backup MYSQL Databases

En todo servidor propio es necesario preocuparse por disponer de los backups necesarios para restaurar los sistemas.

Esto incluye:

  • Codigo fuente ( GIT, github, gitlab )
  • Archivos producidos por los usuarios ( AWS S3 )
  • Base de datos

Mantener seguras, optimizadas y perfectamente backupeadas ( existe esa palabra ? ) las base de datos no es una tarea facil ni despreciable, sino preguntenle a @gitlab.

Existe varias formas de pago para realizarlo todas super optimas, pero de pago “extra”

  • Microsoft Azure, empezando desde 80USD mensuales
  • AWS RDS, empezando desde 10.5USD mensuales
  • Google Cloud SQL, empezando desde 8USD mensuales

Todas estas opciones nos permiten tener varias bases de datos y nos aseguran disponibilidad, seguridad y actualizaciones.

Si por el contrario nuestra configuración no va por disponer de un servidor de base de datos separado pues bien necesitaremos ocuparnos nosotros mismos de las operaciones de rutina del servidor, sobre todo de los backups.

El siguiente script es un procedimiento de backup automatizado que suelo utilizar

databases=`mysql -e 'show databases;' | tr -d "| " | grep -v Database | grep -v information_schema | grep -v performance_schema`

fecha=` date +%Y%m%d`
mkdir -p /backup/$fecha

fechaold=`date -d "7 day ago" +%Y%m%d`

rm /backup/$fechaold -R

for db in $databases; do
 
 if [ -f /backup/$db.clear ]; then
 mysql $db < /backup/$db.clear
 fi
 mysqldump $db > /backup/$fecha/$db.sql
 tar -czf /backup/$fecha/$db.tar.gz backup/$fecha/$db.sql
 rm /backup/$fecha/$db.sql
done

Ahora debemos configurar el script para que se ejecute todos los dias a una hora especifica

crontab -e

0 5 * * * bash backup.sh

Aunque el script ubique los backups en el directorio de mayor seguridad de nuestro servidor ( root ), es recomendable ubicar una copia en otro lugar para evitar cualquier contingencia. Este otro lugar, podria ser otro servidor encargado de gestionar los backups de varios servidores o incluso una maquina personal local.

Para configurarlo deberemos habilitar el acceso por ssh de la maquina que guardara los backups

0 6 * * * scp -r backup@servidor.com:/backup/`date +%Y%m%d` .

Como deshabilitar el password en linux

Usar password para acceder a sistemas remotos tiene varias desventajas:

  1. Generar una clave fuerte suele ser complicado y siempre tendemos a usar claves basadas en palabras conocidas faciles de recordar ( aunque cambiemos ciertos patrones )
  2. Mientras más facil de recordar mas inseguro estara nuestro sistema find more.

Una forma segura de acceder a sistemas remotos es usar una clave ssh.  Eso si, no olvidar borrar el password de nuestra cuenta ( asi solo sera accesible desde el equipo que tiene la clave ssh )

passwd  -d root