Embed UI in binary (fix 404 when web/ missing from WorkingDirectory). Document logs and troubleshooting.
Made-with: Cursor
This commit is contained in:
@@ -15,7 +15,7 @@
|
|||||||
- `GET /api/scans/{id}/lldp` - LLDP соседи (если устройство отдает LLDP-MIB по SNMP).
|
- `GET /api/scans/{id}/lldp` - LLDP соседи (если устройство отдает LLDP-MIB по SNMP).
|
||||||
- `GET /api/scans/{id}/links` - базовые связи из LLDP с попыткой сопоставления по `remote_sys_name`.
|
- `GET /api/scans/{id}/links` - базовые связи из LLDP с попыткой сопоставления по `remote_sys_name`.
|
||||||
- `GET /api/scans/{id}/topology` - граф `nodes/edges` для визуализации.
|
- `GET /api/scans/{id}/topology` - граф `nodes/edges` для визуализации.
|
||||||
- `GET /` - простая UI-страница для просмотра топологии.
|
- `GET /` — UI для просмотра топологии (страница встроена в бинарник через `embed`, каталог `internal/webui/`; **не зависит** от `WorkingDirectory` и папки `web/` рядом с процессом).
|
||||||
- Валидация CIDR и exclude IP.
|
- Валидация CIDR и exclude IP.
|
||||||
- Два backend-хранилища: in-memory и PostgreSQL.
|
- Два backend-хранилища: in-memory и PostgreSQL.
|
||||||
- После создания scan запускается фоновый discovery с обновлением статуса и прогресса.
|
- После создания scan запускается фоновый discovery с обновлением статуса и прогресса.
|
||||||
@@ -230,6 +230,21 @@ sudo systemctl enable --now nettopo-go
|
|||||||
systemctl status nettopo-go
|
systemctl status nettopo-go
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Логи (systemd)
|
||||||
|
|
||||||
|
Сервер пишет в **стандартный лог** пакета `log` (stderr): старт, выбранное хранилище, фатальные ошибки БД. Просмотр:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u nettopo-go -f
|
||||||
|
journalctl -u nettopo-go -n 100 --no-pager
|
||||||
|
```
|
||||||
|
|
||||||
|
Отдельного файла логов приложение **не создаёт**; при необходимости перенаправьте вывод unit-а в файл через `StandardOutput=` / `StandardError=` в override.
|
||||||
|
|
||||||
|
### Если в браузере `404 page not found` на `/`
|
||||||
|
|
||||||
|
Раньше UI отдавался из каталога `web/` относительно **текущей рабочей директории** процесса; при `WorkingDirectory=/opt/nettopo-go` без этой папки корень сайта давал 404. Сейчас UI **вшит в бинарник** — после обновления до актуального коммита пересоберите сервер (`go build ...`) и перезапустите сервис. Проверка API: `curl -s http://127.0.0.1:8080/health` должен вернуть JSON `{"status":"ok",...}`.
|
||||||
|
|
||||||
## Размещение за IIS на Windows
|
## Размещение за IIS на Windows
|
||||||
|
|
||||||
- Запускать `nettopo-server.exe` как Windows Service.
|
- Запускать `nettopo-server.exe` как Windows Service.
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"nettopo-go/internal/scans"
|
"nettopo-go/internal/scans"
|
||||||
|
"nettopo-go/internal/webui"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
@@ -54,7 +55,7 @@ func NewHandler(store scans.Store, run *scans.Runner) *Handler {
|
|||||||
|
|
||||||
func (h *Handler) Routes() http.Handler {
|
func (h *Handler) Routes() http.Handler {
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
webFS := http.FileServer(http.Dir("web"))
|
webFS := http.FileServer(http.FS(webui.FS))
|
||||||
mux.Handle("GET /", webFS)
|
mux.Handle("GET /", webFS)
|
||||||
mux.Handle("GET /web/", http.StripPrefix("/web/", webFS))
|
mux.Handle("GET /web/", http.StripPrefix("/web/", webFS))
|
||||||
mux.HandleFunc("GET /health", h.health)
|
mux.HandleFunc("GET /health", h.health)
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package webui
|
||||||
|
|
||||||
|
import "embed"
|
||||||
|
|
||||||
|
//go:embed index.html
|
||||||
|
var FS embed.FS
|
||||||
Reference in New Issue
Block a user