¿Bootstrap / reconstruir sin clonar todo de nuevo?

La instancia de Discourse se encuentra detrás del GFW, por lo que utilizamos un proxy SOCKS5 para Git. Tenemos un par de complementos instalados, por lo que reconstruir o iniciar la aplicación clona todos estos repositorios una y otra vez. Desafortunadamente, la clonación resulta en tiempo de espera regularmente, por lo que todo el proceso comienza desde el principio, a pesar de que la base de código más reciente ya está clonada. He gastado más de 40 intentos y he perdido alrededor de cinco horas. La última barrera es un subproceso de yarn dentro del contenedor, que luego generalmente se agota, lo que resulta en una actualización fallida.

¿Hay alguna manera de estructurar app.yml, para que al menos no invoque todo el proceso de clonación de complementos? Clonar en el código del docker-manager y la base de código de Discourse tiene una probabilidad del 50/50, con la clonación posterior con una tasa de éxito de aproximadamente 1/3. No sé qué causa que el subproceso de yarn falle, pero en este momento parece no ser posible devolver la vida a Discourse con los métodos dados.

Por supuesto, fui lo suficientemente estúpido como para invocar launcher destroy app ya que quería iniciarlo manualmente, por lo que ni siquiera puedo hacer un launcher enter app para intentar ejecutar el comando de yarn manualmente. ¿Alguien tiene alguna idea? Gracias por su aporte.

No soy experto en estos asuntos, pero creo que la solución es un proxy de caché para las cosas que estás descargando.

Hay un web.china.template.yml, ¿lo estás usando?

Por supuesto. Uso el código fuente Ruby chino en todas las aplicaciones Rails, me alegro de tener eso al menos. Lo que me desconcierta: todos los repositorios (incluidos los de los plugins) ya están clonados, solo este subproceso de yarn invoca lo siguiente:

INFO -- : > cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'

Por la razón que sea, el GFW no tolera demasiados procesos de git clone uno tras otro y, en un momento dado, termina la conexión. Si solo pudiera ejecutar el lanzador con una bandera que dijera algo como “¡OK, amigo, el código está aquí, no es necesario clonar… solo arranca por ahora!”, :grinning:

Edición: Es increíble. Justo cuando escribimos, mi 78º intento finalmente funcionó después de 11 horas. Recurrí a sshuttle, que también tomó ~12 intentos, pero por la razón que sea, el GFW tuvo piedad de mi pobre alma.

Eso es lo que haría tu propio proxy de caché (o eso pensaría). Te recomendaría echar un vistazo a squid. Entonces verías que el lanzador se descarga de tu espejo en lugar de la fuente real.

launcher no tiene el código porque lo está clonando en un nuevo contenedor sin ningún código, por eso está descargando todo el código. Cada. Vez.

Sí, tenemos cierta experiencia con Squid hasta cierto punto. De todos modos, esto necesita una solución general, ya que no puedo pasar horas con una actualización manual de Discourse cada vez. Durante unos meses, usar un proxy socks5 normal había funcionado, sin embargo, es un juego constante de “darle al topo” con el GFW y acceder a GitHub se ha vuelto una molestia desde principios de octubre. No es de extrañar que haya toneladas de clones en este sitio gitee.com.

Gracias por la explicación sobre el lanzador, soy bastante tonto cuando se trata de Docker y había asumido que clona los repositorios de git localmente y luego los sobrescribe en algún contenedor.

Definitivamente investigaré las opciones de Squid, ya que esto también podría ayudar con mi segunda fuente de dolor: fonts.googleapis.com

1 me gusta

Eso no deberían ser git clones, sino una instalación desde el registro de paquetes de NPM. Seguro que puede haber un equivalente de bundle config mirror.https://rubygems.org https://gems.ruby-china.com/ para NPM/Yarn.

1 me gusta

Oh, justo después de eso siguió un subproceso que clonó algo y falló. Desafortunadamente, no puedo reproducir el registro de errores ahora. Definitivamente había extraído algo de GitHub, ya que el mensaje de error era el mismo error de handshake TLS / tiempo de espera. Sin embargo, ahora no es importante. Por alguna razón, npm nunca tiene tiempos de espera aquí. ¡La GFW es larga y está llena de misterios!

2 Me gusta

Quizás fue

1 me gusta

¡Eres el hombre! Exactamente eso rompió mi actualización.

2 Me gusta

Eso es bastante estable, ¿hay alguna posibilidad de que podamos enviarlo al registro de NPM ahora @pmusaraj?

3 Me gusta

Sí, claro, hagamos eso.

2 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.