Dockerfile (Apple/M1) para lanzar la rama estable de Discourse (v3.3.3) en 2025

Hola.

Hace unos días empecé a aprender Discourse y no encontré un Dockerfile para chips Apple/M. Así que creé el mío propio y me gustaría compartirlo con cualquiera que también quiera tener control sobre su propia imagen.

También, con esta publicación, me gustaría aprender cómo funcionan Discourse y la comunidad. Espero que encuentren útil mi publicación. Son bienvenidos a proporcionar cualquier comentario/pensamiento/pregunta sobre mi Dockerfile.

Mi Dockerfile es para chips Apple/M, pero se puede modificar fácilmente.

# https://meta.discourse.org/t/install-discourse-on-ubuntu-or-debian-for-development/14727/1
# bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/main/linux)
# https://github.com/discourse/discourse/blob/main/docs/DEVELOPER-ADVANCED.md

FROM ruby:3.2-bookworm

ARG PROJECT_PATH=${PROJECT_PATH:-discourse}

# INSTALAR DEPENDENCIAS
#
# build-essential - Herramientas de compilación esenciales para compilar software
# libxslt1-dev - Biblioteca para procesamiento XSLT
# libcurl4-openssl-dev - Biblioteca para solicitudes HTTP con soporte SSL
# libksba8 - Bibliotecas para funcionalidad criptográfica
# libksba-dev - Bibliotecas para funcionalidad criptográfica
# libreadline-dev - Biblioteca para GNU readline (línea de comandos interactiva)
# libssl-dev - Biblioteca de soporte SSL/TLS
# zlib1g-dev - Biblioteca de compresión
# libsnappy-dev - Biblioteca de compresión Snappy
# libyaml-dev - Biblioteca de análisis YAML
# libpq-dev - Biblioteca cliente de PostgreSQL para conexiones a bases de datos
# postgresql-client - Cliente de PostgreSQL para interactuar con bases de datos PostgreSQL remotas
# telnet - Herramienta para probar servicios de red
# nano - Editor de texto en línea de comandos
# git - Sistema de control de versiones Git
# net-tools - Utilidades para diagnosticar y probar conexiones de red
# dnsutils - Herramientas para consultas DNS
# iputils-ping - Utilidades para hacer ping a hosts y probar conectividad
# curl - Herramienta de línea de comandos Curl para transferir datos con URLs
# wget - Herramienta de línea de comandos Wget para descargar archivos
# tzdata - Datos de zona horaria para gestionar zonas horarias
# advancecomp - Herramientas para optimizar archivos PNG y MNG
# jhead - Herramienta para mostrar y manipular datos Exif
# jpegoptim - Herramienta para optimizar archivos JPEG
# libjpeg-turbo-progs - Herramientas para optimizar archivos JPEG
# optipng - Herramienta para optimizar archivos PNG
# pngcrush - Herramienta para optimizar archivos PNG
# pngquant - Herramienta para optimizar archivos PNG
# gnupg2 - GNU Privacy Guard para comunicación segura y almacenamiento de datos
# libjpeg-dev - Archivos de desarrollo para la biblioteca JPEG
# libpng-dev - Archivos de desarrollo para la biblioteca PNG
# libtiff-dev - Archivos de desarrollo para la biblioteca TIFF
# libwebp-dev - Archivos de desarrollo para la biblioteca WebP
# libxml2-dev - Archivos de desarrollo para la biblioteca XML
# libltdl-dev - Archivos de desarrollo para la biblioteca libtool
# libfreetype6-dev - Archivos de desarrollo para la biblioteca FreeType
# liblcms2-dev - Archivos de desarrollo para la biblioteca Little CMS
# liblqr-1-0-dev - Archivos de desarrollo para la biblioteca Liquid Rescale
# libfftw3-dev - Archivos de desarrollo para la biblioteca Fastest Fourier Transform in the West
# ghostscript - Intérprete para el lenguaje PostScript y PDF
#
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libxslt1-dev \
    libcurl4-openssl-dev \
    libksba8 \
    libksba-dev \
    libreadline-dev \
    libssl-dev \
    zlib1g-dev \
    libsnappy-dev \
    libyaml-dev \
    libpq-dev \
    postgresql-client \
    telnet \
    nano \
    git \
    net-tools \
    dnsutils \
    iputils-ping \
    curl \
    wget \
    tzdata \
    advancecomp \
    jhead \
    jpegoptim \
    libjpeg-turbo-progs \
    optipng \
    pngcrush \
    pngquant \
    gnupg2 \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libwebp-dev \
    libxml2-dev \
    libltdl-dev \
    libfreetype6-dev \
    liblcms2-dev \
    liblqr-1-0-dev \
    libfftw3-dev \
    ghostscript \
    && rm -rf /var/lib/apt/lists/*

# DIRECTORIO DE TRABAJO
#
WORKDIR /tmp

# Descargar e instalar ImageMagick 7
RUN cd /tmp && wget https://imagemagick.org/download/ImageMagick.tar.gz && \
    tar xvzf ImageMagick.tar.gz && \
    cd ImageMagick-* && \
    ./configure && \
    make && \
    make install && \
    ldconfig /usr/local/lib && \
    cd .. && \
    rm -rf ImageMagick* && \
    magick --version

# OXIPNG - OPTIMIZAR ARCHIVOS PNG (ARM64)
# Elige tu plataforma específica e instala el paquete requerido
# https://github.com/shssoichiro/oxipng/releases/
RUN wget https://github.com/shssoichiro/oxipng/releases/download/v9.1.3/oxipng_9.1.3-1_arm64.deb
RUN dpkg -i oxipng_9.1.3-1_arm64.deb

SHELL ["/bin/bash", "-c"]

# INSTALAR NODEJS Y PNPM Y YARN
#
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
RUN source /root/.nvm/nvm.sh && nvm install lts/hydrogen --default

# RUN source /root/.nvm/nvm.sh && \
#     corepack enable pnpm && \
#     corepack use pnpm@9

RUN source /root/.nvm/nvm.sh && \
    npm install -g yarn

# DIRECTORIO DE TRABAJO
#
WORKDIR /app

# INSTALAR DEPENDENCIAS DE RUBY ON RAILS
#
RUN gem install bundler -v 2.5.9

COPY ${PROJECT_PATH}/Gemfile /app/Gemfile
COPY ${PROJECT_PATH}/Gemfile.lock /app/Gemfile.lock

RUN bundle install --frozen

# INSTALAR DEPENDENCIAS DE NODEJS
#
RUN source /root/.nvm/nvm.sh && npm install -g svgo

COPY ${PROJECT_PATH}/package.json   /app/package.json
COPY ${PROJECT_PATH}/patches        /app/patches

RUN source /root/.nvm/nvm.sh && yarn -v

Después de ejecutar el contenedor, puedes lanzar el proyecto usando un simple

bin/ember-cli -u

¡Feliz codificación!

2 Me gusta