30 lines
1.6 KiB
Docker
30 lines
1.6 KiB
Docker
# Source and base images are immutable; build only in disposable, secret-free isolation.
|
|
FROM docker.io/library/node:22-alpine@sha256:16e22a550f3863206a3f701448c45f7912c6896a62de43add43bb9c86130c3e2 AS build
|
|
RUN apk add --no-cache git python3
|
|
WORKDIR /src
|
|
RUN git init . && git remote add origin https://github.com/forgesworn/kithmoot.git && \
|
|
git fetch --depth 1 origin 408c7b8e00caa3c968926fa7c3c9cd4ac58c76b9 && \
|
|
git checkout --detach FETCH_HEAD && \
|
|
test "$(git rev-parse HEAD)" = 408c7b8e00caa3c968926fa7c3c9cd4ac58c76b9
|
|
RUN npm ci --no-audit --no-fund
|
|
COPY integrate.py /tmp/integrate.py
|
|
COPY archipelago-video.mjs video-entry.mjs /src/app/public/
|
|
RUN python3 /tmp/integrate.py && npm run build
|
|
|
|
FROM docker.io/library/nginx:1.31.4-alpine@sha256:1f25fedd50aec27413031afb3a4f8ee4effcc9d843f6a76e81bfa92245ac5c06
|
|
LABEL org.opencontainers.image.title="KithMoot for Archipelago" \
|
|
org.opencontainers.image.source="https://github.com/forgesworn/kithmoot" \
|
|
org.opencontainers.image.revision="408c7b8e00caa3c968926fa7c3c9cd4ac58c76b9" \
|
|
org.opencontainers.image.licenses="MIT"
|
|
COPY --from=build /src/app/dist/ /usr/share/nginx/html/j/
|
|
COPY --from=build /src/LICENSE /usr/share/licenses/kithmoot/LICENSE
|
|
COPY nginx.conf /etc/nginx/nginx.conf
|
|
# The provider is deliberately outside the PWA scope and its precache.
|
|
# The host hook copies the canonical provider into the persistent bridge mount.
|
|
RUN mkdir -p /bridge && chmod 755 /bridge
|
|
USER 101:101
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["nginx"]
|
|
CMD ["-g", "daemon off;"]
|
|
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1
|