Printer assignment end to end, and a container that keeps a site's files
Assign printers to a MACHINE and let whichever PC controls it install them, with the observed half kept strictly apart from the assigned half: a collector report can never write an assignment row. Adoption is explicit. Adds a singular relationship type so defaultprinter can mean exactly one, client scripts that converge a bay's queues and correct a drifted one in place, and a wave gate so a fleet-wide driver rollout cannot stampede its own share. On the container side: the compose stack never persisted the instance directory, so a rebuild discarded plugins.json and every upload. It is a volume now, the image ships instance/ owned by the app user so the mountpoint is writable, and the database moves to MySQL 8.4 LTS, which the Windows runbook has recommended since 8.0 went end of life. The image also could not build at all: the frontend stage never copied the plugin staging script it runs. Adds a topology migration guide covering IIS to Docker and back.
This commit is contained in:
29
Dockerfile
29
Dockerfile
@@ -24,12 +24,22 @@ FROM node:20-slim AS frontendbuild
|
||||
WORKDIR /build
|
||||
|
||||
# Copy only the manifests first so `npm ci` caches on dependency changes.
|
||||
COPY frontend/package*.json ./
|
||||
RUN npm ci
|
||||
COPY frontend/package*.json ./frontend/
|
||||
RUN cd frontend && npm ci
|
||||
|
||||
COPY frontend/ ./
|
||||
RUN npm run build
|
||||
# Output lands in /build/dist (Vite default), copied into the final stage below.
|
||||
# The frontend keeps its repo-relative layout here, because npm prebuild runs
|
||||
# `node ../scripts/stage-frontend.mjs`, which stages each plugin's frontend/ into
|
||||
# the Vite tree and codegens routes.gen.js. That script resolves its repo root as
|
||||
# its own directory's parent, so it needs scripts/ and plugins/ as SIBLINGS of
|
||||
# frontend/. Building with frontend/ flattened to the stage root made `../scripts`
|
||||
# resolve to /scripts and the build failed on a missing module.
|
||||
COPY scripts/stage-frontend.mjs ./scripts/
|
||||
COPY plugins/ ./plugins/
|
||||
|
||||
COPY frontend/ ./frontend/
|
||||
RUN cd frontend && npm run build
|
||||
# Output lands in /build/frontend/dist (Vite default), copied into the final
|
||||
# stage below.
|
||||
|
||||
# ---- Stage 2: Python application image ----
|
||||
FROM python:3.14-slim AS base
|
||||
@@ -60,7 +70,14 @@ COPY scripts/ ./scripts/
|
||||
COPY wsgi.py ./
|
||||
|
||||
# Built SPA from stage 1. Flask serves it via register_frontend_routes.
|
||||
COPY --from=frontendbuild /build/dist ./frontend/dist
|
||||
COPY --from=frontendbuild /build/frontend/dist ./frontend/dist
|
||||
|
||||
# Create instance/ IN THE IMAGE, owned by the app user, before the chown below.
|
||||
# Docker seeds an empty named volume from the image's content at the mountpoint,
|
||||
# ownership included. Without this the mountpoint is created root-owned 0755 and
|
||||
# the container, which runs as shopdb, cannot write plugins.json or any upload
|
||||
# into its own instance directory.
|
||||
RUN mkdir -p /app/instance
|
||||
|
||||
RUN useradd --create-home --shell /bin/bash shopdb \
|
||||
&& chown -R shopdb:shopdb /app
|
||||
|
||||
Reference in New Issue
Block a user