diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f549aae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +node_modules +npm-debug.log +dist +.git +.gitignore +.DS_Store +*.log +.cursor +terminals + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d1e5489 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM node:20-alpine AS build + +WORKDIR /app + +# Установим зависимости +COPY package.json package-lock.json* ./ +RUN npm ci || npm install + +# Скопируем исходники и соберём продакшн-бандл +COPY . . +RUN npm run build + +# Продакшн-слой с nginx +FROM nginx:1.27-alpine + +# Конфиг nginx для SPA (React Router) +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Копируем собранный фронтенд +COPY --from=build /app/dist /usr/share/nginx/html + +# Дополнительно копируем папку js с tailwind.js, +# т.к. Vite не кладёт её в dist автоматически, а index.html на неё ссылается +COPY --from=build /app/js /usr/share/nginx/html/js + +# И статику из media (иконки, картинки), на которые есть ссылки из index.html и компонентов +COPY --from=build /app/media /usr/share/nginx/html/media + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] + diff --git a/README.md b/README.md index a105e00..dc366fc 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,41 @@ -
-GHBanner -
+## Сайт «ГеоВектор» -# Run and deploy your AI Studio app +Это фронтенд‑сайт компании «ГеоВектор» (инженерные изыскания, проектирование и строительство), написанный на React + Vite. -This contains everything you need to run your app locally. +Репозиторий содержит весь код клиентской части, стили, медиа‑ресурсы и конфигурацию для локального запуска и Docker‑деплоя. -View your app in AI Studio: https://ai.studio/apps/drive/1QCqfHN0ERBMa_RDsVDPW13W8gJQWQbPG +### Локальный запуск (режим разработки) -## Run Locally +**Требования:** установлен Node.js (рекомендуется актуальная LTS‑версия). -**Prerequisites:** Node.js +1. Установить зависимости: + ```bash + npm install + ``` +2. (Опционально) Если требуется интеграция с Gemini API, задать ключ в файле `.env.local`: + ```bash + GEMINI_API_KEY=ВАШ_КЛЮЧ + ``` +3. Запустить дев‑сервер: + ```bash + npm run dev + ``` +4. Открыть в браузере адрес, который покажет Vite (обычно `http://localhost:3001`). +### Продакшн‑сборка и Docker + +В репозитории есть `Dockerfile`, который собирает продакшн‑бандл и упаковывает сайт в образ с nginx. + +1. Собрать образ: + ```bash + docker build -t geovector-site . + ``` +2. Запустить контейнер: + ```bash + docker run -d --name geovector-site -p 8080:80 geovector-site + ``` +3. Открыть сайт в браузере: + ```text + http://localhost:8080 + ``` -1. Install dependencies: - `npm install` -2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key -3. Run the app: - `npm run dev` diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..1ae610e --- /dev/null +++ b/nginx.conf @@ -0,0 +1,23 @@ +server { + listen 80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + # Отдаём статику как есть + location / { + try_files $uri $uri/ /index.html; + } + + # Кэш для статики (можно подкрутить под себя) + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + add_header Cache-Control "public, max-age=31536000, immutable"; + try_files $uri $uri/ /index.html; + } + + # Логи (опционально, можно выключить) + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log warn; +} +