From dd99f6c918357f16c5040d10f6cc63a291e43b50 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 29 Apr 2025 22:41:26 +0300 Subject: [PATCH] chore(docker): integrate debian-based container --- _regroup_monorepo/apps/server/Dockerfile | 3 +-- apps/server/Dockerfile | 22 +++++++++++---------- apps/server/Dockerfile.alpine | 25 ++++++++++++++++++++++++ apps/server/package.json | 11 ++++++++++- 4 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 apps/server/Dockerfile.alpine diff --git a/_regroup_monorepo/apps/server/Dockerfile b/_regroup_monorepo/apps/server/Dockerfile index 635a44d3b..ba1f15283 100644 --- a/_regroup_monorepo/apps/server/Dockerfile +++ b/_regroup_monorepo/apps/server/Dockerfile @@ -1,7 +1,6 @@ # Build stage -FROM node:22.14.0-bullseye-slim AS builder -WORKDIR /usr/src/app/build + # Copy only necessary files for build COPY . . diff --git a/apps/server/Dockerfile b/apps/server/Dockerfile index 1f27b9400..cbf844a0c 100644 --- a/apps/server/Dockerfile +++ b/apps/server/Dockerfile @@ -1,14 +1,19 @@ -FROM node:22.14.0-alpine AS builder +FROM node:22.14.0-bullseye-slim AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. - WORKDIR /usr/src/app + WORKDIR /usr/src/app/build COPY ./dist/package.json ./dist/pnpm-lock.yaml /usr/src/app/ RUN pnpm install --frozen-lockfile --prod && pnpm rebuild -FROM node:22.14.0-alpine - # Install runtime dependencies - RUN apk add --no-cache su-exec shadow +FROM node:22.14.0-bullseye-slim + # Install only runtime dependencies + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + gosu && \ + rm -rf \ + /var/lib/apt/lists/* \ + /var/cache/apt/* WORKDIR /usr/src/app COPY ./dist /usr/src/app @@ -16,10 +21,7 @@ FROM node:22.14.0-alpine COPY --from=builder /usr/src/app/node_modules/better-sqlite3 /usr/src/app/node_modules/better-sqlite3 COPY ./start-docker.sh /usr/src/app - # Add application user - RUN adduser -s /bin/false node; exit 0 - # Configure container EXPOSE 8080 - CMD [ "sh", "./start-docker.sh" ] - HEALTHCHECK --start-period=10s CMD exec su-exec node node docker_healthcheck.js \ No newline at end of file + CMD [ "./start-docker.sh" ] + HEALTHCHECK --start-period=10s CMD exec gosu node node docker_healthcheck.js \ No newline at end of file diff --git a/apps/server/Dockerfile.alpine b/apps/server/Dockerfile.alpine new file mode 100644 index 000000000..1f27b9400 --- /dev/null +++ b/apps/server/Dockerfile.alpine @@ -0,0 +1,25 @@ +FROM node:22.14.0-alpine AS builder + RUN corepack enable + + # Install native dependencies since we might be building cross-platform. + WORKDIR /usr/src/app + COPY ./dist/package.json ./dist/pnpm-lock.yaml /usr/src/app/ + RUN pnpm install --frozen-lockfile --prod && pnpm rebuild + +FROM node:22.14.0-alpine + # Install runtime dependencies + RUN apk add --no-cache su-exec shadow + + WORKDIR /usr/src/app + COPY ./dist /usr/src/app + RUN rm -rf /usr/src/app/node_modules/better-sqlite3 + COPY --from=builder /usr/src/app/node_modules/better-sqlite3 /usr/src/app/node_modules/better-sqlite3 + COPY ./start-docker.sh /usr/src/app + + # Add application user + RUN adduser -s /bin/false node; exit 0 + + # Configure container + EXPOSE 8080 + CMD [ "sh", "./start-docker.sh" ] + HEALTHCHECK --start-period=10s CMD exec su-exec node node docker_healthcheck.js \ No newline at end of file diff --git a/apps/server/package.json b/apps/server/package.json index daf23faf3..3594e94d2 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -159,9 +159,18 @@ "dependsOn": [ "build" ], - "command": "docker build . -t triliumnext", "options": { "cwd": "{projectRoot}" + }, + "executor": "nx:run-commands", + "defaultConfiguration": "alpine", + "configurations": { + "debian": { + "command": "docker build . -t triliumnext -f Dockerfile" + }, + "alpine": { + "command": "docker build . -t triliumnext -f Dockerfile.alpine" + } } }, "docker-start": {