11ARG ALPINE_VERSION=3.22
2- ARG DENO_VERSION=2.4.5
32FROM alpine:${ALPINE_VERSION} AS pg-builder
43
54# Install build dependencies
@@ -48,54 +47,32 @@ RUN ./bootstrap -DREGRESS_CHECKS=OFF -DPG_CONFIG=/usr/local/pgsql/bin/pg_config
4847RUN cd build && make -j$(nproc)
4948RUN cd build && make install
5049
51- # Adapted from https://github.com/dojyorin/deno_docker_image/blob/master/src/alpine.dockerfile
52- FROM denoland/deno: alpine-${DENO_VERSION } AS deno
50+ # Build pgBadger
51+ FROM alpine:${ALPINE_VERSION } AS pgbadger-builder
5352
54- RUN apk add --no-cache \
55- perl \
56- curl \
57- make \
58- git \
59- postgresql-client
53+ RUN apk add --no-cache perl curl make
6054
61- # Download, build, and install pgBadger
6255ARG PGBADGER_VERSION=13.2
6356WORKDIR /tmp
64-
6557RUN curl -L https://github.com/darold/pgbadger/archive/v${PGBADGER_VERSION}.tar.gz | tar -xzf - && \
6658 cd pgbadger-${PGBADGER_VERSION} && \
6759 perl Makefile.PL && \
6860 make && \
6961 make install && \
7062 rm -rf /tmp/pgbadger*
7163
72- FROM gcr.io/distroless/cc-debian12:latest AS cc
73-
74- FROM alpine:${ALPINE_VERSION} AS sym
75-
76- COPY --from=cc --chmod=755 --chown=root:root /lib/*-linux-gnu/ld-linux-* /usr/local/lib/
77- RUN mkdir -p -m 755 /tmp/lib
78- RUN ln -s /usr/local/lib/ld-linux-* /tmp/lib/
79-
80- FROM denoland/deno:alpine-${DENO_VERSION} AS build
81-
82- COPY deno.json deno.lock* ./
83- RUN deno install --frozen-lockfile
64+ # Build the application
65+ FROM node:24-alpine AS build
8466
67+ WORKDIR /app
68+ COPY package.json package-lock.json ./
69+ RUN npm ci
8570COPY . .
71+ RUN npm run build
72+ RUN npm ci --omit=dev
8673
87- RUN deno compile \
88- --allow-run \
89- --allow-read \
90- --allow-write \
91- --allow-env \
92- --allow-net \
93- --allow-sys \
94- -o /app/analyzer \
95- src/main.ts
96-
97- FROM alpine:${ALPINE_VERSION}
98- ENV LD_LIBRARY_PATH="/usr/local/lib"
74+ # Final image
75+ FROM node:24-alpine
9976
10077RUN apk add -uU --no-cache \
10178 postgresql-client \
@@ -104,17 +81,19 @@ RUN apk add -uU --no-cache \
10481 bash \
10582 su-exec \
10683 openssl \
107- krb5
84+ krb5 \
85+ perl
10886
109- COPY --from=deno --chmod=755 --chown=root:root /usr/bin/pg_dump /usr/bin/pg_dump
110- COPY --from=build --chmod=755 --chown=root:root /app/analyzer /app/analyzer
111- COPY --from=cc --chmod=755 --chown=root:root /lib/*-linux-gnu/* /usr/local/lib/
112- COPY --from=sym --chmod=755 --chown=root:root /tmp/lib /lib
113- COPY --from=sym --chmod=755 --chown=root:root /tmp/lib /lib64
87+ # Copy pgBadger
88+ COPY --from=pgbadger-builder /usr/local/bin/pgbadger /usr/local/bin/pgbadger
11489
11590# Copy PostgreSQL installation from builder
11691COPY --from=pg-builder /usr/local/pgsql /usr/local/pgsql
11792
93+ # Copy application
94+ COPY --from=build /app/dist /app/dist
95+ COPY --from=build /app/node_modules /app/node_modules
96+
11897# Setup postgres user and directories
11998RUN mkdir -p /var/lib/postgresql/data \
12099 && chown -R postgres:postgres /var/lib/postgresql \
@@ -142,4 +121,4 @@ CMD ["/bin/bash", "-c", "\
142121 echo \" unix_socket_directories = '/tmp'\" >> $PGDATA/postgresql.conf && \
143122 su-exec postgres pg_ctl -D $PGDATA -l $PGDATA/logfile start || (cat $PGDATA/logfile && exit 1) && \
144123 until su-exec postgres pg_isready -h /tmp; do sleep 0.5; done && \
145- /app/analyzer " ]
124+ node /app/dist/main.mjs " ]
0 commit comments