KLEINUILTIES-WEBAPP/Dockerfile

35 lines
1 KiB
Docker
Raw Normal View History

FROM node:20-alpine
# Install curl explicitly for the healthcheck (wget in alpine has had IPv6/connection-resolved quirks)
RUN apk add --no-cache curl
# Create app directory and data directory for the persistent volume
WORKDIR /app
RUN mkdir -p /data
# Install dependencies (cached layer)
COPY package.json ./
RUN npm install --omit=dev --no-audit --no-fund && npm cache clean --force
# Copy the rest of the app
COPY . .
# Defaults — override these in Coolify's Environment section
ENV PORT=3000 \
DATA_FILE=/data/data.json \
NODE_ENV=production
EXPOSE 3000
# Healthcheck for Coolify / orchestrators
# Use 127.0.0.1 (IPv4 explicit) to avoid IPv6 connection-refused races.
# Generous start-period because Node + Alpine cold-start can take ~30-60s on first deploy.
HEALTHCHECK --interval=20s --timeout=5s --start-period=60s --retries=8 \
CMD curl -fsS http://127.0.0.1:3000/api/health || exit 1
# Run as non-root for safety
RUN addgroup -S app && adduser -S app -G app && chown -R app:app /app /data
USER app
CMD ["node", "server.js"]