¿Instalación de subcarpeta de Docker no funciona debido a error de proxy de Ember-CLI?

(Etiquetado como unsupported-install pero agradecería la opinión de un gurú de todos modos :slight_smile:)

Chicos, estoy intentando ejecutar una imagen básica de Discourse en una configuración de contenedor múltiple Docker simple-ish(?) a través de Docker Compose.

Aquí están los conceptos básicos:

  • El foro vive en una subcarpeta, llamémosla /board, por lo tanto (https://blah.com/board)
  • nginx está pasando las llamadas a /board:443 a localhost:4000.
  • Discourse rails se estaba ejecutando en el puerto 4000 (porque 3000 está siendo utilizado por otra cosa)
  • Incluido en los ENVs de Rails hay una configuración crucial que hace que esto funcione:
    DISCOURSE_RELATIVE_URL_ROOT: “/board”

Ahora he actualizado la versión de Discourse (pre Ember-CLI) y las cosas ya no funcionan.

Así que, por supuesto, agrego un contenedor para Ember-CLI que ejecuta:

discourse-ember:
    command: bin/ember-cli --port 4000 --proxy "http://localhost:4200"

Así que Ember ahora está manejando las llamadas que llegan al puerto 4000 en primera instancia.

Muevo el contenedor de Discourse rails al puerto 4200 y lo pongo en marcha.

Primero las buenas noticias:

  • ¡hacer curl al sitio de desarrollo funciona!

Ahora las malas noticias:

  • No funciona en el navegador, ¿por qué?:
    porque aparentemente está intentando llegar a Discourse pero solicitando:
    /bootstrap.json
    dando el error:
Discourse Ember CLI Proxy Error
Error: Could not get http://0.0.0.0:4200/bootstrap.json

FetchError: invalid json response body at http://0.0.0.0:4200/bootstrap.json?for_url=%2Fboard reason: Unexpected token N in JSON at position 0

en lugar de
/board/bootstrap.json (que devuelve datos).

Si en cambio uso esta configuración:

  discourse-ember:
    command: bin/ember-cli --port 4000 --proxy "http://0.0.0.0:4200/forum"

Obtengo un error de Rails:

Routing Error
No route matches [GET] "/forum"

Sin embargo, no muy lejos, me proporciona:

bootstrap_path	GET	/bootstrap(.:format)	
bootstrap#index {:format=>/(json|html|\*\/ \*)/}

¿Que es exactamente la ruta que estaba intentando alcanzar?

¿Cómo hago que Ember sea lo suficientemente inteligente como para hacer proxy a la subcarpeta cuando intenta obtener la información de bootstrap?, es decir:

http://0.0.0.0:4200/forum/bootstrap.json

Recuerda, en este caso, Ember se está ejecutando en su propio contenedor.

1 me gusta

¿Cómo estás construyendo el contenedor? ¿Estás lanzando ese contenedor desde docker-compose?

Hubo . . . eh, alguna configuración de entorno . . . que podría usarse para intentar evitar que ember-cli funcionara; ¿la eliminaste? (¿Creo que de todos modos ahora se ignora?)

Sí, estas definiciones de contenedor están en un docker-compose.

Actualmente no hay configuraciones de entorno en el contenedor de ember-cli.

¿Estás creando el contenedor con el lanzador con las cosas de Servir Discourse desde una subcarpeta (prefijo de ruta) en lugar de un subdominio antes de que docker-compose lo inicie?

¿Cuál es el proxy? ¿Quizás simplemente iniciar Discourse con el lanzador y usar docker-args para configurar otras cosas que se necesiten? Para Traefik, hago algo como esto:

        --docker-args "-l traefik.frontend.rule=Host:{{discourse_hostname}};PathPrefix:/{{discourse_subfolder}} \
        -l traefik.frontend.entryPoints=https \
        -l traefik.backend={{discourse_shortname}} \
        -l traefik.port=80 \
        {{ docker_extra_args | default('')}}"
1 me gusta

No, solo estoy usando una imagen Docker de Discourse (versión 2.8.9).

(en realidad la imagen está alojada localmente, pero es prácticamente:)

  discourse:
    command: bin/rails s -b 0.0.0.0 -p 4200
    image: discourse:v2.8.9
    environment:
      DISCOURSE_PORT: 4200
      DISCOURSE_RELATIVE_URL_ROOT: “/board”
     <SNIP>
    ports:
      - 4200:4200
  discourse-ember:
    command: bin/ember-cli --port 4000 --proxy "http://0.0.0.0:4200"
    image: discourse:v2.8.9
    ports:
      - 4000:4000

Hmm. En ese caso, no puedo explicar cómo funcionó alguna vez. Creo que necesitas construir una imagen con un lanzador que agregue las cosas para admitir instalaciones en subcarpetas.

Resuelto.

Fue culpa mía por no añadir esto al contenedor Ember CLI (ya estaba en el contenedor Rails):

DISCOURSE_RELATIVE_URL_ROOT: "/board"

Ups :sweat_smile:

Para tu información, creo que el archivo clave en el código fuente es este:

3 Me gusta

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