Refactor Docker setup to integrate Web UI and streamline configuration
- Updated Dockerfile to build and embed the SvelteKit Web UI directly into the gateway image, eliminating the need for a separate web service. - Modified .dockerignore to exclude unnecessary directories related to the web service. - Adjusted config.compose.yaml to remove CORS settings for the web service, as the UI now shares the same origin as the API. - Enhanced README.md to reflect the new single-port architecture for accessing both the Web UI and API. - Removed the standalone web Dockerfile and updated related documentation for local development and build processes.
This commit is contained in:
+3
-2
@@ -1,2 +1,3 @@
|
||||
# Базовый URL шлюза telemt-api (без завершающего слэша)
|
||||
PUBLIC_TELEMT_GATEWAY_URL=http://127.0.0.1:8080
|
||||
# Пусто = запросы к API на том же origin, что и панель (образ Docker со встроенным UI).
|
||||
# Для dev (Vite :5173, шлюз :8080): http://127.0.0.1:8080
|
||||
PUBLIC_TELEMT_GATEWAY_URL=
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# Статическая сборка SvelteKit и раздача через serve
|
||||
FROM node:22-alpine AS build
|
||||
WORKDIR /app
|
||||
ARG PUBLIC_TELEMT_GATEWAY_URL=http://127.0.0.1:8080
|
||||
ENV PUBLIC_TELEMT_GATEWAY_URL=$PUBLIC_TELEMT_GATEWAY_URL
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
FROM node:22-alpine
|
||||
RUN npm install -g serve@14
|
||||
WORKDIR /srv
|
||||
COPY --from=build /app/build ./build
|
||||
EXPOSE 4173
|
||||
CMD ["serve", "-s", "build", "-l", "4173"]
|
||||
+13
-21
@@ -1,16 +1,17 @@
|
||||
# Telemt Panel (Web UI)
|
||||
|
||||
SvelteKit + shadcn-svelte: обзор флота (`/api/agg/*`), пользователи и IP, панель по каждой ноде через прокси шлюза (`/api/{alias}/…`).
|
||||
SvelteKit + shadcn-svelte. В **production** статика собирается и **встраивается в образ шлюза** ([Dockerfile](../Dockerfile) в корне репозитория): панель и API на **одном порту** (например `http://127.0.0.1:8080/` — UI, `/api/…` — шлюз).
|
||||
|
||||
## Переменные окружения
|
||||
## Переменная `PUBLIC_TELEMT_GATEWAY_URL`
|
||||
|
||||
| Переменная | Описание |
|
||||
| Значение | Когда |
|
||||
| --- | --- |
|
||||
| `PUBLIC_TELEMT_GATEWAY_URL` | Базовый URL шлюза **telemt-api** без завершающего `/` (например `http://127.0.0.1:8080`). Встраивается в клиент при сборке. |
|
||||
| *(пусто)* | Тот же хост и порт, что у страницы (Docker-образ шлюза, `npm run build` в Dockerfile с `ENV PUBLIC_TELEMT_GATEWAY_URL=`) |
|
||||
| `http://127.0.0.1:8080` | Локальная разработка: Vite на `:5173`, шлюз на `:8080` |
|
||||
|
||||
Скопируйте [.env.example](.env.example) в `.env` и при необходимости измените URL.
|
||||
Скопируйте [.env.example](.env.example) в `.env` и при необходимости задайте URL.
|
||||
|
||||
## Разработка
|
||||
## Разработка (Vite отдельно от Go)
|
||||
|
||||
```powershell
|
||||
cd web
|
||||
@@ -18,39 +19,30 @@ npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Откройте в браузере адрес Vite (по умолчанию `http://localhost:5173`). В конфиге шлюза укажите CORS, например:
|
||||
Откройте `http://localhost:5173`. В конфиге шлюза включите [CORS](../docs/AGGREGATE.md) для этого origin:
|
||||
|
||||
```yaml
|
||||
cors_allowed_origins:
|
||||
- "http://localhost:5173"
|
||||
```
|
||||
|
||||
## Сборка
|
||||
## Сборка только фронта
|
||||
|
||||
```powershell
|
||||
npm run build
|
||||
npm run preview # проверка статики
|
||||
```
|
||||
|
||||
## Типы из OpenAPI агрегатов
|
||||
Артефакт — каталог `build/`, при сборке **Docker-образа шлюза** он копируется в `internal/webui/static/` и попадает в бинарник через `embed`.
|
||||
|
||||
После изменения [../docs/AGGREGATE_OPENAPI.yaml](../docs/AGGREGATE_OPENAPI.yaml):
|
||||
## Типы из OpenAPI агрегатов
|
||||
|
||||
```powershell
|
||||
npm run gen:api
|
||||
```
|
||||
|
||||
## Docker
|
||||
|
||||
Сборка образа из каталога `web/`:
|
||||
|
||||
```powershell
|
||||
docker build -t telemt-web:local --build-arg PUBLIC_TELEMT_GATEWAY_URL=http://127.0.0.1:8080 .
|
||||
```
|
||||
|
||||
В [docker-compose.yml](../docker-compose.yml) сервис `web` отдаёт UI на порту **4173**. URL шлюза в образе задаётся **build-arg** (см. compose). Браузер на хосте обращается к шлюзу по `http://127.0.0.1:8080` — при другом адресе пересоберите образ с нужным `PUBLIC_TELEMT_GATEWAY_URL`.
|
||||
Источник: [../docs/AGGREGATE_OPENAPI.yaml](../docs/AGGREGATE_OPENAPI.yaml).
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Секреты upstream к Telemt задаются на шлюзе (`authorization_env`), не в браузере.
|
||||
- Mutating CORS: шлюз должен разрешать `POST`, `PATCH`, `DELETE` в preflight (в текущей версии репозитория заголовок `Access-Control-Allow-Methods` это учитывает).
|
||||
- Для мутаций из другого origin шлюз отдаёт нужные заголовки CORS (в т.ч. методы `POST`, `PATCH`, `DELETE`).
|
||||
|
||||
Reference in New Issue
Block a user