From 6cce3c66a35197c721cae2efdf5eb5647e5c7165 Mon Sep 17 00:00:00 2001 From: Mistral OZ - MIO Date: Thu, 6 Nov 2025 17:54:53 +0100 Subject: [PATCH] Add node 24 - Remove Node 14 --- .github/workflows/workflow.yml | 8 +- Dockerfile.14-apache-bullseye | 3 + Dockerfile.14-apache-bullseye-build | 3 + Dockerfile.14-bullseye | 3 + Dockerfile.14-bullseye-build | 3 + Dockerfile.24-apache-bullseye | 228 +++++++++++++++++++++++++++ Dockerfile.24-apache-bullseye-build | 232 ++++++++++++++++++++++++++++ Dockerfile.24-bullseye | 136 ++++++++++++++++ Dockerfile.24-bullseye-build | 140 +++++++++++++++++ Makefile | 1 - orbit.yml | 8 +- 11 files changed, 756 insertions(+), 9 deletions(-) create mode 100644 Dockerfile.24-apache-bullseye create mode 100644 Dockerfile.24-apache-bullseye-build create mode 100644 Dockerfile.24-bullseye create mode 100644 Dockerfile.24-bullseye-build diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 649a051..25fe700 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -16,26 +16,26 @@ jobs: fail-fast: false matrix: include: - - variant: '14-bullseye' - variant: '16-bullseye' - variant: '18-bullseye' - variant: '20-bullseye' - variant: '22-bullseye' - - variant: '14-apache-bullseye' + - variant: '24-bullseye' - variant: '16-apache-bullseye' - variant: '18-apache-bullseye' - variant: '20-apache-bullseye' - variant: '22-apache-bullseye' - - variant: '14-bullseye-build' + - variant: '24-apache-bullseye' - variant: '16-bullseye-build' - variant: '18-bullseye-build' - variant: '20-bullseye-build' - variant: '22-bullseye-build' - - variant: '14-apache-bullseye-build' + - variant: '24-bullseye-build' - variant: '16-apache-bullseye-build' - variant: '18-apache-bullseye-build' - variant: '20-apache-bullseye-build' - variant: '22-apache-bullseye-build' + - variant: '24-apache-bullseye-build' runs-on: ubuntu-latest steps: - name: Set up QEMU diff --git a/Dockerfile.14-apache-bullseye b/Dockerfile.14-apache-bullseye index 2107063..50056c7 100644 --- a/Dockerfile.14-apache-bullseye +++ b/Dockerfile.14-apache-bullseye @@ -1,4 +1,7 @@ # DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) FROM debian:bullseye-slim LABEL authors="Julien Neuhart , David Négrier " diff --git a/Dockerfile.14-apache-bullseye-build b/Dockerfile.14-apache-bullseye-build index 554c7ee..871f02a 100644 --- a/Dockerfile.14-apache-bullseye-build +++ b/Dockerfile.14-apache-bullseye-build @@ -1,4 +1,7 @@ # DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) FROM debian:bullseye-slim LABEL authors="Julien Neuhart , David Négrier " diff --git a/Dockerfile.14-bullseye b/Dockerfile.14-bullseye index e34c09a..947ddc5 100644 --- a/Dockerfile.14-bullseye +++ b/Dockerfile.14-bullseye @@ -1,4 +1,7 @@ # DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) FROM debian:bullseye-slim LABEL authors="Julien Neuhart , David Négrier " diff --git a/Dockerfile.14-bullseye-build b/Dockerfile.14-bullseye-build index 37f94cb..1ea6bf8 100644 --- a/Dockerfile.14-bullseye-build +++ b/Dockerfile.14-bullseye-build @@ -1,4 +1,7 @@ # DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) FROM debian:bullseye-slim LABEL authors="Julien Neuhart , David Négrier " diff --git a/Dockerfile.24-apache-bullseye b/Dockerfile.24-apache-bullseye new file mode 100644 index 0000000..f7924f1 --- /dev/null +++ b/Dockerfile.24-apache-bullseye @@ -0,0 +1,228 @@ +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +FROM debian:bullseye-slim + +LABEL authors="Julien Neuhart , David Négrier " + +# |-------------------------------------------------------------------------- +# | Required libraries +# |-------------------------------------------------------------------------- +# | +# | Installs required libraries. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends curl git nano sudo ca-certificates procps libfontconfig tini --no-install-recommends + +# |-------------------------------------------------------------------------- +# | Supercronic +# |-------------------------------------------------------------------------- +# | +# | Supercronic is a drop-in replacement for cron (for containers). +# | + +RUN SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-$( dpkg --print-architecture ) \ + && SUPERCRONIC=supercronic-linux-$( dpkg --print-architecture ) \ + && curl -fsSLO "$SUPERCRONIC_URL" \ + && chmod +x "$SUPERCRONIC" \ + && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ + && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + + # |-------------------------------------------------------------------------- + # | User + # |-------------------------------------------------------------------------- + # | + # | Define a default user with sudo rights. + # | + + RUN useradd -ms /bin/bash docker && adduser docker sudo + # Users in the sudoers group can sudo as root without password. + RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + + + +# |-------------------------------------------------------------------------- +# | Apache +# |-------------------------------------------------------------------------- +# | +# | Installs Apache. +# | + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apache2 \ + && rm -rf /var/lib/apt/lists/* + +ENV APACHE_CONFDIR /etc/apache2 +ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars + +RUN set -ex \ + \ +# generically convert lines like +# export APACHE_RUN_USER=www-data +# into +# : ${APACHE_RUN_USER:=www-data} +# export APACHE_RUN_USER +# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...") + && sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS" \ + \ +# setup directories and permissions + && . "$APACHE_ENVVARS" \ + && for dir in \ + "$APACHE_LOCK_DIR" \ + "$APACHE_RUN_DIR" \ + "$APACHE_LOG_DIR" \ + /var/www/html \ + ; do \ + rm -rvf "$dir" \ + && mkdir -p "$dir" \ + && chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"; \ + done + +# logs should go to stdout / stderr +RUN set -ex \ + && . "$APACHE_ENVVARS" \ + && ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" + +ENV APACHE_DOCUMENT_ROOT / + +RUN { \ + echo 'DirectoryIndex disabled'; \ + echo 'DirectoryIndex index.html'; \ + echo; \ + echo ''; \ + echo '\tOptions -Indexes'; \ + echo '\tAllowOverride All'; \ + echo ''; \ + } | tee "$APACHE_CONFDIR/conf-available/nodejs.conf" \ + && a2enconf nodejs + +RUN sed -ri -e 's!/var/www/html!/var/www/html/${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf +RUN sed -ri -e 's!/var/www/!/var/www/html/${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +# |-------------------------------------------------------------------------- +# | Apache mod_rewrite +# |-------------------------------------------------------------------------- +# | +# | Enables Apache mod_rewrite. +# | + +RUN a2enmod rewrite + + +# |-------------------------------------------------------------------------- +# | NodeJS +# |-------------------------------------------------------------------------- +# | +# | Installs NodeJS and npm. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends gnupg &&\ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends nodejs + +# |-------------------------------------------------------------------------- +# | yarn +# |-------------------------------------------------------------------------- +# | +# | Installs yarn. It provides some nice improvements over npm. +# | + +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends yarn + +# |-------------------------------------------------------------------------- +# | PATH updating +# |-------------------------------------------------------------------------- +# | +# | Let's add ./node_modules/.bin to the PATH (utility function to use NPM bin easily) +# | + +ENV PATH="$PATH:./node_modules/.bin" +RUN sed -i 's#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:./node_modules/.bin#g' /etc/sudoers + +USER docker +# |-------------------------------------------------------------------------- +# | SSH client +# |-------------------------------------------------------------------------- +# | +# | Let's set-up the SSH client (for connections to private git repositories) +# | We create an empty known_host file and we launch the ssh-agent +# | + +RUN mkdir ~/.ssh && touch ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts && eval $(ssh-agent -s) + +# |-------------------------------------------------------------------------- +# | .bashrc updating +# |-------------------------------------------------------------------------- +# | +# | Let's update the .bashrc to add nice aliases +# | +RUN { \ + echo "alias ls='ls --color=auto'"; \ + echo "alias ll='ls --color=auto -alF'"; \ + echo "alias la='ls --color=auto -A'"; \ + echo "alias l='ls --color=auto -CF'"; \ + } >> ~/.bashrc + +USER root + +# |-------------------------------------------------------------------------- +# | Entrypoint +# |-------------------------------------------------------------------------- +# | +# | Defines the entrypoint. +# | + +ENV NODE_VERSION=24.x + + +RUN mkdir -p /var/www/html && chown docker:docker /var/www/html +WORKDIR /var/www/html + + +COPY utils/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +COPY utils/docker-entrypoint-as-root.sh /usr/local/bin/docker-entrypoint-as-root.sh +COPY utils/startup_commands.js /usr/local/bin/startup_commands.js +COPY utils/generate_cron.js /usr/local/bin/generate_cron.js + + + +COPY utils/enable_apache_mods.js /usr/local/bin/enable_apache_mods.js +COPY utils/apache-expose-envvars.sh /usr/local/bin/apache-expose-envvars.sh + +# Let's register a servername to remove the message "apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message" +RUN echo "ServerName localhost" > /etc/apache2/conf-available/servername.conf +RUN a2enconf servername + +EXPOSE 80 + +# |-------------------------------------------------------------------------- +# | Apache user +# |-------------------------------------------------------------------------- +# | +# | Defines Apache user. By default, we switch this to "docker" user. +# | This way, no problem to write from Apache in the current working directory. +# | Important! This should be changed back to www-data in production. +# | + +ENV APACHE_RUN_USER=docker \ + APACHE_RUN_GROUP=docker + +COPY utils/apache2-foreground /usr/local/bin/ +CMD ["apache2-foreground"] + + + + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + + +USER docker diff --git a/Dockerfile.24-apache-bullseye-build b/Dockerfile.24-apache-bullseye-build new file mode 100644 index 0000000..4052e44 --- /dev/null +++ b/Dockerfile.24-apache-bullseye-build @@ -0,0 +1,232 @@ +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +FROM debian:bullseye-slim + +LABEL authors="Julien Neuhart , David Négrier " + +# |-------------------------------------------------------------------------- +# | Required libraries +# |-------------------------------------------------------------------------- +# | +# | Installs required libraries. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends curl git nano sudo ca-certificates procps libfontconfig tini --no-install-recommends + +# |-------------------------------------------------------------------------- +# | Supercronic +# |-------------------------------------------------------------------------- +# | +# | Supercronic is a drop-in replacement for cron (for containers). +# | + +RUN SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-$( dpkg --print-architecture ) \ + && SUPERCRONIC=supercronic-linux-$( dpkg --print-architecture ) \ + && curl -fsSLO "$SUPERCRONIC_URL" \ + && chmod +x "$SUPERCRONIC" \ + && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ + && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + + # |-------------------------------------------------------------------------- + # | User + # |-------------------------------------------------------------------------- + # | + # | Define a default user with sudo rights. + # | + + RUN useradd -ms /bin/bash docker && adduser docker sudo + # Users in the sudoers group can sudo as root without password. + RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + + + +# |-------------------------------------------------------------------------- +# | Apache +# |-------------------------------------------------------------------------- +# | +# | Installs Apache. +# | + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apache2 \ + && rm -rf /var/lib/apt/lists/* + +ENV APACHE_CONFDIR /etc/apache2 +ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars + +RUN set -ex \ + \ +# generically convert lines like +# export APACHE_RUN_USER=www-data +# into +# : ${APACHE_RUN_USER:=www-data} +# export APACHE_RUN_USER +# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...") + && sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS" \ + \ +# setup directories and permissions + && . "$APACHE_ENVVARS" \ + && for dir in \ + "$APACHE_LOCK_DIR" \ + "$APACHE_RUN_DIR" \ + "$APACHE_LOG_DIR" \ + /var/www/html \ + ; do \ + rm -rvf "$dir" \ + && mkdir -p "$dir" \ + && chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"; \ + done + +# logs should go to stdout / stderr +RUN set -ex \ + && . "$APACHE_ENVVARS" \ + && ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" \ + && ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" + +ENV APACHE_DOCUMENT_ROOT / + +RUN { \ + echo 'DirectoryIndex disabled'; \ + echo 'DirectoryIndex index.html'; \ + echo; \ + echo ''; \ + echo '\tOptions -Indexes'; \ + echo '\tAllowOverride All'; \ + echo ''; \ + } | tee "$APACHE_CONFDIR/conf-available/nodejs.conf" \ + && a2enconf nodejs + +RUN sed -ri -e 's!/var/www/html!/var/www/html/${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf +RUN sed -ri -e 's!/var/www/!/var/www/html/${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +# |-------------------------------------------------------------------------- +# | Apache mod_rewrite +# |-------------------------------------------------------------------------- +# | +# | Enables Apache mod_rewrite. +# | + +RUN a2enmod rewrite + + +# |-------------------------------------------------------------------------- +# | NodeJS +# |-------------------------------------------------------------------------- +# | +# | Installs NodeJS and npm. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends gnupg &&\ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends nodejs + +# |-------------------------------------------------------------------------- +# | yarn +# |-------------------------------------------------------------------------- +# | +# | Installs yarn. It provides some nice improvements over npm. +# | + +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends yarn + +# |-------------------------------------------------------------------------- +# | PATH updating +# |-------------------------------------------------------------------------- +# | +# | Let's add ./node_modules/.bin to the PATH (utility function to use NPM bin easily) +# | + +ENV PATH="$PATH:./node_modules/.bin" +RUN sed -i 's#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:./node_modules/.bin#g' /etc/sudoers + +USER docker +# |-------------------------------------------------------------------------- +# | SSH client +# |-------------------------------------------------------------------------- +# | +# | Let's set-up the SSH client (for connections to private git repositories) +# | We create an empty known_host file and we launch the ssh-agent +# | + +RUN mkdir ~/.ssh && touch ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts && eval $(ssh-agent -s) + +# |-------------------------------------------------------------------------- +# | .bashrc updating +# |-------------------------------------------------------------------------- +# | +# | Let's update the .bashrc to add nice aliases +# | +RUN { \ + echo "alias ls='ls --color=auto'"; \ + echo "alias ll='ls --color=auto -alF'"; \ + echo "alias la='ls --color=auto -A'"; \ + echo "alias l='ls --color=auto -CF'"; \ + } >> ~/.bashrc + +USER root + +# |-------------------------------------------------------------------------- +# | Entrypoint +# |-------------------------------------------------------------------------- +# | +# | Defines the entrypoint. +# | + +ENV NODE_VERSION=24.x + + +RUN mkdir -p /var/www/html && chown docker:docker /var/www/html +WORKDIR /var/www/html + + +COPY utils/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +COPY utils/docker-entrypoint-as-root.sh /usr/local/bin/docker-entrypoint-as-root.sh +COPY utils/startup_commands.js /usr/local/bin/startup_commands.js +COPY utils/generate_cron.js /usr/local/bin/generate_cron.js + + + +COPY utils/enable_apache_mods.js /usr/local/bin/enable_apache_mods.js +COPY utils/apache-expose-envvars.sh /usr/local/bin/apache-expose-envvars.sh + +# Let's register a servername to remove the message "apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message" +RUN echo "ServerName localhost" > /etc/apache2/conf-available/servername.conf +RUN a2enconf servername + +EXPOSE 80 + +# |-------------------------------------------------------------------------- +# | Apache user +# |-------------------------------------------------------------------------- +# | +# | Defines Apache user. By default, we switch this to "docker" user. +# | This way, no problem to write from Apache in the current working directory. +# | Important! This should be changed back to www-data in production. +# | + +ENV APACHE_RUN_USER=docker \ + APACHE_RUN_GROUP=docker + +COPY utils/apache2-foreground /usr/local/bin/ +CMD ["apache2-foreground"] + + + +# Let's install the build tools (useful for node-gyp) +RUN apt-get update &&\ + apt-get install -y --no-install-recommends build-essential + + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + + +USER docker diff --git a/Dockerfile.24-bullseye b/Dockerfile.24-bullseye new file mode 100644 index 0000000..b4c7c0c --- /dev/null +++ b/Dockerfile.24-bullseye @@ -0,0 +1,136 @@ +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +FROM debian:bullseye-slim + +LABEL authors="Julien Neuhart , David Négrier " + +# |-------------------------------------------------------------------------- +# | Required libraries +# |-------------------------------------------------------------------------- +# | +# | Installs required libraries. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends curl git nano sudo ca-certificates procps libfontconfig tini --no-install-recommends + +# |-------------------------------------------------------------------------- +# | Supercronic +# |-------------------------------------------------------------------------- +# | +# | Supercronic is a drop-in replacement for cron (for containers). +# | + +RUN SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-$( dpkg --print-architecture ) \ + && SUPERCRONIC=supercronic-linux-$( dpkg --print-architecture ) \ + && curl -fsSLO "$SUPERCRONIC_URL" \ + && chmod +x "$SUPERCRONIC" \ + && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ + && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + + # |-------------------------------------------------------------------------- + # | User + # |-------------------------------------------------------------------------- + # | + # | Define a default user with sudo rights. + # | + + RUN useradd -ms /bin/bash docker && adduser docker sudo + # Users in the sudoers group can sudo as root without password. + RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + + + + +# |-------------------------------------------------------------------------- +# | NodeJS +# |-------------------------------------------------------------------------- +# | +# | Installs NodeJS and npm. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends gnupg &&\ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends nodejs + +# |-------------------------------------------------------------------------- +# | yarn +# |-------------------------------------------------------------------------- +# | +# | Installs yarn. It provides some nice improvements over npm. +# | + +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends yarn + +# |-------------------------------------------------------------------------- +# | PATH updating +# |-------------------------------------------------------------------------- +# | +# | Let's add ./node_modules/.bin to the PATH (utility function to use NPM bin easily) +# | + +ENV PATH="$PATH:./node_modules/.bin" +RUN sed -i 's#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:./node_modules/.bin#g' /etc/sudoers + +USER docker +# |-------------------------------------------------------------------------- +# | SSH client +# |-------------------------------------------------------------------------- +# | +# | Let's set-up the SSH client (for connections to private git repositories) +# | We create an empty known_host file and we launch the ssh-agent +# | + +RUN mkdir ~/.ssh && touch ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts && eval $(ssh-agent -s) + +# |-------------------------------------------------------------------------- +# | .bashrc updating +# |-------------------------------------------------------------------------- +# | +# | Let's update the .bashrc to add nice aliases +# | +RUN { \ + echo "alias ls='ls --color=auto'"; \ + echo "alias ll='ls --color=auto -alF'"; \ + echo "alias la='ls --color=auto -A'"; \ + echo "alias l='ls --color=auto -CF'"; \ + } >> ~/.bashrc + +USER root + +# |-------------------------------------------------------------------------- +# | Entrypoint +# |-------------------------------------------------------------------------- +# | +# | Defines the entrypoint. +# | + +ENV NODE_VERSION=24.x + + +RUN mkdir -p /usr/src/app && chown docker:docker /usr/src/app +WORKDIR /usr/src/app + + +COPY utils/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +COPY utils/docker-entrypoint-as-root.sh /usr/local/bin/docker-entrypoint-as-root.sh +COPY utils/startup_commands.js /usr/local/bin/startup_commands.js +COPY utils/generate_cron.js /usr/local/bin/generate_cron.js + + + +CMD [ "node" ] + + + + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + + +USER docker diff --git a/Dockerfile.24-bullseye-build b/Dockerfile.24-bullseye-build new file mode 100644 index 0000000..04f547c --- /dev/null +++ b/Dockerfile.24-bullseye-build @@ -0,0 +1,140 @@ +# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint) +FROM debian:bullseye-slim + +LABEL authors="Julien Neuhart , David Négrier " + +# |-------------------------------------------------------------------------- +# | Required libraries +# |-------------------------------------------------------------------------- +# | +# | Installs required libraries. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends curl git nano sudo ca-certificates procps libfontconfig tini --no-install-recommends + +# |-------------------------------------------------------------------------- +# | Supercronic +# |-------------------------------------------------------------------------- +# | +# | Supercronic is a drop-in replacement for cron (for containers). +# | + +RUN SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.12/supercronic-linux-$( dpkg --print-architecture ) \ + && SUPERCRONIC=supercronic-linux-$( dpkg --print-architecture ) \ + && curl -fsSLO "$SUPERCRONIC_URL" \ + && chmod +x "$SUPERCRONIC" \ + && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ + && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic + + # |-------------------------------------------------------------------------- + # | User + # |-------------------------------------------------------------------------- + # | + # | Define a default user with sudo rights. + # | + + RUN useradd -ms /bin/bash docker && adduser docker sudo + # Users in the sudoers group can sudo as root without password. + RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + + + + +# |-------------------------------------------------------------------------- +# | NodeJS +# |-------------------------------------------------------------------------- +# | +# | Installs NodeJS and npm. +# | + +RUN apt-get update &&\ + apt-get install -y --no-install-recommends gnupg &&\ + mkdir -p /etc/apt/keyrings && \ + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends nodejs + +# |-------------------------------------------------------------------------- +# | yarn +# |-------------------------------------------------------------------------- +# | +# | Installs yarn. It provides some nice improvements over npm. +# | + +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\ + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list &&\ + apt-get update &&\ + apt-get install -y --no-install-recommends yarn + +# |-------------------------------------------------------------------------- +# | PATH updating +# |-------------------------------------------------------------------------- +# | +# | Let's add ./node_modules/.bin to the PATH (utility function to use NPM bin easily) +# | + +ENV PATH="$PATH:./node_modules/.bin" +RUN sed -i 's#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:./node_modules/.bin#g' /etc/sudoers + +USER docker +# |-------------------------------------------------------------------------- +# | SSH client +# |-------------------------------------------------------------------------- +# | +# | Let's set-up the SSH client (for connections to private git repositories) +# | We create an empty known_host file and we launch the ssh-agent +# | + +RUN mkdir ~/.ssh && touch ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts && eval $(ssh-agent -s) + +# |-------------------------------------------------------------------------- +# | .bashrc updating +# |-------------------------------------------------------------------------- +# | +# | Let's update the .bashrc to add nice aliases +# | +RUN { \ + echo "alias ls='ls --color=auto'"; \ + echo "alias ll='ls --color=auto -alF'"; \ + echo "alias la='ls --color=auto -A'"; \ + echo "alias l='ls --color=auto -CF'"; \ + } >> ~/.bashrc + +USER root + +# |-------------------------------------------------------------------------- +# | Entrypoint +# |-------------------------------------------------------------------------- +# | +# | Defines the entrypoint. +# | + +ENV NODE_VERSION=24.x + + +RUN mkdir -p /usr/src/app && chown docker:docker /usr/src/app +WORKDIR /usr/src/app + + +COPY utils/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh +COPY utils/docker-entrypoint-as-root.sh /usr/local/bin/docker-entrypoint-as-root.sh +COPY utils/startup_commands.js /usr/local/bin/startup_commands.js +COPY utils/generate_cron.js /usr/local/bin/generate_cron.js + + + +CMD [ "node" ] + + + +# Let's install the build tools (useful for node-gyp) +RUN apt-get update &&\ + apt-get install -y --no-install-recommends build-essential + + +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] + + +USER docker diff --git a/Makefile b/Makefile index f91d494..23f6367 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,6 @@ blueprint: ## Generate all blueprints file @if ! type orbit >/dev/null 2>&1; then echo "Missing orbit dependency, please install from https://github.com/gulien/orbit/"; exit 1; fi orbit run generate - @sed -i '1i\# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint)' Dockerfile.* test-latest: test-20 ## Test the latest build only diff --git a/orbit.yml b/orbit.yml index 62d9996..745ed96 100644 --- a/orbit.yml +++ b/orbit.yml @@ -19,25 +19,25 @@ tasks: - use: generate short: Generates all Dockerfiles run: - - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.14-bullseye -p "NodeVersion,14;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.16-bullseye -p "NodeVersion,16;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.18-bullseye -p "NodeVersion,18;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.20-bullseye -p "NodeVersion,20;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.22-bullseye -p "NodeVersion,22;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.14-apache-bullseye -p "NodeVersion,14;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" + - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.24-bullseye -p "NodeVersion,24;Variant,standalone;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.16-apache-bullseye -p "NodeVersion,16;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.18-apache-bullseye -p "NodeVersion,18;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.20-apache-bullseye -p "NodeVersion,20;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.22-apache-bullseye -p "NodeVersion,22;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" - - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.14-bullseye-build -p "NodeVersion,14;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" + - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.24-apache-bullseye -p "NodeVersion,24;Variant,apache;BaseImage,debian:bullseye-slim;Build,false" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.16-bullseye-build -p "NodeVersion,16;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.18-bullseye-build -p "NodeVersion,18;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.20-bullseye-build -p "NodeVersion,20;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.22-bullseye-build -p "NodeVersion,22;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" - - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.14-apache-bullseye-build -p "NodeVersion,14;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" + - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.24-bullseye-build -p "NodeVersion,24;Variant,standalone;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.16-apache-bullseye-build -p "NodeVersion,16;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.18-apache-bullseye-build -p "NodeVersion,18;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.20-apache-bullseye-build -p "NodeVersion,20;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.22-apache-bullseye-build -p "NodeVersion,22;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" + - orbit generate -f utils/Dockerfile.blueprint -o Dockerfile.24-apache-bullseye-build -p "NodeVersion,24;Variant,apache;BaseImage,debian:bullseye-slim;Build,true" - |- sed -i '1i\# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint)' Dockerfile.*