This commit is contained in:
2026-03-19 16:12:22 +07:00
parent 39b0358b08
commit b7e8450357
11 changed files with 101 additions and 68 deletions

View File

@@ -142,3 +142,6 @@ Makefile
.nvmrc
.node-version
.npmrc
node_modules

34
Dockerfile Normal file
View File

@@ -0,0 +1,34 @@
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package.json
COPY tsconfig.json tsconfig.json
RUN npm install
FROM node:22-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules node_modules
COPY package.json package.json
COPY tsconfig.json tsconfig.json
COPY src src
RUN npm run build
FROM node:22-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
COPY package.json package.json
RUN npm install --omit=dev && npm cache clean --force
COPY --from=build /app/dist dist
USER node
EXPOSE 4000
CMD ["npm", "run", "start"]

View File

@@ -1,22 +0,0 @@
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package.json
COPY tsconfig.json tsconfig.json
RUN npm install
COPY src src
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=build /app/package.json package.json
COPY --from=build /app/node_modules node_modules
COPY --from=build /app/dist dist
EXPOSE 4000
CMD ["npm", "run", "start"]

View File

@@ -1,34 +0,0 @@
{
"name": "@pg-control/backend",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "tsx watch src/server.ts",
"build": "tsc -p tsconfig.json",
"start": "node dist/server.js"
},
"dependencies": {
"bcryptjs": "^2.4.3",
"connect-pg-simple": "^10.0.0",
"cors": "^2.8.5",
"dockerode": "^4.0.7",
"dotenv": "^16.4.5",
"express": "^4.19.2",
"express-rate-limit": "^7.4.0",
"express-session": "^1.18.0",
"helmet": "^7.1.0",
"pg": "^8.11.5",
"zod": "^3.23.8"
},
"devDependencies": {
"@types/bcryptjs": "^2.4.6",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/express-session": "^1.18.0",
"@types/node": "^22.10.1",
"@types/pg": "^8.11.6",
"tsx": "^4.19.2",
"typescript": "^5.7.2"
}
}

View File

@@ -48,12 +48,12 @@ services:
build:
context: ./frontend
dockerfile: Dockerfile
args:
VITE_API_BASE_URL: http://localhost:4000/api
container_name: pg-control-frontend
restart: unless-stopped
depends_on:
- backend
environment:
VITE_API_BASE_URL: http://localhost:4000/api
ports:
- "5173:80"

4
frontend/.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
node_modules
dist
npm-debug.log
Dockerfile

View File

@@ -1,4 +1,4 @@
FROM node:22-alpine AS build
FROM node:22-alpine AS deps
WORKDIR /app
@@ -6,6 +6,16 @@ COPY package.json package.json
COPY vite.config.js vite.config.js
RUN npm install
FROM node:22-alpine AS build
WORKDIR /app
ARG VITE_API_BASE_URL=http://localhost:4000/api
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
COPY --from=deps /app/node_modules node_modules
COPY package.json package.json
COPY vite.config.js vite.config.js
COPY public public
COPY src src
COPY index.html index.html
@@ -14,5 +24,6 @@ RUN npm run build
FROM nginx:1.27-alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80

17
frontend/nginx.conf Normal file
View File

@@ -0,0 +1,17 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location = /health {
access_log off;
return 200 "ok\n";
add_header Content-Type text/plain;
}
}

View File

@@ -1,14 +1,34 @@
{
"name": "postgres-control-center",
"private": true,
"name": "@pg-control/backend",
"version": "1.0.0",
"workspaces": [
"backend",
"frontend"
],
"private": true,
"type": "module",
"scripts": {
"dev": "npm run dev -w backend & npm run dev -w frontend",
"build": "npm run build -w backend && npm run build -w frontend",
"start": "npm run start -w backend"
"dev": "tsx watch src/server.ts",
"build": "tsc -p tsconfig.json",
"start": "node dist/server.js"
},
"dependencies": {
"bcryptjs": "^2.4.3",
"connect-pg-simple": "^10.0.0",
"cors": "^2.8.5",
"dockerode": "^4.0.7",
"dotenv": "^16.4.5",
"express": "^4.19.2",
"express-rate-limit": "^7.4.0",
"express-session": "^1.18.0",
"helmet": "^7.1.0",
"pg": "^8.11.5",
"zod": "^3.23.8"
},
"devDependencies": {
"@types/bcryptjs": "^2.4.6",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/express-session": "^1.18.0",
"@types/node": "^22.10.1",
"@types/pg": "^8.11.6",
"tsx": "^4.19.2",
"typescript": "^5.7.2"
}
}