2025-05-16 15:23:19 -05:00
|
|
|
ARG NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
|
|
|
|
ARG NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
|
|
|
|
|
2021-10-23 13:18:58 +02:00
|
|
|
### STAGE 0: Build client ###
|
2025-03-23 02:59:40 +03:00
|
|
|
FROM node:20-alpine AS build-client
|
2025-05-16 15:23:19 -05:00
|
|
|
|
2021-08-17 17:01:11 -05:00
|
|
|
WORKDIR /client
|
|
|
|
COPY /client /client
|
2022-05-25 10:26:21 -05:00
|
|
|
RUN npm ci && npm cache clean --force
|
2021-08-17 17:01:11 -05:00
|
|
|
RUN npm run generate
|
|
|
|
|
2021-10-23 13:18:58 +02:00
|
|
|
### STAGE 1: Build server ###
|
2025-03-23 02:59:40 +03:00
|
|
|
FROM node:20-alpine AS build-server
|
2022-09-11 15:35:06 -05:00
|
|
|
|
2025-05-16 15:23:19 -05:00
|
|
|
ARG NUSQLITE3_DIR
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
|
2021-08-17 17:01:11 -05:00
|
|
|
ENV NODE_ENV=production
|
2023-07-17 07:48:23 -05:00
|
|
|
|
2025-05-12 15:15:18 -05:00
|
|
|
RUN apk add --no-cache --update \
|
2024-09-29 09:22:39 +03:00
|
|
|
curl \
|
|
|
|
make \
|
|
|
|
python3 \
|
|
|
|
g++ \
|
|
|
|
unzip
|
2022-06-02 05:55:01 +00:00
|
|
|
|
2025-03-23 02:59:40 +03:00
|
|
|
WORKDIR /server
|
|
|
|
COPY index.js package* /server
|
|
|
|
COPY /server /server/server
|
2022-06-02 05:55:01 +00:00
|
|
|
|
2024-09-29 09:22:39 +03:00
|
|
|
RUN case "$TARGETPLATFORM" in \
|
|
|
|
"linux/amd64") \
|
2024-10-07 20:48:52 +03:00
|
|
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-x64.zip" ;; \
|
2024-09-29 09:22:39 +03:00
|
|
|
"linux/arm64") \
|
2024-10-07 20:48:52 +03:00
|
|
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-arm64.zip" ;; \
|
2024-09-29 09:22:39 +03:00
|
|
|
*) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
|
|
|
|
esac && \
|
|
|
|
unzip /tmp/library.zip -d $NUSQLITE3_DIR && \
|
|
|
|
rm /tmp/library.zip
|
|
|
|
|
2022-05-20 18:15:54 -05:00
|
|
|
RUN npm ci --only=production
|
2022-06-02 05:55:01 +00:00
|
|
|
|
2025-03-23 02:59:40 +03:00
|
|
|
### STAGE 2: Create minimal runtime image ###
|
|
|
|
FROM node:20-alpine
|
|
|
|
|
2025-05-16 15:23:19 -05:00
|
|
|
ARG NUSQLITE3_DIR
|
|
|
|
ARG NUSQLITE3_PATH
|
|
|
|
|
2025-03-23 02:59:40 +03:00
|
|
|
# Install only runtime dependencies
|
2025-05-12 15:15:18 -05:00
|
|
|
RUN apk add --no-cache --update \
|
2025-03-23 02:59:40 +03:00
|
|
|
tzdata \
|
|
|
|
ffmpeg \
|
|
|
|
tini
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
# Copy compiled frontend and server from build stages
|
|
|
|
COPY --from=build-client /client/dist /app/client/dist
|
|
|
|
COPY --from=build-server /server /app
|
2025-06-16 23:03:02 +02:00
|
|
|
COPY --from=build-server ${NUSQLITE3_PATH} ${NUSQLITE3_PATH}
|
2023-07-09 11:39:15 -05:00
|
|
|
|
2021-08-17 17:01:11 -05:00
|
|
|
EXPOSE 80
|
2023-07-20 16:59:46 -05:00
|
|
|
|
2025-01-07 17:41:09 +02:00
|
|
|
ENV PORT=80
|
2025-05-16 15:23:19 -05:00
|
|
|
ENV NODE_ENV=production
|
2025-01-07 17:41:09 +02:00
|
|
|
ENV CONFIG_PATH="/config"
|
|
|
|
ENV METADATA_PATH="/metadata"
|
|
|
|
ENV SOURCE="docker"
|
2025-05-16 15:23:19 -05:00
|
|
|
ENV NUSQLITE3_DIR=${NUSQLITE3_DIR}
|
|
|
|
ENV NUSQLITE3_PATH=${NUSQLITE3_PATH}
|
2025-01-07 17:41:09 +02:00
|
|
|
|
2024-01-03 13:55:43 -07:00
|
|
|
ENTRYPOINT ["tini", "--"]
|
2023-03-09 11:47:48 -06:00
|
|
|
CMD ["node", "index.js"]
|