The Portainer host keeps failing on `npm ci` inside the build stage (both Alpine+libc6-compat and Debian slim exited 1 without ever surfacing the real error to us). For a dev showcase this isn't worth chasing — the dev machine is the source of truth for the built output anyway. - Dockerfile: drop the Node build stage. Image is just nginx:1.27.3-alpine with /dist copied in. No npm inside the container. - docker-compose.yml: drop the production hardening (read_only, tmpfs, security_opt, resource caps) and the container_name. Dev-only, don't inhibit things. - .gitignore / .dockerignore: stop ignoring dist/ — it's committed now. - README: document the `npm run build && commit && push` release flow and note what to reinstate when this graduates to real production. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
22 lines
789 B
Docker
22 lines
789 B
Docker
# Dev-showcase image for the Portainer stack. No container-side build —
|
|
# the `dist/` directory is built locally (`npm run build`) and committed,
|
|
# then copied straight into nginx. This sidesteps the Node/native-binding
|
|
# fights that kept breaking `npm ci` on the Portainer host.
|
|
#
|
|
# Not how the site should ship to real production, but fine for a showcase
|
|
# stack where the dev machine is the source of truth for the built output.
|
|
|
|
FROM nginx:1.27.3-alpine
|
|
|
|
# Our site config owns the default server block.
|
|
RUN rm /etc/nginx/conf.d/default.conf
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
|
|
# Prebuilt Vite output.
|
|
COPY dist /usr/share/nginx/html
|
|
|
|
EXPOSE 80
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -q -O- http://127.0.0.1/health || exit 1
|