FROM node:20-alpine AS builder RUN apk add --no-cache git WORKDIR /app COPY package*.json ./ RUN npm ci COPY tsconfig.json ./ COPY src/ ./src/ RUN npx tsc FROM node:20-alpine # bash + curl + jq + python3 are required by the changemaker scripts the agent # shells out to (upgrade-check.sh, upgrade.sh, backup.sh). Without them, every # /upgrade/* and /backup/* call returns "command not found" failures. RUN apk add --no-cache docker-cli docker-cli-compose git rsync bash curl jq python3 WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY --from=builder /app/dist/ ./dist/ EXPOSE 7443 CMD ["node", "dist/server.js"]