feat(backends): Pool-Modell — Backend = Pool, N Server pro Backend
Migration 0016: backend_servers (id, backend_id, name, address, port, weight, backup, active) + backends.lb_algorithm. Daten-Migration kopiert bestehende backends.address/port als ersten Server, dann DROP COLUMN. HAProxy-Renderer: rendert pro Backend einen Block mit `balance <algo>` + N `server`-Zeilen (weight, backup-Flag, optional check inter 5s). LB-Algorithmen: roundrobin / leastconn / source. REST: /backends/:id/servers (GET/POST), /backend-servers/:id (PUT/DELETE). Re-rendert HAProxy nach jeder Server-Mutation. UI: address/port aus Backend-Form raus, lb_algorithm-Select rein. Server verwaltet ein expandable Sub-Panel pro Backend-Row (Tabelle + Add/Edit/ Delete-Modal). Domain-Attachment-Multi-Select bleibt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -202,13 +202,11 @@
|
||||
},
|
||||
"backends": {
|
||||
"title": "Backends",
|
||||
"intro": "Upstream servers HAProxy proxies to. Optional health-check path enables TCP + HTTP probes every 5s.",
|
||||
"addBackend": "Add backend",
|
||||
"editBackend": "Edit backend",
|
||||
"intro": "Upstream pools (one backend = N servers). HAProxy balances load by the chosen algorithm; health-check path enables HTTP probes every 5s per server.",
|
||||
"addBackend": "Add backend pool",
|
||||
"editBackend": "Edit backend pool",
|
||||
"name": "Name",
|
||||
"scheme": "Scheme",
|
||||
"address": "Address",
|
||||
"port": "Port",
|
||||
"target": "Target",
|
||||
"healthCheck": "Health check path",
|
||||
"active": "Active",
|
||||
@@ -217,8 +215,30 @@
|
||||
"attachedDomains": "Domains",
|
||||
"attachedDomainsHint": "Domains that use this backend as their primary. Selecting domains here reconfigures them directly — same source of truth as the Domain modal's backend picker.",
|
||||
"selectDomains": "Select domains",
|
||||
"lbAlgo": "Load balancing",
|
||||
"lbAlgoHint": "roundrobin = evenly, leastconn = pick the server with fewest active connections, source = sticky per client-IP hash (for stateful apps without shared session).",
|
||||
"servers": "Servers",
|
||||
"noServers": "no server",
|
||||
"nServers": "{{n}} servers",
|
||||
"serversIn": "Servers in “{{name}}”",
|
||||
"serverHintCreate": "Saving creates the pool only. Add servers in the next step — open the pool and click “Add server”.",
|
||||
"actions": "Actions",
|
||||
"deleteConfirm": "Really delete backend {{name}}?"
|
||||
"deleteConfirm": "Really delete backend pool {{name}}? All servers in the pool will be removed too.",
|
||||
"server": {
|
||||
"intro": "Upstream servers in this pool. Order doesn't matter — the LB algorithm decides.",
|
||||
"add": "Add server",
|
||||
"edit": "Edit server",
|
||||
"name": "Server name",
|
||||
"address": "Address",
|
||||
"port": "Port",
|
||||
"target": "Endpoint",
|
||||
"weight": "Weight",
|
||||
"weightHint": "0–256. Higher = more traffic. 100 = default.",
|
||||
"backup": "Backup",
|
||||
"backupHint": "Backup servers receive traffic only when every primary (non-backup) server is down.",
|
||||
"empty": "No servers in the pool yet. Click “Add server” to get started.",
|
||||
"deleteConfirm": "Really delete server {{name}}?"
|
||||
}
|
||||
},
|
||||
"routing": {
|
||||
"title": "Routing rules",
|
||||
|
||||
Reference in New Issue
Block a user