Actualizar Sutty sin renovar el contenedor
Ahora mismo cada vez que hacemos modificaciones internas (modificar líneas de código en Sutty sin cambiar dependencias por ejemplo), requiere rehacer todo el contenedor de Docker, subirlo y reiniciar el servicio. Todo esto en mi computadora lleva al menos 10 minutos e ir a hacer otra cosa que no use mucho procesador o disco.
Últimamente para hacer más rápido y con menos recursos, a mano uso git format-patch
para guardar los parches de las modificaciones, las subo al contenedor, las aplico y reinicio el servicio.
Estaba pensando que esta sería la forma más eficiente de enviar cambios sin tener que usar tiempo y recursos en rehacer un contenedor entero por modificaciones internas. Primero pensé que se podían alojar los parches en algún lado y que un servicio dentro del contenedor verifique actualizaciones, las descargue, valide y aplique (como hacen las OTA de Expo o Codepush para apps, en este caso las stores son nuestros contenedores). Después pensé que lo más seguro y eficiente era enviarlas.
Al final me di cuenta que ya lo hace todo gratis git y entonces implicaría:
- Incluir el directorio .git en el contenedor (14MB contra 450MB del contenedor entero)
- Generar una llave SSH con acceso de solo lectura al repositorio (aunque el repositorio también es público)
- Si usamos git por SSH también hay que generar el archivo known_hosts para que no se quede esperando confirmación interactiva
- Generar una tarea en el monit del contenedor que regularmente haga
git pull
ypumactl hot-restart
El hot restart de puma permite reiniciar el servicio actualizando el código sin mostrar errores a les usuaries, con lo que nos ahorraríamos muy posibles errores 500 mientras se están reiniciando el contenedor (para lo que venía pensando una actualización de contenedores en dos pasos que no sé si dejé escrita acá).