Dockerize

This commit is contained in:
Zimeng Xiong
2025-11-21 23:43:53 -08:00
parent 5979293e1b
commit e87987a0a3
19 changed files with 701 additions and 7 deletions
+11
View File
@@ -0,0 +1,11 @@
node_modules
npm-debug.log
dist
.git
.gitignore
*.md
.env
.DS_Store
*.log
prisma/dev.db
prisma/dev.db-journal
+4
View File
@@ -0,0 +1,4 @@
# Backend Environment Variables
PORT=8000
NODE_ENV=production
DATABASE_URL=file:/app/prisma/dev.db
+57
View File
@@ -0,0 +1,57 @@
# Build stage
FROM node:20-alpine AS builder
WORKDIR /app
# Copy package files
COPY package*.json ./
COPY tsconfig.json ./
# Install dependencies
RUN npm ci
# Copy prisma schema
COPY prisma ./prisma/
# Generate Prisma Client
RUN npx prisma generate
# Copy source code
COPY src ./src
# Build TypeScript
RUN npx tsc
# Production stage
FROM node:20-alpine
# Install OpenSSL for Prisma
RUN apk add --no-cache openssl
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install production dependencies only
RUN npm ci --only=production
# Copy prisma schema and migrations
COPY prisma ./prisma/
# Copy built application from builder
COPY --from=builder /app/dist ./dist
# Copy the generated Prisma Client from builder to maintain the same structure
COPY --from=builder /app/src/generated ./dist/generated
# Generate Prisma Client in production (updates node_modules)
RUN npx prisma generate
# Run migrations and start server
COPY docker-entrypoint.sh ./
RUN chmod +x docker-entrypoint.sh
EXPOSE 8000
ENTRYPOINT ["./docker-entrypoint.sh"]
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
set -e
# Run migrations
npx prisma migrate deploy
# Start the application
node dist/index.js
+3 -2
View File
@@ -2,8 +2,9 @@
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
provider = "prisma-client-js"
output = "../src/generated/client"
binaryTargets = ["native", "linux-musl-arm64-openssl-3.0.x"]
}
datasource db {
+5
View File
@@ -104,6 +104,11 @@ io.on("connection", (socket) => {
});
});
// Health check endpoint
app.get("/health", (req, res) => {
res.status(200).json({ status: "ok" });
});
// --- Drawings ---
// GET /drawings
+5 -3
View File
@@ -2,8 +2,8 @@
// Visit https://aka.ms/tsconfig to read more about this file
"compilerOptions": {
// File Layout
// "rootDir": "./src",
// "outDir": "./dist",
"rootDir": "./src",
"outDir": "./dist",
// Environment Settings
// See also https://aka.ms/tsconfig/module
@@ -16,5 +16,7 @@
"noUncheckedSideEffectImports": true,
"moduleDetection": "force",
"skipLibCheck": true,
}
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "prisma.config.ts"]
}