Install Discourse for development using Docker

Я нашел решение своей проблемы. Процесс немного запутанный и «костыльный», но он работает. Вкратце: обновление до Node.js 20.x.x устранило мою проблему.

Я создал образ Docker, использующий Node.js v20.x.x вместо стандартного v18.x.x, который применяется в образе разработки Discourse.

Для начала я создал этот Dockerfile:

# ИМЯ: discourse_node20
FROM discourse/discourse_dev:release

# обновление node до 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

Затем я собрал образ: docker build -t discourse_node20 - < Dockerfile

После этого я обновил команду docker run в d/boot_dev, чтобы использовать образ discourse_node20 и не тянуть discourse/discourse_dev:release, так как он больше не нужен. Вот обновленная команда в d/boot_dev:

# закомментируйте строку ниже
# 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

После этого мне удалось успешно выполнить d/boot_dev --init, d/rails s и d/ember-cli, получив рабочую среду разработки в Docker 24 и Fedora 39.


Я не знаю, почему Node 20.x.x решает проблему. Надеюсь, это будет исправлено в основном образе разработки на стороне разработчиков. Я был бы рад внести вклад через pull request, но обновление основной зависимости кажется чем-то большим, чем просто случайный PR от меня. :smile_cat: Ну, по крайней мере, сейчас я не заблокирован!