Skip to content

Commit

Permalink
Adding support for Node 22
Browse files Browse the repository at this point in the history
  • Loading branch information
moufmouf committed Oct 28, 2024
1 parent 4535ccd commit a16f1cb
Show file tree
Hide file tree
Showing 7 changed files with 751 additions and 2 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,22 @@ jobs:
- variant: '16-bullseye'
- variant: '18-bullseye'
- variant: '20-bullseye'
- variant: '22-bullseye'
- variant: '14-apache-bullseye'
- variant: '16-apache-bullseye'
- variant: '18-apache-bullseye'
- variant: '20-apache-bullseye'
- variant: '22-apache-bullseye'
- variant: '14-bullseye-build'
- variant: '16-bullseye-build'
- variant: '18-bullseye-build'
- variant: '20-bullseye-build'
- variant: '22-bullseye-build'
- variant: '14-apache-bullseye-build'
- variant: '16-apache-bullseye-build'
- variant: '18-apache-bullseye-build'
- variant: '20-apache-bullseye-build'
- variant: '22-apache-bullseye-build'
runs-on: ubuntu-latest
steps:
- name: Set up QEMU
Expand Down
228 changes: 228 additions & 0 deletions Dockerfile.22-apache-bullseye
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
# DO NOT EDIT THIS FILE : Make yours changes in /utils/Dockerfile.blueprint)
FROM debian:bullseye-slim

LABEL authors="Julien Neuhart <[email protected]>, David Négrier <[email protected]>"

# |--------------------------------------------------------------------------
# | 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 '<Directory /var/www/>'; \
echo '\tOptions -Indexes'; \
echo '\tAllowOverride All'; \
echo '</Directory>'; \
} | 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_22.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=22.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
Loading

0 comments on commit a16f1cb

Please sign in to comment.