FROM node:20-bookworm-slim AS backend-build WORKDIR /build/backend COPY backend/package*.json ./ RUN npm ci --legacy-peer-deps COPY backend/ ./ RUN npm run build RUN npm prune --omit=dev --legacy-peer-deps FROM postgres:16-bookworm AS runtime SHELL ["/bin/bash", "-o", "pipefail", "-c"] ENV NODE_ENV=production ENV DOTNET_ROOT=/opt/dotnet ENV DOTNET_CLI_HOME=/tmp/dotnet ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 ENV NUGET_PACKAGES=/opt/mike/.nuget/packages ENV PATH="/opt/mike/python-venv/bin:/opt/dotnet:/usr/lib/postgresql/16/bin:/usr/local/bin:${PATH}" COPY --from=node:20-bookworm-slim /usr/local/bin/node /usr/local/bin/node COPY --from=node:20-bookworm-slim /usr/local/bin/npm /usr/local/bin/npm COPY --from=node:20-bookworm-slim /usr/local/bin/npx /usr/local/bin/npx COPY --from=node:20-bookworm-slim /usr/local/lib/node_modules /usr/local/lib/node_modules RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ curl \ gzip \ libicu72 \ libssl3 \ libstdc++6 \ libreoffice \ python3 \ python3-pip \ python3-venv \ tar \ zlib1g && \ rm -rf /var/lib/apt/lists/* RUN curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh && \ bash /tmp/dotnet-install.sh --channel 8.0 --install-dir /opt/dotnet && \ rm /tmp/dotnet-install.sh RUN useradd --create-home --uid 1000 --shell /bin/bash user && \ mkdir -p /opt/mike/backend /opt/mike/.nuget/packages /data /tmp/dotnet && \ chmod 777 /data /tmp/dotnet && \ chown -R user:user /opt/mike WORKDIR /opt/mike COPY --chown=user:user backend/ /opt/mike/backend/ COPY --from=backend-build --chown=user:user /build/backend/dist /opt/mike/backend/dist COPY --from=backend-build --chown=user:user /build/backend/node_modules /opt/mike/backend/node_modules RUN rm -f /usr/local/bin/npm /usr/local/bin/npx && \ ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \ ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx USER user RUN python3 -m venv /opt/mike/python-venv && \ /opt/mike/python-venv/bin/pip install --upgrade pip && \ /opt/mike/python-venv/bin/pip install --no-cache-dir -r /opt/mike/backend/python-service/requirements.txt RUN dotnet restore /opt/mike/backend/tools/docx-commenter/docx-commenter.csproj && \ dotnet build /opt/mike/backend/tools/docx-commenter/docx-commenter.csproj --no-restore && \ dotnet restore /opt/mike/backend/tools/docx-bookmark-injector/docx-bookmark-injector.csproj && \ dotnet build /opt/mike/backend/tools/docx-bookmark-injector/docx-bookmark-injector.csproj --no-restore USER root COPY --chown=user:user deploy/huggingface/backend/start.sh /opt/mike/deploy/huggingface/backend/start.sh RUN chmod +x /opt/mike/deploy/huggingface/backend/start.sh USER user ENV PGDATA=/tmp/mike-postgres EXPOSE 7860 CMD ["/opt/mike/deploy/huggingface/backend/start.sh"]