From 0a2494cd7e94465e1365d1bd03f1f621e422c1a0 Mon Sep 17 00:00:00 2001 From: Sanjib Kumar Sen Date: Sun, 16 Feb 2025 12:27:04 +0600 Subject: [PATCH] added prod --- Dockerfile | 32 ++++++++++++++++++++++++++++ docker-compose.yml | 45 +++++++++++++++++++++++++++++++++++++++ package.json | 5 +++-- src/app.ts | 3 ++- src/config/minioClient.ts | 12 +++++------ 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4e5bc80 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# Build stage +FROM oven/bun:1 AS builder + +WORKDIR /app + +# Copy package files +COPY package.json . +COPY bun.lockb . + +# Install dependencies +RUN bun install --frozen-lockfile + +# Copy source code +COPY . . + +# RUN DB Migrations and build +RUN bun run db:migrate && bun run build + +# Production stage +FROM debian:bookworm-slim + +WORKDIR /app + +# Copy only the compiled binary from builder +COPY --from=builder /app/server . + +# Expose the port your app runs on +EXPOSE 3000 + +# Run the binary +CMD ["./server"] + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e363536 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,45 @@ +services: + api: + build: + context: . + dockerfile: Dockerfile + ports: + - "${SERVER_PORT}:${SERVER_PORT}" + depends_on: + - db + - minio + environment: + NODE_ENV: production + DATABASE_URL: ${DATABASE_URL} + + db: + image: postgres:latest + environment: + POSTGRES_USER: ${DB_USER} + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_DB: ${DB_NAME} + ports: + - "${DB_PORT}:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + minio: + image: minio/minio:latest + ports: + - "9000:9000" + - "9001:9001" + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + command: server /data --console-address ":9001" + volumes: + - minio_data:/data + healthcheck: + test: ["CMD", "mc", "ready", "local"] + interval: 30s + timeout: 20s + retries: 3 + +volumes: + postgres_data: + minio_data: diff --git a/package.json b/package.json index abb47f0..3d937cf 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", "db:push": "drizzle-kit push:pg", + "build": "bun build --compile --minify-whitespace --minify-syntax --target bun --outfile server ./src/app.ts", "dev": "bun run --watch src/app.ts" }, "dependencies": { @@ -14,6 +15,7 @@ "@elysiajs/cookie": "^0.8.0", "@elysiajs/cors": "^1.2.0", "@elysiajs/swagger": "^1.2.0", + "drizzle-kit": "^0.30.2", "dotenv": "^16.4.7", "drizzle-orm": "^0.38.4", "elysia": "latest", @@ -26,8 +28,7 @@ "devDependencies": { "@types/pg": "^8.11.10", "bun-types": "latest", - "drizzle-kit": "^0.30.2", "tsx": "^4.19.2" }, "module": "src/app.js" -} \ No newline at end of file +} diff --git a/src/app.ts b/src/app.ts index 86f25ab..251e3fe 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,7 +8,8 @@ import { api } from "./api"; const allowedOrigins = [ "http://localhost:5175", "http://localhost:5173", - "https://your-production-site.com", + "https://dashboard.planpostai.com", + "https://canvas.planpostai.com", ]; const app = new Elysia({ diff --git a/src/config/minioClient.ts b/src/config/minioClient.ts index 798b1a1..3cb989f 100644 --- a/src/config/minioClient.ts +++ b/src/config/minioClient.ts @@ -2,9 +2,9 @@ import { Client } from "minio"; import { ENV } from "../config/env"; export const minioClient = new Client({ - endPoint: ENV.MINIO_ENDPOINT!, - port: ENV.MINIO_PORT, - useSSL: false, - accessKey: ENV.MINIO_ACCESS_KEY, - secretKey: ENV.MINIO_SECRET_KEY, -}) \ No newline at end of file + endPoint: ENV.MINIO_ENDPOINT!, + port: ENV.MINIO_PORT, + useSSL: false, + accessKey: ENV.MINIO_ACCESS_KEY, + secretKey: ENV.MINIO_SECRET_KEY, +})