From 5421bd63bde06fb579daa399f9ec88ec97c339ea Mon Sep 17 00:00:00 2001 From: SERTY Date: Thu, 11 Dec 2025 05:36:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=84=D1=80=D0=BE=D0=BD=D1=82=20=D0=B2=20docker-compose=20?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20nginx=20nginx=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B0=D1=91?= =?UTF-8?q?=D1=82=20=D1=81=D1=82=D0=B0=D1=82=D0=B8=D0=BA=D1=83=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=B1=D0=B8=D0=BB=D0=B4=D0=B0=20=D1=80=D0=B5=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B0=20=D0=BF=D0=BE=D1=80=D1=82=20=D1=83=20=D1=84?= =?UTF-8?q?=D1=80=D0=BE=D0=BD=D1=82=D0=B0=20-=205174=20=D1=82=D0=BA=20?= =?UTF-8?q?=D1=8F=20=D1=83=20=D1=81=D0=B5=D0=B1=D1=8F=20=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=205173=20=D0=BD=D0=B0=20code-server=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20vite=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 19 +++++++++++-------- rmser-view/Dockerfile | 32 ++++++++++++++++++++++++++++++++ rmser-view/nginx.conf | 22 ++++++++++++++++++++++ 3 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 rmser-view/Dockerfile create mode 100644 rmser-view/nginx.conf diff --git a/docker-compose.yml b/docker-compose.yml index 89542f3..267f4f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,3 @@ - services: # 1. База данных PostgreSQL db: @@ -14,7 +13,7 @@ services: volumes: - postgres_data:/var/lib/postgresql/data - # 2. Redis (если понадобится в будущем, пусть будет) + # 2. Redis redis: image: redis:7-alpine container_name: rmser_redis @@ -43,16 +42,20 @@ services: - ocr ports: - "8080:8080" - # Переопределяем конфиг через ENV переменные - # Формат: СЕКЦИЯ_КЛЮЧ (Viper AutomaticEnv с заменой точки на _) environment: - # Настройки БД (внутри докера хост 'db') - DB_DSN=host=db user=rmser password=mhrcadmin994525 dbname=rmser_db port=5432 sslmode=disable TimeZone=Europe/Moscow - # Настройки Redis (внутри докера хост 'redis') - REDIS_ADDR=redis:6379 - # Настройки OCR (внутри докера хост 'ocr') - OCR_SERVICE_URL=http://ocr:5000 - # Остальные настройки (RMS, Telegram) берутся из config.yaml + + # 5. Frontend (React + Nginx) - НОВОЕ + frontend: + build: ./rmser-view + container_name: rmser_frontend + restart: always + depends_on: + - app # Ждем запуска бэкенда + ports: + - "5174:80" # Порт хоста 5174 (5173 оставим для vscode-server под vite-dev) -> Порт контейнера 80 volumes: postgres_data: \ No newline at end of file diff --git a/rmser-view/Dockerfile b/rmser-view/Dockerfile new file mode 100644 index 0000000..b01ddba --- /dev/null +++ b/rmser-view/Dockerfile @@ -0,0 +1,32 @@ +# Этап 1: Сборка (Build) +FROM node:24-alpine as builder + +WORKDIR /app + +# Копируем файлы зависимостей +COPY package*.json ./ + +# Устанавливаем зависимости +RUN npm install + +# Копируем исходный код +COPY . . + +# Собираем проект (результат будет в папке dist) +# Важно: Vite подставит VITE_API_URL во время сборки. +# Мы будем использовать относительный путь /api, чтобы работал прокси Nginx. +ENV VITE_API_URL=/api +RUN npm run build + +# Этап 2: Запуск (Serve via Nginx) +FROM nginx:alpine + +# Копируем конфиг nginx (создадим его на след. шаге) +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Копируем собранные файлы из этапа сборки +COPY --from=builder /app/dist /usr/share/nginx/html + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/rmser-view/nginx.conf b/rmser-view/nginx.conf new file mode 100644 index 0000000..bd9c11f --- /dev/null +++ b/rmser-view/nginx.conf @@ -0,0 +1,22 @@ +server { + listen 80; + server_name localhost; + + # 1. Раздача фронтенда + location / { + root /usr/share/nginx/html; + index index.html index.htm; + # Это магия для React Router (SPA): если файл не найден, отдаем index.html + try_files $uri $uri/ /index.html; + } + + # 2. Проксирование API на бэкенд + # Запросы на /api/... пойдут в контейнер "app" на порт 8080 + location /api/ { + # 'app' - это имя сервиса бэкенда в docker-compose + proxy_pass http://app:8080/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} \ No newline at end of file