A veces solo necesitas ese archivo, y sería genial si tuvieras una aplicación sencilla
que se ejecutara en un navegador web que te diera acceso a tus archivos.
Bueno, hoy vamos a echar un vistazo a CopyParty.
Esto convierte casi cualquier dispositivo en un servidor de archivos.
Es una aplicación de Python muy sencilla que estuvo circulando hace unos meses. Simplemente
me tomó un tiempo cubrirlo.
Y esta aplicación la vamos a ejecutar en un contenedor.
Vamos a ponernos nuestras redes de cola, por supuesto, porque eso es lo que hacemos aquí en el canal TailScale.
También te mostraré algunos secretos nuevos de Docker Compose, trucos sobre cómo puedes configurar
no solo la aplicación CopyParty directamente en tus archivos YAML de Compose,
sino también la pieza sidecar TailScaleServe directamente en tus YAML de Docker Compose.
Ahora, pondré un enlace en la descripción a todos los materiales sobre CopyParty,
como este fantástico video de YouTube, de 16 minutos de duración, que
repasa todas las diferentes características
que tiene CopyParty.
Es brillante.
Hace un trabajo mejor del que yo podría hacer. Hoy
nos centraremos, como dije,
en los aspectos de Docker Compose
y en la implementación de esta cosa en su red de cola.
Ahora, ya has visto en el canal muchas veces
que implemento aplicaciones con la aplicación principal
y luego un contenedor sidecar de Tailscale.
Y la desventaja de eso, de hecho,
si miras esta larga lista de aplicaciones que
hemos cubierto en este canal a lo largo de los años. La desventaja de esto es que necesitas este tipo de
archivo serve.json montado en volumen sidecar. Es un archivo muy simple. Lo único que hace esencialmente es indicarle
al servidor de Tailscale que escuche en el puerto 443 para hacer de proxy de este puerto desde dentro del contenedor hacia su
red de cola usando el servidor de Tailscale. Siempre he deseado que fuera una forma sencilla de hacer eso sin enlazar el
montaje de un archivo separado, bueno, encontré uno, encontré uno, ha estado justo debajo de mis narices todo este tiempo,
Docker Compose tiene este elemento de nivel superior de configuraciones integrado en el esquema de configuración yaml de Docker
Compose, así que lo que podemos hacer es definir, está bien, este es solo el blob json que vimos antes, un poco
minimizado para que encaje más cómodamente dentro de nuestro archivo de composición y no le
guste WordWrap ni nada.
Lo que podemos hacer es definir estos elementos
dentro de nuestros archivos de configuración
y luego podemos hacer referencia a ellos más adelante
dentro de nuestras configuraciones.
Eso es, ese es el truco genial.
Entonces, lo que esto hace es ingerir este bloque de contenido aquí arriba,
líneas cuatro a ocho,
y luego lo escupe en un archivo
dentro del contenedor remoto.
Así que echemos un vistazo
a la aplicación de copia en sí.
Es súper básico.
Es solo un explorador de archivos que se ejecuta dentro de un navegador web.
Efectivamente, ya sabes, puedo seleccionar una imagen,
puedo ver una imagen, puedo ir aquí
y ver mi obsesión con el Volkswagen Golf.
Por cierto, esto fue Wookiees en el bosque, hace unos años.
Evento fantástico si eres un entusiasta de Volkswagen como yo.
Y sabes, puedo ver todas las imágenes
que he tomado a lo largo de los años.
De hecho, éstas son las mismas imágenes
que alimentaron el video que salió la semana pasada.
Entonces ahora iniciaré sesión usando el nombre de usuario y la contraseña
configurados en mi archivo de redacción.
Literalmente ahora mismo me está cambiando.
Y ahora solo quiero crear un nuevo directorio. Simplemente
llamaré a esto prueba
porque quiero mostrarles lo rápido que es esta cosa.
Voy a abrir un directorio lleno de un montón de fotos de prueba.
Y luego, si simplemente coloco esto en el navegador así, ¿listo?
Aquí vamos.
Estamos subiendo, no sé, 25 archivos, 22 archivos.
Y ya está, ya está hecho.
Y ahora podemos ponerlas en pantalla completa y echarles un vistazo.
Podemos descargarlos.
Podemos fetichizarlos.
Podemos rotarlos.
También admite contenido multimedia enriquecido.
Entonces, si tienes un archivo de audio, por ejemplo, déjame buscar en mi escritorio,
donde casi seguro tengo una grabación que estoy usando para este video.
Déjame subir esto aquí.
Y podemos reproducir esos archivos de audio en el navegador.
Allá vamos.
Ahora podría usarlo como un reproductor de podcast de bajo costo si quisiera.
La otra opción también la hago, ¿la puedo ver?
Sí, representa la forma de onda espectral del archivo.
Simplemente pienso que es un detalle realmente genial y
agradable de CopyParty.
Hay toneladas y toneladas y toneladas
de otras características en esta cosa.
Por ejemplo, si quisiera descargar
el directorio completo como un archivo zip,
lo que puede ser muy útil a veces,
simplemente hago clic en este pequeño botón aquí abajo.
Sin menús de clic derecho, sin hacer tonterías
y listo.
Ahora mi directorio de prueba está como un archivo zip
en mi sistema local.
Hay una forma de montar CopyParty como un webdav.
Por lo tanto, si va a esta opción aquí arriba y dice conectar,
básicamente puede convertir su instancia de CopyParty en un servidor de archivos remoto
que aparece como un recurso compartido de red montado dentro de su computadora.
Y, por supuesto, puedes hacer esto en todo TailScale cuando esté en tu TailNet.
Y lo admite de múltiples formas diferentes.
Tienes WebDAV, tienes PartyFuse, iShare,
así como todos los diferentes sistemas operativos que utilizan Rclone
y todas las demás cosas que existen en el mundo.
No puedo decir suficientes cosas buenas sobre esta aplicación.
Honestamente, es muy simple.
Es realmente simple teniendo en cuenta que es solo un montón de Python.
Y simplemente hace lo que tiene que hacer realmente bien.
Ahora echemos un vistazo a algunas de las cuestiones del ciclo de vida
en torno a las estrofas de configuración dentro de Docker Compose.
Puedes ver que, como te mostré antes,
tenemos la configuración del servicio de escala de cola,
pero también tenemos la configuración del grupo de copia.
Es una aplicación muy sencilla de configurar.
Y pensé que era un ejemplo perfecto para el vídeo de hoy.
Puedes ver cómo la configuración para el servidor TS se reutiliza más adelante en el archivo que se encuentra aquí abajo.
Y lo mismo se aplica también a la configuración del grupo de copia.
Entonces, ¿cómo se transmite esto al lado remoto? ¿
Cómo se ve el interior del contenedor?
Bien, echemos un vistazo al contenedor de servicio TS de la fiesta de copia. Vamos
a echar un vistazo al interior de la fiesta de copias TS.
Ahora he accedido mediante SSH a un NAS falso, que es donde realmente se ejecuta esta aplicación.
Y voy a ejecutar este comando, docker exec copy party TS.
y quiero ver cómo se ve la configuración, cómo se ve la
configuración del servidor dentro de ese contenedor remoto.
Porque si miramos el archivo YAML,
esto se pasa y se asigna casi como un objetivo
en /config/serve.json, que es la ruta del archivo aquí
que voy a imprimir en la terminal
y vamos a echarle un vistazo.
Y puedes ver que este bloque aquí coincide perfectamente con
este bloque aquí dentro de mi archivo de composición. ¿
Pero qué pasa si quiero hacer un cambio?
Aquí es donde puede volverse un poco, no sé,
como si simplemente esperara que funcionara de manera diferente a como realmente lo hace.
Pero llegaremos allí.
Hagamos el cambio en el archivo compose.yaml.
Y quiero cambiar tailscalefunnel para que sea verdadero para este nodo, por ejemplo.
Ahora, si hago eso y modifico el archivo de composición y luego hago un reinicio de composición de Docker,
he reiniciado la copyparty y los contenedores tailscale de copyparty, el sidecast.
Pero si hago el mismo comando exec, todavía dice falso.
aunque nuestro archivo de composición dice, nuestra encuesta dice,
aunque nuestro archivo de composición dice verdad aquí.
Parece lógico que eso funcione ¿no?
Pero el problema aquí es que el proceso de reinicio
solo detiene el proceso dentro del contenedor
y luego inicia el contenedor nuevamente.
No ejecuta ninguna de las
rutinas de creación o instanciación de contenedores que miran los archivos de configuración
en su archivo YAML.
No vuelve a calcular el hash y dice: "
Oye, algo ha cambiado".
Probablemente deberíamos actualizar esto.
El contenedor en sí seguirá existiendo, el mismo contenedor, el mismo sistema de archivos, el mismo objeto de configuración montado desde cuando se creó por primera vez.
Compose no volverá atrás y leerá ese archivo de configuración hasta que vuelva a crear el contenedor.
Así que realmente nos quedamos con sólo un par de opciones.
Y lo que se me ocurrió es usar Docker Compose para forzar la recreación.
Así que este es un problema de ciclo de vida.
Entonces si podemos recrear la fuerza, entonces estaremos listos para empezar.
Así que voy a hacer esto.
Voy a hacer docker compose up menos D dash dash force recreate.
Y mira lo que pasa con nuestro archivo YAML.
Nuestro bloque de embudo ahora se lee verdadero.
Entonces, si está utilizando estos bloques de configuración para definir configuraciones para aplicaciones,
debe comprender que funcionan de manera diferente para vincular montajes.
No se actualizan en tiempo real dentro del contenedor.
Docker Compose solo lee estos bloques de configuración en el momento de creación del contenedor y en el momento de instanciación del contenedor.
Entonces, para realizar un cambio en esas configuraciones subyacentes y para que se transmitan a los contenedores,
solo tienes que volver a crear el contenedor cada vez.
Es un pequeño cambio en el flujo de trabajo, pero muy, muy importante.
Así que ese es el problema con las configuraciones de Docker Compose. Se
leen una vez cuando se crea el contenedor
y luego quedan bloqueados hasta que se recrea ese contenedor por completo.
No es obvio, y los documentos no lo dejan del todo claro, todo el ciclo de vida del contenedor.
Así que espero que esto les ahorre a algunos de ustedes el dolor de cabeza de depuración que tuve hoy.
Entonces, déjenme saber en los comentarios qué otras cosas se esconden en la documentación de Docker Compose que probablemente he pasado por alto por completo.
Este ha sido uno de mis pequeños descubrimientos favoritos de las últimas semanas.
Ahora, tengo que darles un enorme agradecimiento a todos ustedes por mirarnos durante el 2025.
Y les deseo a todos ustedes un próspero y exitoso 2026.
Muchas gracias por ver. He
sido Alex de Tailscale.