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}/links` - базовые связи из LLDP с попыткой сопоставления по `remote_sys_name`.
|
||||
- `GET /api/scans/{id}/topology` - граф `nodes/edges` для визуализации.
|
||||
- `GET /` - простая UI-страница для просмотра топологии.
|
||||
- `GET /` — UI для просмотра топологии (страница встроена в бинарник через `embed`, каталог `internal/webui/`; **не зависит** от `WorkingDirectory` и папки `web/` рядом с процессом).
|
||||
- Валидация CIDR и exclude IP.
|
||||
- Два backend-хранилища: in-memory и PostgreSQL.
|
||||
- После создания scan запускается фоновый discovery с обновлением статуса и прогресса.
|
||||
@@ -230,6 +230,21 @@ sudo systemctl enable --now 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
|
||||
|
||||
- Запускать `nettopo-server.exe` как Windows Service.
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"nettopo-go/internal/scans"
|
||||
"nettopo-go/internal/webui"
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
@@ -54,7 +55,7 @@ func NewHandler(store scans.Store, run *scans.Runner) *Handler {
|
||||
|
||||
func (h *Handler) Routes() http.Handler {
|
||||
mux := http.NewServeMux()
|
||||
webFS := http.FileServer(http.Dir("web"))
|
||||
webFS := http.FileServer(http.FS(webui.FS))
|
||||
mux.Handle("GET /", webFS)
|
||||
mux.Handle("GET /web/", http.StripPrefix("/web/", webFS))
|
||||
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