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..86b14b5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM node:lts-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci +COPY . . +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 + +EXPOSE 3000 + +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 new file mode 100644 index 0000000..24243a7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +services: + web: + build: + context: . + dockerfile: Dockerfile + ports: + - "80:3000" + environment: + DATABASE_URL: postgresql://postgres:letmein@db:5432/postgres?schema=public + depends_on: + db: + condition: service_healthy + + db: + image: postgres:alpine + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: letmein + POSTGRES_DB: postgres + ports: + - "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 b24dcbc..f56e61e 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", @@ -51,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": { @@ -81,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();