mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-18 16:01:18 +00:00
28 lines
1.2 KiB
Docker
28 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# Stage 1: build the static admin panel once on the build platform. The output
|
|
# is plain JS/CSS/HTML (arch-independent), so both target arches reuse it and
|
|
# the heavy pnpm build runs only once.
|
|
FROM --platform=$BUILDPLATFORM node:22-alpine AS build
|
|
WORKDIR /app
|
|
RUN corepack enable && corepack prepare pnpm@11.9.0 --activate
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
RUN pnpm install --frozen-lockfile
|
|
COPY . .
|
|
# No VITE_* is baked here on purpose: URLs come from the runtime config below,
|
|
# so this one image works for any deployment.
|
|
RUN pnpm build
|
|
|
|
# Stage 2: serve the built SPA from nginx with a history fallback. The
|
|
# entrypoint renders /config.js from container env at startup.
|
|
FROM nginx:1.27-alpine
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
RUN nginx -t
|
|
COPY --from=build /app/dist /usr/share/nginx/html
|
|
# public/ files keep their checkout mode through the build; on a filesystem
|
|
# without POSIX permissions (exFAT/NTFS mounts) that is 0700 and nginx 403s.
|
|
RUN chmod -R a+rX /usr/share/nginx/html
|
|
COPY docker-entrypoint.sh /docker-entrypoint.d/40-warmbly-config.sh
|
|
RUN chmod +x /docker-entrypoint.d/40-warmbly-config.sh
|
|
EXPOSE 80
|