1 00:00:00,020 --> 00:00:05,739 A veces solo necesitas ese archivo, y sería genial si tuvieras una aplicación sencilla 2 00:00:06,060 --> 00:00:09,100 que se ejecutara en un navegador web que te diera acceso a tus archivos. 3 00:00:09,700 --> 00:00:12,639 Bueno, hoy vamos a echar un vistazo a CopyParty. 4 00:00:13,080 --> 00:00:16,120 Esto convierte casi cualquier dispositivo en un servidor de archivos. 5 00:00:16,520 --> 00:00:20,580 Es una aplicación de Python muy sencilla que estuvo circulando hace unos meses. Simplemente 6 00:00:21,080 --> 00:00:23,180 me tomó un tiempo cubrirlo. 7 00:00:23,800 --> 00:00:26,760 Y esta aplicación la vamos a ejecutar en un contenedor. 8 00:00:26,920 --> 00:00:30,620 Vamos a ponernos nuestras redes de cola, por supuesto, porque eso es lo que hacemos aquí en el canal TailScale. 9 00:00:31,140 --> 00:00:37,080 También te mostraré algunos secretos nuevos de Docker Compose, trucos sobre cómo puedes configurar 10 00:00:37,860 --> 00:00:42,379 no solo la aplicación CopyParty directamente en tus archivos YAML de Compose, 11 00:00:42,810 --> 00:00:48,600 sino también la pieza sidecar TailScaleServe directamente en tus YAML de Docker Compose. 12 00:00:49,260 --> 00:00:53,160 Ahora, pondré un enlace en la descripción a todos los materiales sobre CopyParty, 13 00:00:53,240 --> 00:00:56,860 como este fantástico video de YouTube, de 16 minutos de duración, que 14 00:00:56,910 --> 00:00:58,360 repasa todas las diferentes características 15 00:00:58,540 --> 00:00:59,420 que tiene CopyParty. 16 00:00:59,880 --> 00:01:00,380 Es brillante. 17 00:01:00,550 --> 00:01:02,260 Hace un trabajo mejor del que yo podría hacer. Hoy 18 00:01:02,980 --> 00:01:04,039 nos centraremos, como dije, 19 00:01:04,180 --> 00:01:05,740 en los aspectos de Docker Compose 20 00:01:06,340 --> 00:01:07,960 y en la implementación de esta cosa en su red de cola. 21 00:01:09,860 --> 00:01:11,580 Ahora, ya has visto en el canal muchas veces 22 00:01:11,760 --> 00:01:14,680 que implemento aplicaciones con la aplicación principal 23 00:01:15,320 --> 00:01:17,759 y luego un contenedor sidecar de Tailscale. 24 00:01:18,560 --> 00:01:19,860 Y la desventaja de eso, de hecho, 25 00:01:19,870 --> 00:01:22,060 si miras esta larga lista de aplicaciones que 26 00:01:22,080 --> 00:01:26,880 hemos cubierto en este canal a lo largo de los años. La desventaja de esto es que necesitas este tipo de 27 00:01:27,120 --> 00:01:34,020 archivo serve.json montado en volumen sidecar. Es un archivo muy simple. Lo único que hace esencialmente es indicarle 28 00:01:34,120 --> 00:01:41,420 al servidor de Tailscale que escuche en el puerto 443 para hacer de proxy de este puerto desde dentro del contenedor hacia su 29 00:01:41,420 --> 00:01:48,259 red de cola usando el servidor de Tailscale. Siempre he deseado que fuera una forma sencilla de hacer eso sin enlazar el 30 00:01:48,280 --> 00:01:55,260 montaje de un archivo separado, bueno, encontré uno, encontré uno, ha estado justo debajo de mis narices todo este tiempo, 31 00:01:56,020 --> 00:02:02,979 Docker Compose tiene este elemento de nivel superior de configuraciones integrado en el esquema de configuración yaml de Docker 32 00:02:03,100 --> 00:02:08,820 Compose, así que lo que podemos hacer es definir, está bien, este es solo el blob json que vimos antes, un poco 33 00:02:09,038 --> 00:02:15,400 minimizado para que encaje más cómodamente dentro de nuestro archivo de composición y no le 34 00:02:15,400 --> 00:02:16,440 guste WordWrap ni nada. 35 00:02:17,200 --> 00:02:19,579 Lo que podemos hacer es definir estos elementos 36 00:02:20,130 --> 00:02:21,400 dentro de nuestros archivos de configuración 37 00:02:22,050 --> 00:02:23,780 y luego podemos hacer referencia a ellos más adelante 38 00:02:24,120 --> 00:02:24,980 dentro de nuestras configuraciones. 39 00:02:25,980 --> 00:02:27,519 Eso es, ese es el truco genial. 40 00:02:28,080 --> 00:02:32,060 Entonces, lo que esto hace es ingerir este bloque de contenido aquí arriba, 41 00:02:32,280 --> 00:02:33,460 líneas cuatro a ocho, 42 00:02:34,020 --> 00:02:35,960 y luego lo escupe en un archivo 43 00:02:36,430 --> 00:02:37,860 dentro del contenedor remoto. 44 00:02:38,580 --> 00:02:39,460 Así que echemos un vistazo 45 00:02:39,540 --> 00:02:41,459 a la aplicación de copia en sí. 46 00:02:42,220 --> 00:02:43,220 Es súper básico. 47 00:02:43,540 --> 00:02:46,900 Es solo un explorador de archivos que se ejecuta dentro de un navegador web. 48 00:02:47,280 --> 00:02:49,360 Efectivamente, ya sabes, puedo seleccionar una imagen, 49 00:02:49,940 --> 00:02:51,579 puedo ver una imagen, puedo ir aquí 50 00:02:51,620 --> 00:02:54,040 y ver mi obsesión con el Volkswagen Golf. 51 00:02:54,680 --> 00:02:57,240 Por cierto, esto fue Wookiees en el bosque, hace unos años. 52 00:02:57,400 --> 00:02:59,960 Evento fantástico si eres un entusiasta de Volkswagen como yo. 53 00:03:01,180 --> 00:03:03,140 Y sabes, puedo ver todas las imágenes 54 00:03:03,360 --> 00:03:04,340 que he tomado a lo largo de los años. 55 00:03:04,520 --> 00:03:05,820 De hecho, éstas son las mismas imágenes 56 00:03:05,980 --> 00:03:08,820 que alimentaron el video que salió la semana pasada. 57 00:03:09,020 --> 00:03:11,280 Entonces ahora iniciaré sesión usando el nombre de usuario y la contraseña 58 00:03:11,660 --> 00:03:12,799 configurados en mi archivo de redacción. 59 00:03:13,000 --> 00:03:15,040 Literalmente ahora mismo me está cambiando. 60 00:03:16,840 --> 00:03:18,900 Y ahora solo quiero crear un nuevo directorio. Simplemente 61 00:03:18,960 --> 00:03:20,240 llamaré a esto prueba 62 00:03:20,380 --> 00:03:22,160 porque quiero mostrarles lo rápido que es esta cosa. 63 00:03:23,480 --> 00:03:27,540 Voy a abrir un directorio lleno de un montón de fotos de prueba. 64 00:03:28,600 --> 00:03:32,920 Y luego, si simplemente coloco esto en el navegador así, ¿listo? 65 00:03:33,640 --> 00:03:34,079 Aquí vamos. 66 00:03:34,840 --> 00:03:38,460 Estamos subiendo, no sé, 25 archivos, 22 archivos. 67 00:03:39,160 --> 00:03:39,880 Y ya está, ya está hecho. 68 00:03:40,200 --> 00:03:42,560 Y ahora podemos ponerlas en pantalla completa y echarles un vistazo. 69 00:03:42,700 --> 00:03:43,540 Podemos descargarlos. 70 00:03:43,540 --> 00:03:44,299 Podemos fetichizarlos. 71 00:03:44,320 --> 00:03:45,239 Podemos rotarlos. 72 00:03:45,520 --> 00:03:46,720 También admite contenido multimedia enriquecido. 73 00:03:46,760 --> 00:03:49,679 Entonces, si tienes un archivo de audio, por ejemplo, déjame buscar en mi escritorio, 74 00:03:50,500 --> 00:03:53,640 donde casi seguro tengo una grabación que estoy usando para este video. 75 00:03:54,240 --> 00:03:55,380 Déjame subir esto aquí. 76 00:03:56,560 --> 00:03:59,060 Y podemos reproducir esos archivos de audio en el navegador. 77 00:04:00,540 --> 00:04:00,940 Allá vamos. 78 00:04:01,120 --> 00:04:05,500 Ahora podría usarlo como un reproductor de podcast de bajo costo si quisiera. 79 00:04:06,600 --> 00:04:08,920 La otra opción también la hago, ¿la puedo ver? 80 00:04:09,160 --> 00:04:13,020 Sí, representa la forma de onda espectral del archivo. 81 00:04:13,200 --> 00:04:14,679 Simplemente pienso que es un detalle realmente genial y 82 00:04:14,980 --> 00:04:16,899 agradable de CopyParty. 83 00:04:17,760 --> 00:04:19,500 Hay toneladas y toneladas y toneladas 84 00:04:19,579 --> 00:04:21,160 de otras características en esta cosa. 85 00:04:21,420 --> 00:04:22,860 Por ejemplo, si quisiera descargar 86 00:04:22,980 --> 00:04:24,600 el directorio completo como un archivo zip, 87 00:04:25,200 --> 00:04:26,219 lo que puede ser muy útil a veces, 88 00:04:26,480 --> 00:04:27,900 simplemente hago clic en este pequeño botón aquí abajo. 89 00:04:28,600 --> 00:04:30,620 Sin menús de clic derecho, sin hacer tonterías 90 00:04:31,080 --> 00:04:31,640 y listo. 91 00:04:31,800 --> 00:04:34,140 Ahora mi directorio de prueba está como un archivo zip 92 00:04:34,600 --> 00:04:35,520 en mi sistema local. 93 00:04:35,820 --> 00:04:38,400 Hay una forma de montar CopyParty como un webdav. 94 00:04:38,540 --> 00:04:40,320 Por lo tanto, si va a esta opción aquí arriba y dice conectar, 95 00:04:41,060 --> 00:04:46,340 básicamente puede convertir su instancia de CopyParty en un servidor de archivos remoto 96 00:04:47,020 --> 00:04:50,159 que aparece como un recurso compartido de red montado dentro de su computadora. 97 00:04:50,330 --> 00:04:53,719 Y, por supuesto, puedes hacer esto en todo TailScale cuando esté en tu TailNet. 98 00:04:53,980 --> 00:04:56,040 Y lo admite de múltiples formas diferentes. 99 00:04:56,160 --> 00:04:58,720 Tienes WebDAV, tienes PartyFuse, iShare, 100 00:04:59,660 --> 00:05:02,560 así como todos los diferentes sistemas operativos que utilizan Rclone 101 00:05:02,880 --> 00:05:05,260 y todas las demás cosas que existen en el mundo. 102 00:05:06,060 --> 00:05:08,380 No puedo decir suficientes cosas buenas sobre esta aplicación. 103 00:05:08,440 --> 00:05:09,560 Honestamente, es muy simple. 104 00:05:10,320 --> 00:05:12,480 Es realmente simple teniendo en cuenta que es solo un montón de Python. 105 00:05:14,020 --> 00:05:16,900 Y simplemente hace lo que tiene que hacer realmente bien. 106 00:05:18,000 --> 00:05:20,240 Ahora echemos un vistazo a algunas de las cuestiones del ciclo de vida 107 00:05:20,640 --> 00:05:23,340 en torno a las estrofas de configuración dentro de Docker Compose. 108 00:05:23,760 --> 00:05:25,400 Puedes ver que, como te mostré antes, 109 00:05:25,580 --> 00:05:27,940 tenemos la configuración del servicio de escala de cola, 110 00:05:28,540 --> 00:05:31,620 pero también tenemos la configuración del grupo de copia. 111 00:05:31,900 --> 00:05:33,479 Es una aplicación muy sencilla de configurar. 112 00:05:33,980 --> 00:05:36,500 Y pensé que era un ejemplo perfecto para el vídeo de hoy. 113 00:05:37,160 --> 00:05:42,800 Puedes ver cómo la configuración para el servidor TS se reutiliza más adelante en el archivo que se encuentra aquí abajo. 114 00:05:43,480 --> 00:05:47,960 Y lo mismo se aplica también a la configuración del grupo de copia. 115 00:05:48,460 --> 00:05:50,680 Entonces, ¿cómo se transmite esto al lado remoto? ¿ 116 00:05:50,740 --> 00:05:52,300 Cómo se ve el interior del contenedor? 117 00:05:52,780 --> 00:05:55,799 Bien, echemos un vistazo al contenedor de servicio TS de la fiesta de copia. Vamos 118 00:05:55,840 --> 00:05:58,280 a echar un vistazo al interior de la fiesta de copias TS. 119 00:05:59,040 --> 00:06:02,340 Ahora he accedido mediante SSH a un NAS falso, que es donde realmente se ejecuta esta aplicación. 120 00:06:02,980 --> 00:06:06,380 Y voy a ejecutar este comando, docker exec copy party TS. 121 00:06:06,980 --> 00:06:09,400 y quiero ver cómo se ve la configuración, cómo se ve la 122 00:06:09,400 --> 00:06:12,380 configuración del servidor dentro de ese contenedor remoto. 123 00:06:13,000 --> 00:06:15,080 Porque si miramos el archivo YAML, 124 00:06:15,620 --> 00:06:18,540 esto se pasa y se asigna casi como un objetivo 125 00:06:19,080 --> 00:06:23,080 en /config/serve.json, que es la ruta del archivo aquí 126 00:06:23,080 --> 00:06:25,240 que voy a imprimir en la terminal 127 00:06:25,360 --> 00:06:26,020 y vamos a echarle un vistazo. 128 00:06:26,680 --> 00:06:30,620 Y puedes ver que este bloque aquí coincide perfectamente con 129 00:06:31,300 --> 00:06:34,080 este bloque aquí dentro de mi archivo de composición. ¿ 130 00:06:34,200 --> 00:06:35,360 Pero qué pasa si quiero hacer un cambio? 131 00:06:35,560 --> 00:06:37,900 Aquí es donde puede volverse un poco, no sé, 132 00:06:38,000 --> 00:06:40,820 como si simplemente esperara que funcionara de manera diferente a como realmente lo hace. 133 00:06:40,980 --> 00:06:41,700 Pero llegaremos allí. 134 00:06:42,280 --> 00:06:44,000 Hagamos el cambio en el archivo compose.yaml. 135 00:06:44,220 --> 00:06:48,660 Y quiero cambiar tailscalefunnel para que sea verdadero para este nodo, por ejemplo. 136 00:06:49,500 --> 00:06:54,060 Ahora, si hago eso y modifico el archivo de composición y luego hago un reinicio de composición de Docker, 137 00:06:54,960 --> 00:06:59,099 he reiniciado la copyparty y los contenedores tailscale de copyparty, el sidecast. 138 00:06:59,740 --> 00:07:03,980 Pero si hago el mismo comando exec, todavía dice falso. 139 00:07:04,660 --> 00:07:09,100 aunque nuestro archivo de composición dice, nuestra encuesta dice, 140 00:07:09,520 --> 00:07:11,299 aunque nuestro archivo de composición dice verdad aquí. 141 00:07:11,720 --> 00:07:13,660 Parece lógico que eso funcione ¿no? 142 00:07:13,860 --> 00:07:17,300 Pero el problema aquí es que el proceso de reinicio 143 00:07:17,960 --> 00:07:20,359 solo detiene el proceso dentro del contenedor 144 00:07:20,820 --> 00:07:22,320 y luego inicia el contenedor nuevamente. 145 00:07:22,360 --> 00:07:24,500 No ejecuta ninguna de las 146 00:07:25,060 --> 00:07:27,800 rutinas de creación o instanciación de contenedores que miran los archivos de configuración 147 00:07:28,400 --> 00:07:29,840 en su archivo YAML. 148 00:07:30,220 --> 00:07:31,720 No vuelve a calcular el hash y dice: " 149 00:07:31,860 --> 00:07:32,860 Oye, algo ha cambiado". 150 00:07:33,360 --> 00:07:34,380 Probablemente deberíamos actualizar esto. 151 00:07:34,940 --> 00:07:43,980 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. 152 00:07:44,700 --> 00:07:50,460 Compose no volverá atrás y leerá ese archivo de configuración hasta que vuelva a crear el contenedor. 153 00:07:51,280 --> 00:07:53,840 Así que realmente nos quedamos con sólo un par de opciones. 154 00:07:54,100 --> 00:07:59,560 Y lo que se me ocurrió es usar Docker Compose para forzar la recreación. 155 00:08:00,060 --> 00:08:01,620 Así que este es un problema de ciclo de vida. 156 00:08:02,300 --> 00:08:06,140 Entonces si podemos recrear la fuerza, entonces estaremos listos para empezar. 157 00:08:06,310 --> 00:08:06,940 Así que voy a hacer esto. 158 00:08:07,030 --> 00:08:11,419 Voy a hacer docker compose up menos D dash dash force recreate. 159 00:08:11,830 --> 00:08:14,240 Y mira lo que pasa con nuestro archivo YAML. 160 00:08:15,520 --> 00:08:17,740 Nuestro bloque de embudo ahora se lee verdadero. 161 00:08:18,380 --> 00:08:22,680 Entonces, si está utilizando estos bloques de configuración para definir configuraciones para aplicaciones, 162 00:08:23,760 --> 00:08:27,219 debe comprender que funcionan de manera diferente para vincular montajes. 163 00:08:27,780 --> 00:08:30,020 No se actualizan en tiempo real dentro del contenedor. 164 00:08:30,420 --> 00:08:36,440 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. 165 00:08:37,200 --> 00:08:41,219 Entonces, para realizar un cambio en esas configuraciones subyacentes y para que se transmitan a los contenedores, 166 00:08:41,799 --> 00:08:43,839 solo tienes que volver a crear el contenedor cada vez. 167 00:08:44,080 --> 00:08:47,260 Es un pequeño cambio en el flujo de trabajo, pero muy, muy importante. 168 00:08:47,560 --> 00:08:50,239 Así que ese es el problema con las configuraciones de Docker Compose. Se 169 00:08:51,140 --> 00:08:53,040 leen una vez cuando se crea el contenedor 170 00:08:53,320 --> 00:08:56,700 y luego quedan bloqueados hasta que se recrea ese contenedor por completo. 171 00:08:57,480 --> 00:09:03,200 No es obvio, y los documentos no lo dejan del todo claro, todo el ciclo de vida del contenedor. 172 00:09:03,460 --> 00:09:08,260 Así que espero que esto les ahorre a algunos de ustedes el dolor de cabeza de depuración que tuve hoy. 173 00:09:09,220 --> 00:09:15,180 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. 174 00:09:15,760 --> 00:09:18,720 Este ha sido uno de mis pequeños descubrimientos favoritos de las últimas semanas. 175 00:09:19,300 --> 00:09:23,859 Ahora, tengo que darles un enorme agradecimiento a todos ustedes por mirarnos durante el 2025. 176 00:09:25,360 --> 00:09:30,100 Y les deseo a todos ustedes un próspero y exitoso 2026. 177 00:09:30,760 --> 00:09:32,140 Muchas gracias por ver. He 178 00:09:32,560 --> 00:09:33,900 sido Alex de Tailscale.