# YOUreka Tools — landing page + /fingerprint enrollment wizard. # Stateless: sessions live in the operator's cookie, and fpagent keeps running # on the field laptop (the wizard reaches it at http://127.0.0.1:9000 from the # browser, so the container location does not matter). # # The encrypted .env.production is baked in; the private key is supplied at # runtime and never stored in the image: # # docker build -t yreka-tools . # docker run -d -p 4173:4173 --name yreka-tools \ # --env DOTENV_PRIVATE_KEY_PRODUCTION="$(grep -oP '^DOTENV_PRIVATE_KEY_PRODUCTION=\K.*' .env.keys)" \ # yreka-tools FROM node:22-alpine WORKDIR /app RUN npm install -g @dotenvx/dotenvx@1.51.4 COPY tools/package.json tools/package-lock.json ./ RUN npm ci --omit=dev && npm cache clean --force COPY tools/server.js tools/yrka-auth.js tools/permit.js tools/cropper.js ./ COPY tools/public ./public COPY --chown=node:node .env.production ./ USER node EXPOSE 4173 HEALTHCHECK --interval=30s --timeout=5s --start-period=5s \ CMD wget -qO- http://127.0.0.1:4173/ >/dev/null || exit 1 # --strict: fail fast when the private key is missing or decryption fails, # instead of starting with unusable credentials. CMD ["dotenvx", "run", "-f", ".env.production", "--strict", "--", "node", "server.js"]