feat(web): React-фронтенд вместо Flet + fix restore rmtree на bind-mount

web-react/: SPA Vite+React+TS, nginx раздаёт статику и проксирует /api на api:8000 по локалке. docker-compose: web(Flet)->web-react на :80. transfer_crud.backup_restore: чистим содержимое data/radar вместо rmtree точки монтирования (EBUSY).
This commit is contained in:
jze9
2026-06-02 13:56:44 +00:00
parent 71887b084a
commit eac61923f4
38 changed files with 4480 additions and 10 deletions

36
web-react/nginx.conf Normal file
View File

@@ -0,0 +1,36 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Статика SPA: всё неизвестное отдаём index.html (клиентский роутинг)
location / {
try_files $uri $uri/ /index.html;
}
# Прокси на внутренний API-контейнер (браузер к api:8000 напрямую не ходит).
# Префикс /api срезается: /api/auth/login -> http://api:8000/auth/login
#
# Используем встроенный DNS Docker (127.0.0.11) и переменную в proxy_pass,
# чтобы nginx переразрешал имя `api` на каждый запрос. Иначе nginx кэширует
# IP при старте и ломается (502), если контейнер api перезапустился и сменил IP.
location /api/ {
resolver 127.0.0.11 valid=10s ipv6=off;
set $api_backend api;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://$api_backend:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
# Кэш статических ассетов с хэшем в имени
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}