gorkula.com
Carteles I
En las películas americanas siempre me ha llamado la atención lo populares que son los carteles hechos a mano. Los flyers que reparten en los institutos para invitarte a fiestas (si eres popular) o a conciertos. También para los garage sales.

De camino a la tienda de cómics paso por una librería que me gusta mucho. Al lado hay un bajo que parece abandonado. En sus cristales siempre hay pósters hechos a mano.

No recuerdo cuando fue la primera vez que me fijé en estos pósters. Tampoco recuerdo cuando empecé a sacar fotos de ellos. Imagino que fue cuando descubrí que los carteles iban cambiando. He acabado con un montón de fotos en el teléfono.




Supongo que esto inicia una serie de posts sobre carteles que voy encontrando por Chicago. En especial en esta planta baja ubicada en el 2521 de N Kedzie Blvd.
30 May - Sin comentarios - chicago
Cómo desplegar una aplicación Rails con Postgresql y TLS usando Kamal
Este blog comenzó sus días alojado en un servidor con OpenBSD y usando relayd como reverse proxy. Intenté varias cosas para desplegar, como Capistrano o Mina. En líneas generales funcionaban bien pero siempre acababa entrando al servidor para arreglar cosas que no terminaban de funcionar. La culpa era mía por no entender 100% cómo funcionaba el sistema (plugins para todo). Cada vez aprendía un poco más y sin embargo este proceso hacía que no tuviese ganas de desplegar más cambios y un día dejé de desarrollar más funcionalidades.

Profesionalmente he usado Docker desde 2015. Para desarrollo viene muy bien pero para un producto tan pequeño como este blog no me apetecía montar todo en producción. Hasta que llegó MRSK Kamal.

Al final he conseguido tener un proceso de despliegue fácil y rápido. Para lograrlo he ido aprendiendo tanto de la documentación oficial como de unos cuantos artículos distribuidos por internet. Los iré enlazando a continuación.

Lo primero que hice fue ver el vídeo introductorio de DHH. En 5 minutos ya tenía desplegado el blog en un servidor nuevo. En otro post explicaré cómo migré la base de datos.

En el vídeo se sigue un ejemplo de nivel medio, más avanzado de lo que necesito para este blog. Éste post me ayudó a configurarlo todo en el mismo servidor. Básicamente hay que poner la misma IP tanto en el servidor como en los accessories.

El Dockerfile lo saqué del generador que vendrá en la versión 7.1. Este blog todavía está en la versión 7.0.4 a día de hoy.

# config/deploy.yml

service: blog
image: usuario/blog

servers:
  web:
    hosts:
      - ip-del-host

registry:
  username: usuario
  password:
    - KAMAL_REGISTRY_PASSWORD
env:
  clear:
    RAILS_SERVE_STATIC_FILES: true
    DB_HOST: ip-del-host
  secret:
    - RAILS_MASTER_KEY
    - POSTGRES_USER
    - POSTGRES_DB
    - POSTGRES_PASSWORD

accessories:
  db:
    image: postgres
    host: ip-del-host
    port: 5432
    env:
      secret:
        - POSTGRES_USER
        - POSTGRES_DB
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data

Todas las variables de entorno definidas en secret se leen desde un fichero .env en la raíz del proyecto.

Kamal necesita que la app principal tenga un endpoint para hacer healthcheck. Es decir, necesita comprobar que la aplicación está funcionando antes de dar por finalizado el despliegue. En Rails 7.1 ya viene una ruta configurada para este propósito. En mi caso he tenido que añadir manualmente en config/routes.rb.

get "/up", to: proc { [200, {}, ["success"]] }

El siguiente paso es configurar el reverse proxy para usar TLS y permitir el acceso a la web mediante https. Por defecto Kamal usa traefik. Otra herramienta más para aprender. Pasé horas leyendo la documentación y entendí cómo funcionaba pero no conseguía hacerlo funcionar con Kamal. Por suerte encontré esta conversación en GitHub en la que se explica claramente cómo configurarlo.

Antes de desplegar has de crear el fichero de configuración en cada server (no en los accessories). Para comprobar si todo ha ido bien, una vez desplegado puedes consultar el contenido del fichero. No debería estar vacío.
Es muy importante darle el permiso correcto, sino no va a funcionar.

mkdir -p /letsencrypt && touch /letsencrypt/acme.json && chmod 600 /letsencrypt/acme.json


# config/deploy.yml

service: blog
image: usuario/blog

servers:
  web:
    hosts:
      - ip-del-host
    labels:
      traefik.http.routers.blog-web.rule: Host(`tu-dominio.com`)
      traefik.http.routers.blog-web.tls: true
      traefik.http.routers.blog-web.tls.certresolver: letsencrypt

traefik:
  options:
    publish:
      - "443:443"
    volume:
      - "/letsencrypt/acme.json:/letsencrypt/acme.json"
  args:
    entryPoints.web.address: ":80"
    entryPoints.websecure.address: ":443"
    entryPoints.web.http.redirections.entryPoint.to: websecure
    entryPoints.web.http.redirections.entryPoint.scheme: https
    entryPoints.web.http.redirections.entrypoint.permanent: true
    certificatesResolvers.letsencrypt.acme.email: "tu@email.com"
    certificatesResolvers.letsencrypt.acme.storage: "/letsencrypt/acme.json"
    certificatesResolvers.letsencrypt.acme.httpchallenge: true
    certificatesResolvers.letsencrypt.acme.httpchallenge.entrypoint: web

registry:
  username: usuario
  password:
    - KAMAL_REGISTRY_PASSWORD
env:
  clear:
    RAILS_SERVE_STATIC_FILES: true
    DB_HOST: ip-del-host
  secret:
    - RAILS_MASTER_KEY
    - POSTGRES_USER
    - POSTGRES_DB
    - POSTGRES_PASSWORD

accessories:
  db:
    image: postgres
    host: ip-del-host
    port: 5432
    env:
      secret:
        - POSTGRES_USER
        - POSTGRES_DB
        - POSTGRES_PASSWORD
    directories:
      - data:/var/lib/postgresql/data

No estoy 100% seguro pero creo que las siguientes opciones las has de configurar una vez ya tengas el certificado la primera vez. Yo lo hice así pero no sé si es necesario.
Lo que hacen estas opciones es forzar a que todas las peticiones vayan por https.

entryPoints.web.http.redirections.entryPoint.to: websecure
entryPoints.web.http.redirections.entryPoint.scheme: https
entryPoints.web.http.redirections.entrypoint.permanent: true

Con esto la aplicación de Rails con Postgresql debería funcionar correctamente y la base de datos debería permanecer tras cada despliegue. Si se borra cada vez, consulta que el path especificado en directores sea correcto.

* Después de actualizar las reglas de Traefik no hace falta hacer deploy completo, solo:
$ bin/kamal traefik reboot

En otro artículo explicaré cómo he añadido Redis y Sidekiq. Es muy fácil pero hay un par de cosillas que me gustaría dejar por escrito para no olvida.

Actualización (12 sept 2023): MRSK ahora se llama Kamal. He cambiado algunas líneas del deploy.yml que copié tal cual de la documentación.
25 May - Sin comentarios - blog, ruby on rails
Totino's Pizza Rolls
La primera vez en mi vida que aterricé en Chicago fue en mitad de la pandemia. Aquí no era obligatoria ninguna clase de cuarentena. De todos modos decidí aislarme durante 15 días antes de conocer a la familia de mi mujer.

Mi mujer se quedó conmigo en un camping. Trajo el maletero del coche lleno de comida para poder pasar las dos semanas sin necesidad de ir a comprar y así minimizar el contacto con otras personas. Entre toda esa compra había una bolsa de 160 Pizza Rolls. No es el tipo de pizza que esperas cuando visitas Chicago.


Han pasado varios años desde entonces y no los había vuelto a probar. En nuestro apartamento-caja-de-zapatos no tenemos microondas. No hay espacio. Tenemos una freidora de aire que nos regalaron por navidad. Es más pequeña que un microondas y la podemos sacar y guardar cada vez.

Paseando por el supermercado le comenté a mi mujer que echaba de menos los Pizza Rolls y que si algún día compraba un microondas sería solo por ellos. Ella, que es mucho más lista que yo, sugirió ver si en la bolsa venían instrucciones para freidora de aire. ¡Y sí, venían!

Así que compramos una bolsa de 50 para probar. Creo que pagamos unos $6 por ellos.


En la freidora de aire los Pizza Rolls salen 500 veces más ricos que en el microondas. El único motivo que tenía para comprar un microondas se ha evaporado.

Como se observa en las fotos, los Pizza Rolls son como unas empanadillas con forma de almohada para Playmobil que van rellenos de tomate, queso y pepperoni. Hay de otros tipos pero paso de cebra.

La lista de ingredientes es interminable. Deduzco que nada de lo que hay ahí dentro es sano. Así que a disfrutar con moderación.

Los comentarios no tienen desperdicio. Se quejan de la nueva receta y quieren de vuelta la de los años 70. No puedo imaginar cómo tenía que ser esa receta. La nueva es maravillosa. La vieja tenía que ser droga pura. Supongo que el cambio viene motivado por las nuevas regulaciones en la alimentación (aunque en Estados Unidos van unos cuantos pasos por detrás de Europa) y el intento de maximizar beneficios. La cocaína no es lo único que se corta.

En fin, después de unos Pizza Rolls lo mejor es tomar unas cervezas. El alcohol mata todo lo malo.

Desconozco si estos pequeñines son populares en todas partes o solo en el midwest. Si alguna vez se cruzan en tu camino no pierdas la oportunidad de darte un homenaje.
18 May - Un comentario - pizza
Wizard Staff
Poco a poco me voy integrando en la vida americana. He hecho algunos amigos y he asistido a algunas barbacoas. La última fue con unos amigos con los que juego a D&D y con los que me fui de Chicago a Las Vegas en autocaravana. De esto tengo pendiente hablar en algún momento.

Las barbacoas son como en las películas. La gente va trayendo cosas y al final no sabes muy bien qué es lo que vas a comer o beber. Una de estas personas trajo un montón de cervezas y un rollo de cinta americana. Pensé que íbamos a secuestrar y torturar a alguien, pero no. Íbamos a jugar a Wizard Staff.
 


Wizard Staff es un juego que consiste en ir pegando con cinta americana las latas que vas bebiendo mientras formas una estructura vertical parecida a la vara de un mago. 

Que al principio de todo haya dejado caer que juego a D&D con esta gente no ha sido casual.

No soy un gran bebedor. Especialmente después del parón por la pandemia. Creo que mi vara llegó a tener 6 cervezas de altura. Intenté añadir la séptima pero una fuerza superior me recomendó no hacerlo y poder así salvar la noche.
16 May - Sin comentarios - chicago
Comentarios en el blog
Año y medio después de haber abierto este espacio en internet por fin he encontrado el momento y las ganas para añadir comentarios.

¿Por qué? Hay un par de motivos principales:
  1. Echo de menos la antigua blogosfera. 
  2. Prefiero que los comentarios se queden en el blog y no en Twitter donde un día pueden desaparecer sin previo aviso.

No creo que haya mucha actividad. Durante un tiempo tuve un servicio de estadísticas que me confirmó lo que ya sabía: nadie entra a este blog. Las únicas visitas llegan cuando comparto el enlace en Twitter.

El formato de los comentarios es el clásico. Los únicos campos que has de rellenar obligatoriamente son el de nombre y comentario. El email es por si esperas una respuesta. El campo web es para que te hagas un poco de propaganda.

Los comentarios funcionan sin necesidad de tener el Javascript activado. Si lo tienes activado el funcionamiento será un poco más dinámico sin necesidad de recargar la página por completo cada vez.

El sistema de comentarios está desarrollado de tal manera que cualquier elemento del blog es susceptible de ser comentado. De momento solo he activado los posts pero en teoría se podrían comentar los visionados de películas, lecturas de libros, etc. Antes de activarlos ahí quiero repensar un poco mejor el sistema.
15 May - Un comentario - blog