mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-07 18:01:42 +00:00
By default buildkit executes all steps using applications built for the target platform, if necessary by emulation. The audiobookshelf web client is not architecture-dependent and it's build takes a long time. Update Dockerfile to execute the build-client natively on the build platform, instead of the target platform. This drastically reduces docker build time for arm platforms on x86.
73 lines
1.7 KiB
Docker
73 lines
1.7 KiB
Docker
ARG NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
|
|
ARG NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
|
|
|
|
### STAGE 0: Build client ###
|
|
FROM --platform=$BUILDPLATFORM node:20-alpine AS build-client
|
|
|
|
WORKDIR /client
|
|
COPY /client /client
|
|
RUN npm ci && npm cache clean --force
|
|
RUN npm run generate
|
|
|
|
### STAGE 1: Build server ###
|
|
FROM node:20-alpine AS build-server
|
|
|
|
ARG NUSQLITE3_DIR
|
|
ARG TARGETPLATFORM
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
RUN apk add --no-cache --update \
|
|
curl \
|
|
make \
|
|
python3 \
|
|
g++ \
|
|
unzip
|
|
|
|
WORKDIR /server
|
|
COPY index.js package* /server
|
|
COPY /server /server/server
|
|
|
|
RUN case "$TARGETPLATFORM" in \
|
|
"linux/amd64") \
|
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-x64.zip" ;; \
|
|
"linux/arm64") \
|
|
curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-arm64.zip" ;; \
|
|
*) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
|
|
esac && \
|
|
unzip /tmp/library.zip -d $NUSQLITE3_DIR && \
|
|
rm /tmp/library.zip
|
|
|
|
RUN npm ci --only=production
|
|
|
|
### STAGE 2: Create minimal runtime image ###
|
|
FROM node:20-alpine
|
|
|
|
ARG NUSQLITE3_DIR
|
|
ARG NUSQLITE3_PATH
|
|
|
|
# Install only runtime dependencies
|
|
RUN apk add --no-cache --update \
|
|
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
|
|
COPY --from=build-server ${NUSQLITE3_PATH} ${NUSQLITE3_PATH}
|
|
|
|
EXPOSE 80
|
|
|
|
ENV PORT=80
|
|
ENV NODE_ENV=production
|
|
ENV CONFIG_PATH="/config"
|
|
ENV METADATA_PATH="/metadata"
|
|
ENV SOURCE="docker"
|
|
ENV NUSQLITE3_DIR=${NUSQLITE3_DIR}
|
|
ENV NUSQLITE3_PATH=${NUSQLITE3_PATH}
|
|
|
|
ENTRYPOINT ["tini", "--"]
|
|
CMD ["node", "index.js"]
|