Add server control (start/stop/restart, live logs, broadcast, kick) to webadmin

Docker SDK drives login/char/worldserver containers via docker.sock (mounted
read-only into webadmin); live logs stream over SSE with nginx buffering
disabled so lines arrive in real time. Broadcast/kick go through a new
admin_queue DB table that the world server polls every ~2s in its existing
WorldProcess tick loop, avoiding a second IPC channel to the game server.
This commit is contained in:
Thomas committed 2026-07-10 14:19:14 +02:00
1 parent 3554c85f2f
commit 15e562cb04
11 files changed
+331 -2

No files matched your search

+16
View File
@@ -71,6 +71,21 @@
.badge.ok { background: #163a26; color: var(--ok); }
.badge.off { background: #3a1620; color: var(--danger); }
.row-actions a { margin-right: 8px; }
.logbox {
background: #0a0b10;
border: 1px solid var(--border);
border-radius: 8px;
padding: 12px;
height: 360px;
overflow-y: auto;
font-family: "SF Mono", Consolas, Menlo, monospace;
font-size: 12px;
white-space: pre-wrap;
word-break: break-all;
}
.service-tabs { display: flex; gap: 8px; margin-bottom: 12px; }
.service-tabs button.tab { background: #33384a; }
.service-tabs button.tab.active { background: var(--accent); }
</style>
</head>
<body>
@@ -80,6 +95,7 @@
<nav>
<a href="{{ url_for('accounts') }}">Accounts</a>
<a href="{{ url_for('characters') }}">Charaktere</a>
<a href="{{ url_for('server_control') }}">Server</a>
<a href="{{ url_for('logout') }}">Logout ({{ session['username'] }})</a>
</nav>
{% endif %}