Files
ht-docker-node/Dockerfile

143 lines
5.0 KiB
Docker
Raw Normal View History

2022-08-06 04:49:18 +02:00
FROM ubuntu:20.04
2023-04-02 13:22:11 +02:00
LABEL author="Task Venture Capital GmbH <hello@task.vc>"
2018-11-26 20:36:03 +01:00
WORKDIR /workspace
2016-06-04 03:19:20 +02:00
# important environment variables
2024-04-23 08:52:15 +02:00
ENV NODE_VERSION_LTS="20.12.2" NODE_VERSION_STABLE="20.12.2" NVM_DIR="/usr/local/nvm"
2016-06-04 02:43:39 +02:00
2016-06-04 03:19:20 +02:00
# Set debconf to run non-interactively and install packages
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \
&& apt-get update \
2016-04-24 01:34:44 +02:00
&& apt-get upgrade --no-install-recommends -y \
&& apt-get install -y -q --no-install-recommends \
2021-11-07 16:24:04 +01:00
# base libs
2016-04-24 01:34:44 +02:00
software-properties-common \
2016-02-28 00:15:12 +01:00
apt-transport-https \
build-essential \
ca-certificates \
2021-11-12 18:43:09 +01:00
gpg-agent \
2016-02-28 00:15:12 +01:00
curl \
2017-09-12 20:29:06 +02:00
g++ \
gcc \
2016-02-28 00:15:12 +01:00
git \
2017-09-12 20:29:06 +02:00
make \
2016-06-25 21:04:10 +02:00
openssl \
2016-02-28 00:15:12 +01:00
python \
2021-10-22 19:34:39 +02:00
python3 \
2016-02-28 00:15:12 +01:00
rsync \
2017-09-12 20:29:06 +02:00
ssh \
2017-06-30 17:13:37 +02:00
wget \
2021-11-07 18:44:28 +01:00
# puppeteer
gconf-service \
libasound2 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
ca-certificates \
fonts-liberation \
libappindicator1 \
libnss3 \
lsb-release \
xdg-utils \
2022-10-21 12:01:08 +02:00
# network
iputils-ping \
2023-04-02 12:56:23 +02:00
dnsutils \
2021-11-12 18:19:15 +01:00
# chrome
2021-11-07 19:01:54 +01:00
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& apt install -y -q --no-install-recommends ./google-chrome-stable_current_amd64.deb \
2021-11-12 18:19:15 +01:00
# mongodb
2021-11-12 18:24:58 +01:00
&& curl -fsSL https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - \
2021-11-12 18:19:15 +01:00
&& echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list \
2021-11-12 18:46:42 +01:00
&& apt-get update \
2021-11-12 18:19:15 +01:00
&& apt-get install -y -q --no-install-recommends \
mongodb-org \
2016-04-24 01:34:44 +02:00
&& apt-get clean \
&& rm -r /var/lib/apt/lists/*
2016-02-24 20:57:17 +01:00
2016-02-28 00:15:12 +01:00
# Install nvm with node and npm
2017-12-15 17:55:01 +01:00
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
2022-10-11 10:42:42 +02:00
# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Prepend to bashrc, before the "[ -z "$PS1" ] && return" line
RUN printf '%s\n%s\n%s\n\n%s\n' \
'export NVM_DIR="/usr/local/nvm"' \
'[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
'[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
"$(cat /etc/bash.bashrc)" > /etc/bash.bashrc
# Create a shell wrapper that sources nvm before executing commands
RUN echo '#!/bin/bash' > /usr/local/bin/bash-with-nvm \
&& echo 'set -e' >> /usr/local/bin/bash-with-nvm \
&& echo 'export NVM_DIR="/usr/local/nvm"' >> /usr/local/bin/bash-with-nvm \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /usr/local/bin/bash-with-nvm \
&& echo 'eval "$@"' >> /usr/local/bin/bash-with-nvm \
&& chmod +x /usr/local/bin/bash-with-nvm
# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]
# Create entrypoint wrapper for runtime nvm support (CI/CD workflows)
RUN echo '#!/bin/bash' > /usr/local/bin/docker-entrypoint.sh \
&& echo 'set -e' >> /usr/local/bin/docker-entrypoint.sh \
&& echo 'export NVM_DIR="/usr/local/nvm"' >> /usr/local/bin/docker-entrypoint.sh \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> /usr/local/bin/docker-entrypoint.sh \
&& echo '# If command is bash, source nvm in it' >> /usr/local/bin/docker-entrypoint.sh \
&& echo 'if [ "$1" = "bash" ] && [ "$2" = "-c" ]; then' >> /usr/local/bin/docker-entrypoint.sh \
&& echo ' shift 2' >> /usr/local/bin/docker-entrypoint.sh \
&& echo ' exec bash -c "source /etc/bash.bashrc && $*"' >> /usr/local/bin/docker-entrypoint.sh \
&& echo 'else' >> /usr/local/bin/docker-entrypoint.sh \
&& echo ' exec "$@"' >> /usr/local/bin/docker-entrypoint.sh \
&& echo 'fi' >> /usr/local/bin/docker-entrypoint.sh \
&& chmod +x /usr/local/bin/docker-entrypoint.sh
# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc
2023-03-29 12:13:24 +02:00
# prepare pnpm
ENV PNPM_HOME="/root/.local/share/pnpm/pnpm"
RUN mkdir -p ${PNPM_HOME}
ENV PATH="$PNPM_HOME:$PATH"
# Now nvm is available directly without sourcing
RUN nvm install $NODE_VERSION_STABLE \
2022-10-11 10:42:42 +02:00
&& nvm alias default $NODE_VERSION_STABLE \
&& nvm use default \
2023-03-29 12:53:57 +02:00
&& curl -fsSL https://get.pnpm.io/install.sh | bash - \
2023-03-29 12:42:59 +02:00
&& pnpm -v \
&& pnpm config set unsafe-perm true
2022-10-11 10:42:42 +02:00
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION_STABLE/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION_STABLE/bin:$PATH
# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]