| # Vite 8 requires Node ^20.19.0 or >=22.12.0. | |
| FROM node:22-alpine | |
| # Use the existing node user (usually UID 1000) | |
| # Set up environment variables for the node user | |
| ENV HOME=/home/node \ | |
| PATH=/home/node/.local/bin:$PATH | |
| # Create and set up app directory owned by node user | |
| # Go to user's home directory first to ensure it exists | |
| WORKDIR $HOME | |
| RUN mkdir -p $HOME/app && \ | |
| chown -R node:node $HOME/app && \ | |
| chmod -R 755 $HOME/app # Set initial permissions | |
| WORKDIR $HOME/app | |
| # Switch to the node user | |
| USER node | |
| # Copy package files (owned by node) | |
| COPY --chown=node:node package*.json ./ | |
| # Install dependencies straight from the committed lockfile. `npm ci` honours | |
| # the `resolved` URLs in package-lock.json and ignores the builder's configured | |
| # registry, so the install can't be derailed by a slow/incomplete npm mirror. | |
| RUN npm ci | |
| # Copy the entire viewer directory (owned by node) | |
| COPY --chown=node:node . . | |
| # Build the application | |
| RUN npm run build | |
| # Expose port | |
| EXPOSE 7860 | |
| # Start the application | |
| CMD ["npm", "run", "preview", "--", "--port", "7860", "--host"] | |