Instalar Discourse para desenvolvimento usando Docker

Descobri uma solução para o meu problema. É um processo um tanto complicado e improvisado, mas funciona. Em resumo, atualizar para o Node.js 20.x.x corrigiu meu problema.

Criei uma imagem Docker que usa o Node.js v20.x.x em vez do v18.x.x padrão que a imagem Docker de desenvolvimento do Discourse usa.

Comecei criando este Dockerfile:

# NOME: discourse_node20
FROM discourse/discourse_dev:release

# atualiza o node para 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

Em seguida, compilei a imagem: docker build -t discourse_node20 - < Dockerfile

Em seguida, atualizei o comando docker run do d/boot_dev para usar a imagem discourse_node20 e não puxar discourse/discourse_dev:release, já que ela não está sendo usada. Aqui está esse comando atualizado em d/boot_dev:

# comente a linha abaixo
# 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 daí, consegui executar com sucesso d/boot_dev --init, d/rails s e d/ember-cli, o que me proporcionou um ambiente de desenvolvimento funcional no Docker 24 e Fedora 39.


Não sei por que o Node 20.x.x corrige o problema. Espero que isso seja corrigido no upstream na imagem de desenvolvimento principal. Eu ficaria feliz em contribuir com um pull request, mas atualizar uma dependência principal parece ser algo além de um simples PR de correção rápida da minha parte. :smile_cat: Bem, pelo menos estou liberado por enquanto!