# YMhut Unified Management This service unifies the old `server/update` and `server/feedback-mailer` projects. ## What It Provides - Go backend with SQLite by default. - Optional MySQL configuration with runtime status and failover hooks. - Legacy routes for `update-info.json`, `tool-status.json`, `media-types.json`, `modules.json`, downloads, and feedback. - New client discovery through `/api/client/bootstrap`. - Admin login with default account `admin/admin`. - Login captcha, HttpOnly session cookie, and CSRF checks. - In-process media/data source service with scheduled health checks. - Vue admin/portal source and Rust WASM helper source. ## Run ```powershell cd server\unified-management go mod tidy go run main.go ``` The startup preflight prints: - the accepted entrypoint: `go run main.go` - the listen address - storage, SQLite, legacy JSON, downloads, and frontend dist status Alternative command entrypoint: ```powershell go run .\cmd\unified-management ``` Tests: ```powershell go test ./... ``` ## Frontend Build Check Startup preflight checks both built web apps: - `web/admin/dist/index.html` - `web/admin/dist/assets` - `web/portal/dist/index.html` - `web/portal/dist/assets` If either frontend is missing, the service still starts, but the preflight log tells you to run the frontend build. Release binaries built with `embed_web` report that embedded frontend assets are being used instead. Build the local dist files with: ```powershell cd server\unified-management\web\admin npm install npm run build cd ..\portal npm install npm run build ``` The Go server serves portal assets from `/assets/*` and admin assets from `/admin/assets/*`. Disk `dist` files are preferred during development; embedded assets are used as the release fallback. ## Release Binaries Build frontend assets and produce merged backend binaries for Windows and Linux. The scripts run `npm run build` for both web apps and compile Go with `-tags embed_web`, so the resulting binaries include the admin and portal frontends: ```powershell cd server\unified-management .\scripts\build-release.ps1 -Version 0.1.0 ``` Linux/macOS shell: ```bash cd server/unified-management VERSION=0.1.0 ./scripts/build-release.sh ``` Outputs are written to `dist-release/`: - `ymhut-unified-management-windows-amd64.exe` - `ymhut-unified-management-linux-amd64` - `ymhut-unified-management-linux-arm64` ## Default Port The default listen address is `:33550`. Override it with either: ```powershell $env:YMHUT_LISTEN=":33551" ``` or: ```powershell $env:PORT="33551" ``` ## Environment - `YMHUT_LISTEN`: listen address, default `:33550` - `YMHUT_BASE_URL`: public endpoint, default `https://update.ymhut.cn` - `YMHUT_DB_PROVIDER`: `sqlite` or `mysql` - `YMHUT_SQLITE_PATH`: SQLite path - `YMHUT_MYSQL_DSN`: MySQL DSN - `YMHUT_UPDATE_PUBLIC_DIR`: legacy update public directory - `YMHUT_DOWNLOADS_DIR`: package download directory - `YMHUT_SOURCE_CHECK_SECONDS`: source health check interval ## Frontend - `web/admin`: Vue admin console source - `web/portal`: Vue public portal source - `web/wasm`: Rust WASM helpers Rust WASM functions: - `compareVersions` - `normalizeReleaseManifest` - `validateSourceCatalog` - `scoreEndpointHealth` - `mergeLegacyMediaTypes`