FROM node:20-bullseye-slim

RUN echo "deb http://deb.debian.org/debian bullseye contrib non-free" > /etc/apt/sources.list.d/contrib.list \
  && apt-get update \
  && apt-get install -y ttf-mscorefonts-installer fontconfig \
  && apt-get -qyy clean

# fonts
RUN apt-get update \
  && apt-get -qqy --no-install-recommends install \
fonts-baekmuk fonts-takao fonts-horai-umefont fonts-beng fonts-beng-extra fonts-dejavu fonts-dejavu-core fonts-dejavu-extra fonts-deva fonts-deva-extra fonts-droid-fallback fonts-freefont-ttf fonts-gargi fonts-gubbi fonts-gujr fonts-gujr-extra fonts-guru fonts-guru-extra fonts-indic fonts-kacst fonts-kacst-one fonts-kalapi fonts-knda fonts-lao fonts-lato fonts-liberation fonts-liberation2 fonts-lklug-sinhala fonts-lohit-beng-assamese fonts-lohit-beng-bengali fonts-lohit-deva fonts-lohit-gujr fonts-lohit-guru fonts-lohit-knda fonts-lohit-mlym fonts-lohit-orya fonts-lohit-taml fonts-lohit-taml-classical fonts-lohit-telu fonts-lyx fonts-mathjax fonts-mlym fonts-nakula fonts-navilu fonts-noto-cjk fonts-noto-hinted fonts-noto-mono fonts-opensymbol fonts-orya fonts-orya-extra fonts-pagul fonts-sahadeva fonts-samyak-deva fonts-samyak-gujr fonts-samyak-mlym fonts-samyak-taml fonts-sarai fonts-sil-abyssinica fonts-sil-gentium fonts-sil-gentium-basic fonts-sil-padauk fonts-smc fonts-symbola fonts-taml fonts-telu fonts-telu-extra fonts-thai-tlwg fonts-tibetan-machine fonts-tlwg-garuda fonts-tlwg-garuda-ttf fonts-tlwg-kinnari fonts-tlwg-kinnari-ttf fonts-tlwg-laksaman fonts-tlwg-laksaman-ttf fonts-tlwg-loma fonts-tlwg-loma-ttf fonts-tlwg-mono fonts-tlwg-mono-ttf fonts-tlwg-norasi fonts-tlwg-norasi-ttf fonts-tlwg-purisa fonts-tlwg-purisa-ttf fonts-tlwg-sawasdee fonts-tlwg-sawasdee-ttf fonts-tlwg-typewriter fonts-tlwg-typewriter-ttf fonts-tlwg-typist fonts-tlwg-typist-ttf fonts-tlwg-typo fonts-tlwg-typo-ttf fonts-tlwg-umpush fonts-tlwg-umpush-ttf fonts-tlwg-waree fonts-tlwg-waree-ttf \
  && fc-cache -fv \
  && apt-get -qyy clean

# xvfb for Electron (pdf/png export)
RUN apt-get update \
  && apt-get install --no-install-recommends -y xvfb libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth procps libcap2-bin \
  && rm -rf /var/lib/apt/lists/* \
  && apt-get -qyy clean

# tini
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini


#npm
RUN mkdir -p /sites/export-service/tempFolder && mkdir -p /sites/export.dhtmlx.com && mkdir -p /data/exports && mkdir -p /data/configs
COPY ./package.json /sites/export-service

#files
COPY . /sites/export-service

# Install modules and allow a non-privileged user to run the node.js application
RUN cd /sites/export-service/ && npm install && chmod -R 777 /sites/export-service/

# We need it to remove the following error message:
# line 100: unknown element "blank"
RUN mv /sites/export-service/common/fonts.conf /etc/fonts/fonts.conf

# The export module doesn't use MySQL, it is added by the base image. 
# Remove it to fix the security warning:
RUN rm -rf /etc/mysql

ENV PUBLIC_PORT=80
WORKDIR /sites/export-service

# Alow using port 80 for non-root users
RUN setcap cap_net_bind_service=+ep `readlink -f \`which node\`` 

# Add a new user and create its home directory
RUN useradd -m user
# Switch to the user to not use the root privileges
USER user

ENTRYPOINT ["/tini", "--", "npm", "run", "start:docker"]
