Files
tally-counter/Dockerfile
Sebastian Slettebakken d4d886c91f
All checks were successful
Build and publish Docker image / build-and-push (release) Successful in 1m4s
feat: enhance Dockerfile and entrypoint for user permissions and environment variable handling
2025-11-16 01:16:53 +01:00

42 lines
1.5 KiB
Docker

# Build frontend in a dedicated stage
FROM node:24-alpine AS frontend-build
WORKDIR /app/frontend
COPY frontend/package*.json frontend/package-lock*.json ./
RUN npm ci --silent
COPY frontend/ .
RUN npm run build
# Final runtime image
FROM node:24-alpine
WORKDIR /app
# ensure su-exec present to drop privileges later
RUN apk add --no-cache ca-certificates su-exec
# copy package manifests and install deps (leverage Docker cache)
COPY backend/package*.json backend/package-lock*.json ./backend/
RUN cd backend && npm ci --silent
# copy backend source (schema, migrations, source)
COPY backend ./backend
# generate Prisma client against a harmless temp DB path (does not apply migrations)
RUN cd backend && DATABASE_URL="file:./data/sqlite.db" npx prisma generate --schema=./prisma/schema.prisma || true
# remove devDependencies to slim image
RUN cd backend && npm prune --production --silent
# install prisma CLI into final image so entrypoint can run migrate deploy at runtime
RUN cd backend && npm i --no-audit --no-fund prisma --silent || true
# copy entrypoint and make executable
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# Copy built frontend into the expected location: /app/frontend/dist
COPY --from=frontend-build /app/frontend/dist ./frontend/dist
# runtime environment (DATA_DIR used at runtime; DATABASE_URL points to it)
ENV NODE_ENV=production
ENV DATA_DIR=/data
ENV DATABASE_URL="file:${DATA_DIR}/sqlite.db"
WORKDIR /app/backend
EXPOSE 3000
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["node", "server.js"]