From e163155668eca751c941dd2281a1f13d96463a4b Mon Sep 17 00:00:00 2001 From: Ulises Gascon Date: Thu, 1 May 2025 14:20:54 +0200 Subject: [PATCH 1/2] feat: migrate to a server mode in Docker --- Dockerfile | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4a710ce..30a6f6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,16 +2,28 @@ FROM node:22-alpine WORKDIR /usr/src/app -COPY package.json package-lock.json ./ +# Create directory with proper permissions before copying files +RUN mkdir -p /usr/src/app && chown -R node:node /usr/src/app -RUN npm install --only=production --no-cache +# Switch to non-root user +USER node -COPY . . +# Copy package files +COPY --chown=node:node package.json package-lock.json ./ -RUN chmod -R 755 /usr/src/app +# Install dependencies +RUN npm install --only=production --no-cache -USER node +# Copy application code +COPY --chown=node:node . . ENV NODE_ENV=production -ENTRYPOINT ["node", "./visionboard.js"] \ No newline at end of file +EXPOSE 3000 + +# Add health check using the API health endpoint +HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/v1/__health || exit 1 + +CMD ["npm", "run", "start"] + From 9616480621b4128cf417e63e0bcf0474bc8bd26f Mon Sep 17 00:00:00 2001 From: Ulises Gascon Date: Thu, 1 May 2025 14:24:17 +0200 Subject: [PATCH 2/2] feat: add health-checks for the infra services --- Dockerfile | 10 ++++++---- docker-compose.yml | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 30a6f6b..1296abf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,12 @@ FROM node:22-alpine +# Set working directory WORKDIR /usr/src/app -# Create directory with proper permissions before copying files -RUN mkdir -p /usr/src/app && chown -R node:node /usr/src/app +# install curl for reliable health checks and set proper ownership +USER root +RUN apk add --no-cache curl \ + && chown -R node:node /usr/src/app # Switch to non-root user USER node @@ -23,7 +26,6 @@ EXPOSE 3000 # Add health check using the API health endpoint HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ - CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/v1/__health || exit 1 + CMD curl --fail http://localhost:3000/api/v1/__health || exit 1 CMD ["npm", "run", "start"] - diff --git a/docker-compose.yml b/docker-compose.yml index 981ee97..b9476ab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,14 +10,27 @@ services: - 5432:5432 volumes: - visionBoard_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-U", "visionBoard", "-d", "dashboard", "-h", "127.0.0.1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 10s adminer: image: adminer restart: always depends_on: - - db + db: + condition: service_healthy ports: - 8080:8080 + healthcheck: + test: ["CMD", "pgrep", "-f", "php"] + interval: 10s + timeout: 5s + retries: 3 + start_period: 5s schema-dump: image: postgres:17.2