diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3aa59e3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,24 @@ +# Контекст сборки web — корень репо (frontend/Dockerfile собирает фронт +# и расширение): режем тяжёлое и ненужное образам. +.git +.claude + +# Node-артефакты (в контейнерах ставятся заново) +**/node_modules +**/dist +**/tsconfig.tsbuildinfo + +# Python-артефакты backend +**/.venv +**/__pycache__ +**/.pytest_cache +**/.mypy_cache +**/.ruff_cache +backend/data + +# Секреты окружения (compose читает их с диска, в контекст они не нужны) +.env +.env.* + +# Сгенерированный ZIP расширения (собирается в Docker-образе) +frontend/public/extension \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7d3f43c..d1e8c63 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,7 +48,10 @@ start_period: 30s web: - build: ./frontend + # контекст — корень репо: в образе фронта собирается и zip расширения + build: + context: . + dockerfile: frontend/Dockerfile restart: unless-stopped depends_on: - api diff --git a/frontend/Dockerfile b/frontend/Dockerfile index c951db6..9e3038b 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,12 +1,26 @@ +# Контекст сборки web — корень репо (docker-compose: build.context: .): +# фронтенд + расширение (ZIP для страницы /extension, ТЗ 3.18). + +# --- Фронтенд --- FROM node:22-alpine AS build WORKDIR /build -COPY package.json package-lock.json .npmrc ./ -# Зависимости (gnexus-ui-kit и др.) через git — нужен git -RUN apk add --no-cache git && npm ci -COPY . . +RUN apk add --no-cache git +COPY frontend/package.json frontend/package-lock.json frontend/.npmrc ./ +RUN npm ci +COPY frontend/ . RUN npm run build +# --- Расширение: сборка + zip в раздаваемые статики --- +FROM node:22-alpine AS ext +WORKDIR /ext +RUN apk add --no-cache git zip +COPY extension/package.json extension/package-lock.json extension/.npmrc ./ +RUN npm ci +COPY extension/ . +RUN npm run build && mkdir -p /zip/extension && zip -qr /zip/extension/gntodo-extension.zip dist + FROM nginx:alpine COPY --from=build /build/dist /usr/share/nginx/html -COPY nginx.conf /etc/nginx/conf.d/default.conf -EXPOSE 80 +COPY --from=ext /zip/extension /usr/share/nginx/html/extension +COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 \ No newline at end of file