Despliegue a S3 con Github Actions

En los últimos meses he estado actualizando la forma de hacer despliegues de mis proyectos desde mi computadora a la nube. Anteriormente, utilizaba aplicaciones como capistrano, ssh con rsync e incluso en algunos casos he llegado a hacer despliegues manualmente. Sin embargo, desde que descubrí Github actions me enamoré de lo fácil que es configurar despliegues de mis repositorios hospedados en Github. En este tutorial describiré cómo hacer despliegues de archivos a un bucket de S3 utilizando Github actions.

Leer más

Proxy reverso con Nginx

Para un proyecto de trabajo necesitaba configurar un servidor que pudiera aceptar peticiones http y websockets al mismo tiempo, así que me di a la tarea de investigar como hacerlo y a continuación describo el proceso que llevé a cabo para lograr dicha tarea.

Leer más

Funciones Aws lambda con Nodejs

AWS lambda es un servicio que permite ejecutar programas sin necesidad de un servidor (serverless), es decir, puede ejecutar código con tan solo subirlo a AWS y estar listo para ser invocado posteriormente. AWS cobra por número de peticiones a la función lambda y por el tiempo de ejecución de la misma. Entre los lenguajes soportados en la funciones lambda están: Java, Python, Go, Ruby, .Net y Nodejs. Es de éste último del cual voy a hablar en este artículo.

Leer más

Migrar de bash a zsh en Mac

Empezando en macOS 10.15 Catalina, Apple eligió zsh como shell por defecto lo cual fue un cambio significativo para usuarios como yo que siempre habíamos utilizado bash como shell de preferencia. bash había sido para el único shell con el que me sentía familiar, ya que lo venía usando desde años cuando dejé Windows por sistemas basados en Unix.

Leer más

Servidor NAS con Raspberry Pi

Desde hace unos años tengo una rapberry pi (modelo 3B) que había utilizado mayormente para jugar emuladores de juegos retro con recalbox, sin embargo, últimamente le he sacado un provecho más técnico utilizándola para bloquear anuncios en mi red local con pi-hole (más adelante haré un tutorial acerca de esto) y también como servidor NAS.

NAS (Network Attached Storage, por sus siglas en inglés) es básicamente una unidad de almacenamiento que está disponible por medio de una red. En términos generales, un NAS pudiera compararse con algún servicio de almacenamiento en la nube como Dropbox o Onedrive, donde puedes guardar respaldos de tus datos y compartir archivos con otras personas, y su instalación/configuración puede ser tan compleja o sencilla dependiendo del caso de uso. En mi caso específico de uso, los únicos requerimientos son tener un lugar donde respaldar mis archivos y poder compartir los mismos dentro de la red local de mi hogar.

Leer más

Docker detrás de un proxy

En el lugar donde trabajo hay instalado un proxy para bloquear cierto tráfico de internet y fuera de ser una pesadilla para navegar libremente, me dio problemas para comunicarme con el docker daemon en mi Mac. Curiosamente al correr 

docker ps -a

el daemon escuchaba sin problema, el problema surgió al intentar correr un archivo compose

docker-compose up -d
ERROR: Couldn't connect to Docker daemon - you might need to run \`docker-machine start default\`.

Leer más

Problemas de escritura en unidades montadas en OSX con Docker

El día de hoy estuve lidiando con un problema que impedía a mi container docker escribir en un volumen montado desde mi Mac. Investigando, descubrí que fuera del usuario root (del container) otros usuarios no pueden escribir en el sistema host (OSX) como se indica aquí. En este caso particular el usuario www-data de nginx intentaba escribir archivos de cache necesarios para las vistas volt del framework PHP phalcon (como en otros frameworks también). Algunas soluciones propuestas eran otorgar todos los permisos a esa carpeta, agregar al usuario creado al iniciar un container al grupo _www-data, _cambiar los permisos con los que Vbox monta los volúmenes compartidos, entre otras. Fuera de que algunas no me funcionaron, no quedé conforme hasta encontrar una solución más “elegante”. 

Leer más

Incrementar historia de comandos en bash

Si eres de los que utiliza CTRL + R para ejecutar un comando que ya habías ejecutado previamente o simplemente deseas buscar un comando en la historia de bash, quizá te resulte frustrante darte cuenta que el comando que querías ya no está en la memoria. Por defecto bash guarda un número limitado de comandos en la historia, en mi caso particular descubrí que OSX Yosemite conserva los últimos 500 comandos mientras que Ubuntu 12.04 preserva 1000. Por fortuna hay dos variables globales las cuales puedes editar para incrementar o disminuir el número de comandos almacenados en la historia: HISTSIZEHISTFILESIZE. HISTSIZE indica cuantos comandos guarda bash en memoria durante la sesión activa. Por otro lado HISTFILESIZE indica cuantos comandos se pueden almacenar en el archivo .bash_history. Para mayores detalles sobre estas variables puedes leer este link. 

Leer más

Instalar php phalcon framework en Ubuntu Server 14.04 VM

Hace unos meses un amigo me comentó que utiliza el framework phalcon para sus proyectos así que me di a la tarea de investigar acerca del mismo. Parece ser un framework estable y según los benchmarks publicados en su sitio es un framework muy veloz puesto carga como módulo de PHP, a diferencia de algunos otros frameworks compuestos por varias clases PHP que deben ser incluidas.Para lograr un entorno de desarrollo diferente al que utilizo en mi trabajo y otros proyectos, decidí hacerlo desde una máquina virtual (Virtualbox) a la cual instalé Ubuntu server 14.04. Se trata de una versión LTS que tiene ya listo en sus repositorios PHP 5.5 y apache 2.4.

Leer más

Mostrar la codificación de todos los archivos en un directorio recursivamente

Si por alguna razón tienes la necesidad de mostrar la codificación (encoding) de todos los archivos dentro de un directorio y subdirectorios, el comando find de Linux resulta de gran ayuda. Supongamos que deseas mostrar la codificación de todos los archivos .php dentro del directorio actual: $ find . -type f -name \\\*.php -exec file -i {} \\;

 A continuación explico cada uno de los parámetros utilizados:

Leer más