From 1fa1178397430f437d9dad68a03b244fecb348d4 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Sat, 23 Aug 2025 21:55:21 +0300 Subject: [PATCH] Optimize deployment and improve package.json --- deployment/Dockerfile.backend | 8 +++++++- deployment/docker-compose.yml | 18 ++++++++++++++++++ deployment/frontend/Dockerfile | 17 +++++++++++++++-- package.json | 7 +++++++ 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/deployment/Dockerfile.backend b/deployment/Dockerfile.backend index bd41ac7..daf7c5b 100644 --- a/deployment/Dockerfile.backend +++ b/deployment/Dockerfile.backend @@ -1,19 +1,25 @@ +# 1. Install pip dependencies FROM python:3.12 AS builder WORKDIR /app RUN python3 -m venv .venv COPY backend/requirements.txt . -RUN ./.venv/bin/pip3 install -r requirements.txt +RUN --mount=type=cache,target=/root/.cache/pip \ + ./.venv/bin/pip3 install -r requirements.txt +# 2. Runtime stage FROM python:3.12-slim AS runtime +# 2.1. Non-root user WORKDIR /app RUN useradd -u 1000 app && \ chown -R app /app USER app +# 2.2. Copy content and create dirs COPY --chown=app backend . COPY --from=builder --chown=app /app/.venv .venv RUN mkdir -p /app/data +# 3. Final command ENTRYPOINT exec ./.venv/bin/fastapi run --port ${PORT:-8300} main.py \ No newline at end of file diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 3c470bd..ba57288 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -9,6 +9,13 @@ services: - "8300:8300" volumes: - "data:/app/data" + develop: + watch: + - action: sync+restart + path: ../backend + target: /app + - action: rebuild + path: ../backend/requirements.txt frontend: build: @@ -19,6 +26,17 @@ services: BACKEND_HOST: http://backend:8300 ports: - "8301:8301" + depends_on: + - backend + develop: + watch: + - action: rebuild + path: ../frontend + - action: sync+restart + path: server.js + target: /server/server.js + - action: rebuild + path: package.json volumes: data: diff --git a/deployment/frontend/Dockerfile b/deployment/frontend/Dockerfile index 140761f..b2cd175 100644 --- a/deployment/frontend/Dockerfile +++ b/deployment/frontend/Dockerfile @@ -1,26 +1,39 @@ +# 1. Build the frontend FROM node:24 AS frontend +# 1.1. Install npm dependencies WORKDIR /app COPY package.json . -RUN npm install --ignore-scripts +RUN --mount=type=cache,target=/root/.npm \ + npm install --ignore-scripts +# 1.2. Build COPY frontend frontend RUN npm run build +# 2. Build the static file server FROM node:24 AS server +# 2.1. Install npm dependencies WORKDIR /server COPY deployment/frontend/package.json . -RUN npm install +RUN --mount=type=cache,target=/root/.npm \ + npm install + +# 2.2. Copy the code COPY deployment/frontend/ . +# 3. Put it all together FROM node:24-slim +# 3.1. Frontend static files WORKDIR /app COPY --from=frontend /app/frontend/dist . +# 3.2. Static file server WORKDIR /server COPY --from=server /server . +# 4. Final command ENV STATIC_FILE_PATH=/app ENTRYPOINT ["npm", "run", "start"] \ No newline at end of file diff --git a/package.json b/package.json index 6950cad..c781e64 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,19 @@ "backend:run": "cd backend && ../.venv/bin/fastapi dev --port 8300 main.py", "backend:dependencies": "python3 -m venv .venv && ./.venv/bin/pip3 install -r backend/requirements.txt", "backend:reinstall": "rm -rf .venv && npm run backend:dependencies", + "backend:clean": "rm -rf backend/data", + "frontend:dev": "vite frontend", "frontend:build": "tsc --project frontend && vite build frontend", "frontend:preview": "vite preview frontend", "frontend:dependencies": "npm install", + "frontend:clean": "rm -rf frontend/dist", + "dev": "concurrently 'npm run frontend:dev' 'npm run backend:run'", "build": "npm run frontend:build", + "preview": "cd deployment && docker compose up --build --watch", + "preview:clean": "cd deployment && docker compose down -v", + "clean": "npm run backend:clean && npm run frontend:clean && npm run preview:clean", "install": "npm run backend:dependencies" }, "devDependencies": {