Installa Discourse per lo sviluppo usando Docker

Ho trovato una soluzione al mio problema. È un processo un po’ contorto e “hacky”, ma funziona. In sintesi, l’aggiornamento a Node.js 20.x.x ha risolto il mio problema.

Ho creato un’immagine Docker che utilizza Node.js v20.x.x invece di quella predefinita v18.x.x utilizzata dall’immagine Docker di sviluppo di Discourse.

Ho iniziato creando questo Dockerfile:

# NOME: discourse_node20
FROM discourse/discourse_dev:release

# aggiorna 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

Poi ho creato l’immagine: docker build -t discourse_node20 - < Dockerfile

Poi ho aggiornato il comando docker run di d/boot_dev per utilizzare l’immagine discourse_node20 e non scaricare discourse/discourse_dev:release poiché non viene utilizzata. Ecco il comando aggiornato in d/boot_dev:

# commenta la riga sottostante
# 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

Da lì sono stato in grado di eseguire con successo d/boot_dev --init, d/rails s e d/ember-cli, ottenendo un ambiente di sviluppo funzionante in Docker 24 e Fedora 39.


Non so perché Node 20.x.x risolva il problema. Spero che questo venga risolto upstream nell’immagine di sviluppo principale. Sarei felice di contribuire con una pull request, ma l’aggiornamento di una dipendenza principale sembra essere qualcosa di più di una semplice PR “al volo” da parte mia. :smile_cat: Beh, almeno per ora sono sbloccato!