From 6b05bbf4dc0162bc338060718fadcb2afbb59455 Mon Sep 17 00:00:00 2001 From: Diego Torres Date: Wed, 16 Jul 2025 21:15:58 -0500 Subject: [PATCH 1/4] feat: add Docker support with Dockerfile and docker-compose.yml --- .dockerignore | 3 +++ Dockerfile | 10 ++++++++++ docker-compose.yml | 25 +++++++++++++++++++++++++ package.json | 5 +++-- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3391496 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +Dockerfile +node_modules +generated \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f194b8e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:latest +WORKDIR /app +COPY package*.json ./ +RUN npm ci +COPY . . +RUN [ "npm", "run", "prisma:generate" ] + +RUN [ "npm", "run", "build" ] +EXPOSE 3000 +CMD [ "npm", "run", "docker-start" ] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..25336ef --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,25 @@ +services: + web: + build: + context: . + dockerfile: Dockerfile + ports: + - "3000:3000" + environment: + DATABASE_URL: postgresql://postgres:letmein@localhost:5432/postgres?schema=public + depends_on: + - db + + db: + image: postgres:latest + environment: + # POSTGRES_USER: postgres + POSTGRES_PASSWORD: letmein + POSTGRES_DB: postgres + ports: + - "5432:5432" + volumes: + - fs_data:/var/lib/postgresql/data + +volumes: + fs_data: \ No newline at end of file diff --git a/package.json b/package.json index b24dcbc..1f8c060 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "react-router dev", + "dev": "react-router dev --host", "build": "react-router build", "lint": "eslint .", "preview": "vite preview", @@ -20,7 +20,8 @@ "prisma:seed": "prisma db seed", "test:prisma:migrate:deploy": "dotenv -e .env.test -- prisma migrate deploy", "test:e2e": "playwright test", - "test:prisma:seed": "dotenv -e .env.test prisma db seed" + "test:prisma:seed": "dotenv -e .env.test prisma db seed", + "docker-start": "npm run prisma:migrate:deploy && npm run prisma:seed && npm run start" }, "prisma": { "seed": "tsx ./prisma/seed.ts" From 71d3dbe93b47aae6a61fa2ffe1c0e390c86fff6c Mon Sep 17 00:00:00 2001 From: Diego Torres Date: Thu, 17 Jul 2025 19:17:37 -0500 Subject: [PATCH 2/4] fix: update DATABASE_URL in docker-compose.yml to use service name for database connection --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 25336ef..9d7377d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,14 +6,14 @@ services: ports: - "3000:3000" environment: - DATABASE_URL: postgresql://postgres:letmein@localhost:5432/postgres?schema=public + DATABASE_URL: postgresql://postgres:letmein@db:5432/postgres?schema=public depends_on: - db db: image: postgres:latest environment: - # POSTGRES_USER: postgres + POSTGRES_USER: postgres POSTGRES_PASSWORD: letmein POSTGRES_DB: postgres ports: From 95037cc9556928d430f34a8ef004e98d5f83f077 Mon Sep 17 00:00:00 2001 From: Diego Torres Date: Thu, 17 Jul 2025 20:34:26 -0500 Subject: [PATCH 3/4] refactor: update Dockerfile and docker-compose.yml for improved build process and health checks; fix import path in seed.ts --- Dockerfile | 22 ++++++++++++++++++---- docker-compose.yml | 10 ++++++++-- package.json | 5 ++--- prisma/seed.ts | 3 +-- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index f194b8e..86b14b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,24 @@ -FROM node:latest +FROM node:lts-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . -RUN [ "npm", "run", "prisma:generate" ] +RUN npm run prisma:generate +RUN npm run build + +FROM node:lts-alpine AS production +WORKDIR /app +RUN chown -R node:node /app + +COPY --chown=node:node package*.json ./ +RUN npm ci --omit=dev + +COPY --from=builder --chown=node:node /app/build ./build +COPY --from=builder --chown=node:node /app/generated ./generated +COPY --from=builder --chown=node:node /app/prisma ./prisma + +USER node -RUN [ "npm", "run", "build" ] EXPOSE 3000 -CMD [ "npm", "run", "docker-start" ] + +CMD [ "sh", "-c", "npm run prisma:migrate:deploy && npm run start" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 9d7377d..8f236fe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,10 +8,11 @@ services: environment: DATABASE_URL: postgresql://postgres:letmein@db:5432/postgres?schema=public depends_on: - - db + db: + condition: service_healthy db: - image: postgres:latest + image: postgres:alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: letmein @@ -20,6 +21,11 @@ services: - "5432:5432" volumes: - fs_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 volumes: fs_data: \ No newline at end of file diff --git a/package.json b/package.json index 1f8c060..f56e61e 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,7 @@ "prisma:seed": "prisma db seed", "test:prisma:migrate:deploy": "dotenv -e .env.test -- prisma migrate deploy", "test:e2e": "playwright test", - "test:prisma:seed": "dotenv -e .env.test prisma db seed", - "docker-start": "npm run prisma:migrate:deploy && npm run prisma:seed && npm run start" + "test:prisma:seed": "dotenv -e .env.test prisma db seed" }, "prisma": { "seed": "tsx ./prisma/seed.ts" @@ -52,6 +51,7 @@ "react-router": "^7.5.1", "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", + "tsx": "^4.19.4", "zod": "^3.24.2" }, "devDependencies": { @@ -82,7 +82,6 @@ "prisma": "^6.10.1", "react-router-devtools": "^1.1.10", "tailwindcss": "^3.4.17", - "tsx": "^4.19.4", "typescript": "~5.6.2", "typescript-eslint": "^8.15.0", "vite": "^6.0.1", diff --git a/prisma/seed.ts b/prisma/seed.ts index 4f35637..106da46 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,6 +1,5 @@ import { categories, products } from "./initial_data"; - -import { PrismaClient } from "@/../generated/prisma/client"; +import { PrismaClient } from "../generated/prisma/client"; const prisma = new PrismaClient(); From cd378eca154a27f60ee6454764f7c464d3d6eae1 Mon Sep 17 00:00:00 2001 From: Diego Torres Date: Thu, 17 Jul 2025 21:02:11 -0500 Subject: [PATCH 4/4] fix: update web service port mapping in docker-compose.yml to expose port 80 --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8f236fe..24243a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: context: . dockerfile: Dockerfile ports: - - "3000:3000" + - "80:3000" environment: DATABASE_URL: postgresql://postgres:letmein@db:5432/postgres?schema=public depends_on: