feat: add 7 new features — exec shell, SSE events, compose import, docker resources, resource limits, email notifications, auto-updates
- Container exec/shell via WebSocket + xterm.js (subtle >_ button on cards) - Live dashboard updates via SSE (resource alerts, health changes, update notices) - Docker Compose import with YAML parsing, preview, and dependency-ordered deploy - Volume & network management modal with disk usage overview - CPU/memory resource limits on deploy and live update - Email SMTP notifications (nodemailer) alongside Discord/Telegram/ntfy - Scheduled auto-update scheduler with maintenance windows (daily/weekly/monthly) New deps: ws, js-yaml, nodemailer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -181,6 +181,22 @@
|
||||
</div>
|
||||
<div id="volume-mounts-list" style="display: grid; gap: 8px;"></div>
|
||||
</div>
|
||||
<div style="margin-top: 12px;">
|
||||
<label class="form-label-accent-sm">⚙️ Resource Limits</label>
|
||||
<div style="font-size: 0.8rem; color: var(--muted); margin-bottom: 8px;">
|
||||
Optional CPU and memory constraints. Leave at 0 for unlimited.
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
|
||||
<div>
|
||||
<label for="deploy-cpu-limit" style="display: block; font-size: 0.78rem; color: var(--muted); margin-bottom: 4px;">CPU Cores</label>
|
||||
<input type="number" id="deploy-cpu-limit" value="0" min="0" max="64" step="0.25" class="form-input-card" style="width: 100%;" placeholder="0 = unlimited" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="deploy-memory-limit" style="display: block; font-size: 0.78rem; color: var(--muted); margin-bottom: 4px;">Memory (MB)</label>
|
||||
<input type="number" id="deploy-memory-limit" value="0" min="0" max="131072" step="64" class="form-input-card" style="width: 100%;" placeholder="0 = unlimited" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
@@ -920,7 +936,11 @@
|
||||
tailscaleOnly: document.getElementById('deploy-tailscale-only').checked,
|
||||
mediaPath: mediaPath || null,
|
||||
plexClaimToken: document.getElementById('deploy-plex-claim')?.value.trim() || null,
|
||||
customVolumes: customVolumes.length > 0 ? customVolumes : null
|
||||
customVolumes: customVolumes.length > 0 ? customVolumes : null,
|
||||
resources: {
|
||||
cpus: parseFloat(document.getElementById('deploy-cpu-limit').value) || 0,
|
||||
memory: parseFloat(document.getElementById('deploy-memory-limit').value) || 0,
|
||||
}
|
||||
};
|
||||
|
||||
// Validate subdomain
|
||||
|
||||
Reference in New Issue
Block a user