FROM node:22.22.0-trixie-slim # ? Setup a test SoftHSM module. In production a real HSM is used. ARG SOFTHSM2_VERSION=2.5.0 ENV SOFTHSM2_VERSION=${SOFTHSM2_VERSION} \ SOFTHSM2_SOURCES=/tmp/softhsm2 # Install all build and runtime dependencies RUN apt-get update && apt-get install -y \ build-essential \ autoconf \ automake \ git \ libtool \ libssl-dev \ python3 \ make \ g++ \ openssh-client \ openssl \ curl \ wget \ perl \ pkg-config \ unzip \ libaio1t64 \ unixodbc \ unixodbc-dev \ freetds-dev \ freetds-bin \ tdsodbc \ opensc \ smbclient \ && curl -1sLf 'https://artifacts-cli.infisical.com/setup.deb.sh' | bash \ && apt-get update && apt-get install -y infisical=0.43.79 \ && rm -rf /var/lib/apt/lists/* # Create libaio symlink for Oracle Instant Client RUN ARCH=$(dpkg --print-architecture) && \ if [ "$ARCH" = "arm64" ]; then \ ln -sf /lib/aarch64-linux-gnu/libaio.so.1t64 /lib/aarch64-linux-gnu/libaio.so.1; \ else \ ln -sf /lib/x86_64-linux-gnu/libaio.so.1t64 /lib/x86_64-linux-gnu/libaio.so.1; \ fi RUN printf "[FreeTDS]\nDescription = FreeTDS Driver\nDriver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\nSetup = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\nFileUsage = 1\n" > /etc/odbcinst.ini # Build and install SoftHSM2 RUN git clone https://github.com/opendnssec/SoftHSMv2.git ${SOFTHSM2_SOURCES} WORKDIR ${SOFTHSM2_SOURCES} RUN git checkout ${SOFTHSM2_VERSION} -b ${SOFTHSM2_VERSION} \ && sh autogen.sh \ && ./configure --prefix=/usr/local --disable-gost \ && make \ && make install WORKDIR /root RUN rm -fr ${SOFTHSM2_SOURCES} # Install Oracle Instant Client for OracleDB mTLS (Wallet) support RUN mkdir -p /opt/oracle && \ ARCH=$(dpkg --print-architecture) && \ if [ "$ARCH" = "arm64" ]; then \ EXPECTED_SHA="9c9a32051e97f087016fb334b7ad5c0aea8511ca8363afd8e0dc6ec4fc515c32" && \ curl -o /tmp/instantclient.zip https://download.oracle.com/otn_software/linux/instantclient/2326000/instantclient-basic-linux.arm64-23.26.0.0.0.zip; \ else \ EXPECTED_SHA="d6c79cbcf0ff209363e779855c690d4fc730aed847e9198a2c439bcf34760af5" && \ curl -o /tmp/instantclient.zip https://download.oracle.com/otn_software/linux/instantclient/2326000/instantclient-basic-linux.x64-23.26.0.0.0.zip; \ fi && \ echo "$EXPECTED_SHA /tmp/instantclient.zip" | sha256sum -c - && \ unzip -oq /tmp/instantclient.zip -d /opt/oracle && \ rm /tmp/instantclient.zip && \ echo /opt/oracle/instantclient_23_26 > /etc/ld.so.conf.d/oracle-instantclient.conf && \ ldconfig # Build OpenSSL 3.5.6 for PQC (ML-DSA / SLH-DSA) certificate support. WORKDIR /tmp/openssl-pqc-build RUN wget -q https://github.com/openssl/openssl/releases/download/openssl-3.5.6/openssl-3.5.6.tar.gz \ && echo "deae7c80cba99c4b4f940ecadb3c3338b13cb77418409238e57d7f31f2a3b736 openssl-3.5.6.tar.gz" | sha256sum -c - \ && tar -xf openssl-3.5.6.tar.gz \ && cd openssl-3.5.6 \ && ./Configure --prefix=/opt/openssl-pqc --openssldir=/opt/openssl-pqc/ssl no-docs \ && make -j"$(nproc)" \ && make install_sw \ && cd / \ && rm -rf /tmp/openssl-pqc-build # ? App setup WORKDIR /app COPY package.json package.json COPY package-lock.json package-lock.json COPY dev-entrypoint.sh dev-entrypoint.sh RUN chmod +x dev-entrypoint.sh RUN npm install COPY . . ENV HOST=0.0.0.0 ENTRYPOINT ["/app/dev-entrypoint.sh"] CMD ["npm", "run", "dev:docker"]