добавил фронт в docker-compose и конфиг для nginx

nginx раздаёт статику из билда реакта
порт у фронта - 5174 тк я у себя оставил 5173 на code-server для vite dev
This commit is contained in:
2025-12-11 05:36:35 +03:00
parent 02681340c5
commit 5421bd63bd
3 changed files with 65 additions and 8 deletions

View File

@@ -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:

32
rmser-view/Dockerfile Normal file
View File

@@ -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;"]

22
rmser-view/nginx.conf Normal file
View File

@@ -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;
}
}