From 329ab5a990df5e460afa31094e5e827c9743565b Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Mon, 27 Jul 2026 21:17:55 +0200 Subject: feat: production Docker image with health check and data persistence - Non-root user (node), data volume at /app/data - Startup migration script applies drizzle SQL before server starts - HEALTHCHECK on port 3000 every 30s --- Dockerfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'Dockerfile') diff --git a/Dockerfile b/Dockerfile index 8f2c00b..d7811ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,14 @@ WORKDIR /app COPY --from=builder /app/build build/ COPY --from=builder /app/node_modules node_modules/ COPY --from=builder /app/package.json ./ +COPY --from=builder /app/drizzle drizzle/ +COPY --from=builder /app/scripts/migrate.js scripts/migrate.js +RUN mkdir -p /app/data && chown -R node:node /app +VOLUME /app/data EXPOSE 3000 ENV NODE_ENV=production -ENV DATABASE_URL=file:./data.db -CMD ["node", "build"] +ENV DATABASE_URL=file:./data/data.db +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD node -e "require('http').get('http://localhost:3000/', r => {process.exit(r.statusCode === 200 ? 0 : 1)})" +USER node +CMD ["sh", "-c", "node scripts/migrate.js && node build"] -- cgit v1.3