Instalar Discourse para desarrollo usando Docker

Descubrí una solución para mi problema. Es un proceso un poco complicado y poco ortodoxo, pero funciona. En resumen, actualizar a Node.js 20.x.x solucionó mi problema.

Creé una imagen de Docker que utiliza Node.js v20.x.x en lugar de la v18.x.x predeterminada que utiliza la imagen de desarrollo de Discourse.

Comencé creando este Dockerfile:

# NOMBRE: discourse_node20
FROM discourse/discourse_dev:release

# actualizar node a LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y

Luego construí la imagen: docker build -t discourse_node20 - < Dockerfile

Luego actualicé el comando docker run de d/boot_dev para usar la imagen discourse_node20 y no descargar discourse/discourse_dev:release ya que no se está utilizando. Aquí está ese comando actualizado en d/boot_dev:

# comentar la línea de abajo
# docker pull discourse/discourse_dev:release
docker run \
    -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    -e NODE_OPTIONS=--max_old_space_size=8192 \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse_node20 /sbin/boot

A partir de ahí, pude ejecutar d/boot_dev --init, d/rails s y d/ember-cli con éxito, lo que me proporcionó un entorno de desarrollo funcional en Docker 24 y Fedora 39.


No sé por qué Node 20.x.x soluciona el problema. Espero que esto se solucione upstream en la imagen de desarrollo principal. Estaría feliz de contribuir con una solicitud de extracción, pero actualizar una dependencia importante parece algo más allá de una simple contribución rápida de mi parte. :smile_cat: Bueno, ¡al menos ya no estoy bloqueado por ahora!