622 lines
28 KiB
HTML
622 lines
28 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Admin Guide — Nexus One AI Portal</title>
|
||
<link rel="stylesheet" href="style.css?v=4">
|
||
</head>
|
||
<body data-role="admin">
|
||
|
||
<header class="topnav">
|
||
<a href="index.html" class="brand">Nexus One <span>AI</span></a>
|
||
<nav>
|
||
<a href="index.html">Home</a>
|
||
<a href="quickstart.html">Quick Start</a>
|
||
<a href="prompts.html">Prompt Library</a>
|
||
<a href="usecases.html">Use Cases</a>
|
||
<span class="nav-sep"></span>
|
||
<div class="nav-dropdown">
|
||
<button class="nav-drop-btn">Help ▾</button>
|
||
<div class="nav-drop-menu">
|
||
<span class="nav-drop-cat">LEARN /</span>
|
||
<a href="quickstart.html">Quick Start</a>
|
||
<a href="models.html">Models</a>
|
||
<span class="nav-drop-cat">SUPPORT /</span>
|
||
<a href="troubleshooting.html">Troubleshoot</a>
|
||
<a href="faq.html">FAQ</a>
|
||
<span class="nav-drop-cat">MORE /</span>
|
||
<a href="glossary.html">Glossary</a>
|
||
<a href="whats-new.html">What's New</a>
|
||
</div>
|
||
</div>
|
||
<div class="nav-dropdown">
|
||
<button class="nav-drop-btn active">Admin ▾</button>
|
||
<div class="nav-drop-menu nav-drop-menu-wide">
|
||
<span class="nav-drop-cat">DOCS /</span>
|
||
<a href="security.html">Security & Privacy</a>
|
||
<a href="admin.html" class="active">Admin Guide</a>
|
||
<span class="nav-drop-cat">MONITOR /</span>
|
||
<a href="dashboard.html">Dashboard</a>
|
||
<a href="analytics.html">Usage Analytics</a>
|
||
<a href="audit.html">Audit Log</a>
|
||
<a href="feedback.html">Feedback & Ratings</a>
|
||
<span class="nav-drop-cat">MANAGE /</span>
|
||
<a href="users.html">Users</a>
|
||
<a href="teams.html">Teams</a>
|
||
<a href="models-admin.html">Model Manager</a>
|
||
<a href="training.html">Training</a>
|
||
<a href="knowledge.html">Knowledge Base</a>
|
||
<span class="nav-drop-cat">TOOLS /</span>
|
||
<a href="apikeys.html">API Keys</a>
|
||
<a href="benchmark.html">Benchmarking</a>
|
||
<a href="model-compare.html">Model Compare</a>
|
||
<a href="api-playground.html">API Playground</a>
|
||
<a href="guardrails.html">Guardrails</a>
|
||
<a href="rag-quality.html">RAG Quality</a>
|
||
<a href="router.html">Model Router</a>
|
||
<a href="connectors.html">Connectors</a>
|
||
<span class="nav-drop-cat">SYSTEM /</span>
|
||
<a href="appliance.html">Appliance Ops</a>
|
||
<a href="console.html">Console</a>
|
||
<a href="settings.html">Settings</a>
|
||
</div>
|
||
</div>
|
||
<div class="nav-dropdown">
|
||
<button class="nav-drop-btn">AI Tools ▾</button>
|
||
<div class="nav-drop-menu">
|
||
<span class="nav-drop-cat">INTELLIGENCE /</span>
|
||
<a href="documents.html">Document Intelligence</a>
|
||
<a href="chat-multi.html">Multimodal Chat</a>
|
||
<a href="prompt-studio.html">Prompt Studio</a>
|
||
<a href="meeting.html">Meeting Assistant</a>
|
||
<span class="nav-drop-cat">AUTOMATION /</span>
|
||
<a href="agents.html">Agent Builder</a>
|
||
<a href="schedules.html">Scheduled Jobs</a>
|
||
<a href="workflows.html">Workflow Automation</a>
|
||
<span class="nav-drop-cat">QUALITY /</span>
|
||
<a href="evals.html">AI Eval Suite</a>
|
||
<a href="chatrooms.html">Chat Rooms</a>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
<a href="notifications.html" style="position:relative">🔔</a>
|
||
<span class="badge" data-brand="tier">Basic Tier</span>
|
||
<div id="nav-org-logo" class="nav-org-logo"></div>
|
||
</header>
|
||
|
||
<div class="page-hero">
|
||
<div class="label">Admin Guide</div>
|
||
<h1>System Administration Reference</h1>
|
||
<p>For the person managing the Nexus One AI server. Commands to restart services, manage users, add models, check health, and pull logs — all in one place.</p>
|
||
</div>
|
||
|
||
<div class="content">
|
||
|
||
<div class="notice" style="margin-bottom:32px">
|
||
🔐 <strong>This page is for system administrators only.</strong> All commands below require SSH access to the server. If you're an end user looking for help, visit <a href="troubleshooting.html">Troubleshooting</a> or <a href="faq.html">FAQ</a> instead.
|
||
</div>
|
||
|
||
<!-- QUICK REFERENCE -->
|
||
<div class="section-title">Quick reference — most common admin tasks</div>
|
||
<div class="adm-quick-grid">
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">Restart all services</div>
|
||
<div class="adm-cmd" id="cmd-restart-all">sudo systemctl restart ollama open-webui chromadb jupyter</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-restart-all', this)">Copy</button>
|
||
</div>
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">Check all service status</div>
|
||
<div class="adm-cmd" id="cmd-status-all">sudo systemctl status ollama open-webui chromadb jupyter</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-status-all', this)">Copy</button>
|
||
</div>
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">Check disk space</div>
|
||
<div class="adm-cmd" id="cmd-disk">df -h /</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-disk', this)">Copy</button>
|
||
</div>
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">Check GPU status</div>
|
||
<div class="adm-cmd" id="cmd-gpu">nvidia-smi</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-gpu', this)">Copy</button>
|
||
</div>
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">List installed models</div>
|
||
<div class="adm-cmd" id="cmd-models">ollama list</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-models', this)">Copy</button>
|
||
</div>
|
||
|
||
<div class="adm-quick-card">
|
||
<div class="adm-quick-title">View live system logs</div>
|
||
<div class="adm-cmd" id="cmd-logs">sudo journalctl -f -u ollama -u open-webui</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-logs', this)">Copy</button>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- SERVICE MANAGEMENT -->
|
||
<div class="section-title" id="services">Service management</div>
|
||
<p style="color:var(--med);font-size:14px;margin-bottom:20px">All Nexus One AI services run as systemd units. Replace <code style="background:#F1F5F9;padding:2px 6px;border-radius:4px">SERVICE</code> below with: <code style="background:#F1F5F9;padding:2px 6px;border-radius:4px">ollama</code>, <code style="background:#F1F5F9;padding:2px 6px;border-radius:4px">open-webui</code>, <code style="background:#F1F5F9;padding:2px 6px;border-radius:4px">chromadb</code>, or <code style="background:#F1F5F9;padding:2px 6px;border-radius:4px">jupyter</code>.</p>
|
||
|
||
<div class="adm-section">
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Start a service</div>
|
||
<div class="adm-row-desc">Use when a service is stopped and needs to be brought up.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-start">sudo systemctl start SERVICE</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-start', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Stop a service</div>
|
||
<div class="adm-row-desc">Gracefully stops the service. Active users will be disconnected.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-stop">sudo systemctl stop SERVICE</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-stop', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Restart a service</div>
|
||
<div class="adm-row-desc">Stop then start. Use when a service is misbehaving or after a config change.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-restart">sudo systemctl restart SERVICE</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-restart', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Check service status</div>
|
||
<div class="adm-row-desc">Shows whether the service is running, the last few log lines, and any errors.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-status">sudo systemctl status SERVICE</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-status', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Enable auto-start on boot</div>
|
||
<div class="adm-row-desc">Ensures the service starts automatically if the server is rebooted.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-enable">sudo systemctl enable SERVICE</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-enable', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Restart all Cezen services</div>
|
||
<div class="adm-row-desc">Restart everything at once. Useful after a server update or if multiple services are unresponsive.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-restart-all2">sudo systemctl restart ollama open-webui chromadb jupyter</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-restart-all2', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- SERVICE PORTS -->
|
||
<div class="section-title">Service ports and endpoints</div>
|
||
<div class="adm-ports-wrap">
|
||
<table class="sec-compare">
|
||
<thead>
|
||
<tr>
|
||
<th>Service</th>
|
||
<th>Port</th>
|
||
<th>URL</th>
|
||
<th>Notes</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><strong>Open WebUI</strong></td>
|
||
<td>3000</td>
|
||
<td>http://ai.local:3001</td>
|
||
<td>Main user-facing chat interface</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Ollama API</strong></td>
|
||
<td>11434</td>
|
||
<td>http://ai.local:11434</td>
|
||
<td>Model inference API — do not expose externally</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>ChromaDB</strong></td>
|
||
<td>8000</td>
|
||
<td>http://ai.local:8000</td>
|
||
<td>Vector database API — do not expose externally</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Jupyter</strong></td>
|
||
<td>8888</td>
|
||
<td>http://ai.local:8888</td>
|
||
<td>Notebook server — restrict to developer users only</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>FastAPI</strong></td>
|
||
<td>8080</td>
|
||
<td>http://ai.local:8080</td>
|
||
<td>Custom API layer — if deployed</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<!-- MODEL MANAGEMENT -->
|
||
<div class="section-title" id="models">Model management</div>
|
||
<div class="adm-section">
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">List installed models</div>
|
||
<div class="adm-row-desc">Shows all models currently available on the system with their sizes.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-list">ollama list</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-list', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Pull (install) a new model</div>
|
||
<div class="adm-row-desc">Downloads and installs a model. Examples: <code>llama3.1:8b</code>, <code>mistral:7b</code>, <code>gemma2:9b</code>. Requires the model files to be available on your network or internet (if connected).</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-pull">ollama pull MODEL_NAME</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-pull', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Remove a model</div>
|
||
<div class="adm-row-desc">Deletes a model from disk to free up space. Make sure no users are actively using it.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-rm">ollama rm MODEL_NAME</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-rm', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Show model info</div>
|
||
<div class="adm-row-desc">Displays the model's parameters, context length, and configuration.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-show">ollama show MODEL_NAME</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-show', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Check what's currently loaded in GPU</div>
|
||
<div class="adm-row-desc">Shows running Ollama processes and their VRAM usage.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-ps">ollama ps</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-ps', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Model storage location</div>
|
||
<div class="adm-row-desc">All model files are stored here. Monitor this directory for disk usage.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-modelpath">ls -lh /usr/share/ollama/.ollama/models/</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-modelpath', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- USER MANAGEMENT -->
|
||
<div class="section-title" id="users">User management (Open WebUI)</div>
|
||
<p style="color:var(--med);font-size:14px;margin-bottom:20px">User accounts are managed through the Open WebUI admin panel at <a href="http://ai.local:3001/admin/users" target="_blank" style="color:var(--teal)">http://ai.local:3001/admin/users</a>. Log in with your admin account and use the panel for most user tasks. The commands below are for bulk operations or when the UI is unavailable.</p>
|
||
|
||
<div class="adm-section">
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Open user admin panel</div>
|
||
<div class="adm-row-desc">The primary way to create, disable, and manage user accounts. Open this URL in a browser while connected to the internal network.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-adminurl">http://ai.local:3001/admin/users</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-adminurl', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Open WebUI database location</div>
|
||
<div class="adm-row-desc">User data is stored in a SQLite database at this path. Back this up regularly.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-dbpath">/opt/open-webui/data/webui.db</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-dbpath', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Back up Nexus One AI data</div>
|
||
<div class="adm-row-desc">Creates a local archive of Cezen data, settings, audit logs, and uploaded working files.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-backup">sudo bash /opt/cezen/scripts/cezen-backup.sh backup</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-backup', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- HEALTH & MONITORING -->
|
||
<div class="section-title" id="health">System health & monitoring</div>
|
||
<div class="adm-section">
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">GPU status snapshot</div>
|
||
<div class="adm-row-desc">Shows GPU utilisation, VRAM used/free, temperature, and power draw for all GPUs.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-nvidiasmi">nvidia-smi</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-nvidiasmi', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Live GPU monitor</div>
|
||
<div class="adm-row-desc">Refreshes every second. Good for watching GPU load while a model is running. Press Ctrl+C to exit.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-watch">watch -n1 nvidia-smi</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-watch', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Full GPU health diagnostic</div>
|
||
<div class="adm-row-desc">Runs DCGM's built-in diagnostic suite. Takes ~2 minutes. Red results indicate hardware issues to escalate.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-dcgm">dcgmi diag -r 1</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-dcgm', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Disk space usage</div>
|
||
<div class="adm-row-desc">Check overall disk space. Watch /: models, databases, and logs all grow over time.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-df">df -h</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-df', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Find what's using the most disk space</div>
|
||
<div class="adm-row-desc">Shows the 10 largest directories under /opt — useful when disk space runs low.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-du">sudo du -sh /opt/* | sort -rh | head -10</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-du', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">CPU and memory overview</div>
|
||
<div class="adm-row-desc">Live system resource usage — CPU load, RAM, swap. Press Q to exit.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-htop">htop</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-htop', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Check server uptime</div>
|
||
<div class="adm-row-desc">Shows how long the server has been running and current load averages.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-uptime">uptime</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-uptime', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- LOGS -->
|
||
<div class="section-title" id="logs">Log access</div>
|
||
<div class="adm-section">
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Live logs — all Cezen services</div>
|
||
<div class="adm-row-desc">Streams live log output from Ollama and Open WebUI together. Useful for diagnosing live issues. Press Ctrl+C to exit.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-liveall">sudo journalctl -f -u ollama -u open-webui</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-liveall', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Last 100 lines — Ollama</div>
|
||
<div class="adm-row-desc">Recent Ollama log output. Check here first when models aren't loading or inference is failing.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-ollamalog">sudo journalctl -u ollama -n 100 --no-pager</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-ollamalog', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Last 100 lines — Open WebUI</div>
|
||
<div class="adm-row-desc">Recent Open WebUI log output. Check here when users can't log in or the interface is not loading.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-webuilog">sudo journalctl -u open-webui -n 100 --no-pager</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-webuilog', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Logs since last boot</div>
|
||
<div class="adm-row-desc">All logs from the current boot session — useful after a server restart to check everything came up cleanly.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-bootlog">sudo journalctl -b -u ollama -u open-webui -u chromadb -u jupyter</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-bootlog', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-row">
|
||
<div class="adm-row-label">
|
||
<div class="adm-row-title">Search logs for errors</div>
|
||
<div class="adm-row-desc">Filters log output to show only error-level entries — faster than reading everything.</div>
|
||
</div>
|
||
<div class="adm-row-right">
|
||
<div class="adm-cmd" id="cmd-errors">sudo journalctl -u ollama -u open-webui -p err --no-pager</div>
|
||
<button class="adm-copy" onclick="copyCmd('cmd-errors', this)">Copy</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- COMMON PROCEDURES -->
|
||
<div class="section-title">Common procedures</div>
|
||
|
||
<div class="adm-procedure">
|
||
<div class="adm-proc-title">
|
||
<span class="adm-proc-icon">🔄</span>
|
||
Safe server reboot
|
||
</div>
|
||
<div class="adm-proc-body">
|
||
<p>Before rebooting, notify users and allow active sessions to finish. All systemd services with <code>enabled</code> status will restart automatically on boot.</p>
|
||
<ol class="adm-proc-steps">
|
||
<li>Notify users that the system will restart in 10 minutes</li>
|
||
<li>Wait for active model requests to complete: <span class="adm-inline-cmd" id="proc-1">watch ollama ps</span> <button class="adm-copy-sm" onclick="copyCmd('proc-1',this)">Copy</button></li>
|
||
<li>Reboot the server: <span class="adm-inline-cmd" id="proc-2">sudo reboot</span> <button class="adm-copy-sm" onclick="copyCmd('proc-2',this)">Copy</button></li>
|
||
<li>After reboot, verify all services are running: <span class="adm-inline-cmd" id="proc-3">sudo systemctl status ollama open-webui chromadb jupyter</span> <button class="adm-copy-sm" onclick="copyCmd('proc-3',this)">Copy</button></li>
|
||
<li>Open <a href="http://ai.local:3001" target="_blank">http://ai.local:3001</a> and confirm the chat interface loads</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-procedure">
|
||
<div class="adm-proc-title">
|
||
<span class="adm-proc-icon">🧠</span>
|
||
Adding a new AI model
|
||
</div>
|
||
<div class="adm-proc-body">
|
||
<p>Models are added via the Ollama CLI. On an air-gapped system, copy the model file to the server first.</p>
|
||
<ol class="adm-proc-steps">
|
||
<li>Check available disk space: <span class="adm-inline-cmd" id="proc-4">df -h /</span> <button class="adm-copy-sm" onclick="copyCmd('proc-4',this)">Copy</button> — ensure at least 2× the model size is free</li>
|
||
<li>Pull the model (if internet-connected): <span class="adm-inline-cmd" id="proc-5">ollama pull llama3.1:8b</span> <button class="adm-copy-sm" onclick="copyCmd('proc-5',this)">Copy</button></li>
|
||
<li>For air-gapped install, copy the GGUF file then: <span class="adm-inline-cmd" id="proc-6">ollama create mymodel -f /path/to/Modelfile</span> <button class="adm-copy-sm" onclick="copyCmd('proc-6',this)">Copy</button></li>
|
||
<li>Verify it appears: <span class="adm-inline-cmd" id="proc-7">ollama list</span> <button class="adm-copy-sm" onclick="copyCmd('proc-7',this)">Copy</button></li>
|
||
<li>Test it loads: <span class="adm-inline-cmd" id="proc-8">ollama run MODEL_NAME "Hello"</span> <button class="adm-copy-sm" onclick="copyCmd('proc-8',this)">Copy</button></li>
|
||
<li>The model will appear automatically in Open WebUI's model selector — no restart needed</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-procedure">
|
||
<div class="adm-proc-title">
|
||
<span class="adm-proc-icon">🗑️</span>
|
||
Freeing up disk space
|
||
</div>
|
||
<div class="adm-proc-body">
|
||
<p>Disk space is most commonly consumed by model files, ChromaDB data, and Jupyter notebooks. Check each before deleting anything.</p>
|
||
<ol class="adm-proc-steps">
|
||
<li>Find what's using the most space: <span class="adm-inline-cmd" id="proc-9">sudo du -sh /opt/* | sort -rh | head -10</span> <button class="adm-copy-sm" onclick="copyCmd('proc-9',this)">Copy</button></li>
|
||
<li>List models with sizes: <span class="adm-inline-cmd" id="proc-10">ollama list</span> <button class="adm-copy-sm" onclick="copyCmd('proc-10',this)">Copy</button></li>
|
||
<li>Remove unused models (confirm with users first): <span class="adm-inline-cmd" id="proc-11">ollama rm MODEL_NAME</span> <button class="adm-copy-sm" onclick="copyCmd('proc-11',this)">Copy</button></li>
|
||
<li>Clear old journal logs (keeps last 7 days): <span class="adm-inline-cmd" id="proc-12">sudo journalctl --vacuum-time=7d</span> <button class="adm-copy-sm" onclick="copyCmd('proc-12',this)">Copy</button></li>
|
||
<li>Verify space recovered: <span class="adm-inline-cmd" id="proc-13">df -h /</span> <button class="adm-copy-sm" onclick="copyCmd('proc-13',this)">Copy</button></li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="adm-procedure">
|
||
<div class="adm-proc-title">
|
||
<span class="adm-proc-icon">🔑</span>
|
||
Resetting an admin password (Open WebUI)
|
||
</div>
|
||
<div class="adm-proc-body">
|
||
<p>If the admin password is lost, reset it via the Open WebUI CLI while the service is stopped.</p>
|
||
<ol class="adm-proc-steps">
|
||
<li>Stop Open WebUI: <span class="adm-inline-cmd" id="proc-14">sudo systemctl stop open-webui</span> <button class="adm-copy-sm" onclick="copyCmd('proc-14',this)">Copy</button></li>
|
||
<li>Run the reset command: <span class="adm-inline-cmd" id="proc-15">sudo open-webui reset-admin-password --email admin@example.com --password newpassword</span> <button class="adm-copy-sm" onclick="copyCmd('proc-15',this)">Copy</button></li>
|
||
<li>Restart Open WebUI: <span class="adm-inline-cmd" id="proc-16">sudo systemctl start open-webui</span> <button class="adm-copy-sm" onclick="copyCmd('proc-16',this)">Copy</button></li>
|
||
<li>Log in with the new password and immediately change it to something secure</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ESCALATION -->
|
||
<div class="sec-contact" style="margin-top:48px">
|
||
<div class="sec-contact-icon">📞</div>
|
||
<h3>Need Cezen support?</h3>
|
||
<p>For hardware issues, system-level failures, or anything beyond this guide, contact Cezen. Include: the service name, the error from <code style="color:#0F766E">journalctl</code>, and the output of <code style="color:#0F766E">nvidia-smi</code> and <code style="color:#0F766E">df -h</code>.</p>
|
||
<a href="mailto:support@cezentech.com" class="btn-primary" style="display:inline-block;margin-top:16px;text-decoration:none">Email Cezen Support</a>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<footer>
|
||
<p>Nexus One AI · Powered by Cezen · Basic Tier</p>
|
||
<p>Questions? <a href="mailto:support@cezentech.com">support@cezentech.com</a> · <a href="https://cezentech.com" target="_blank">cezentech.com</a></p>
|
||
</footer>
|
||
|
||
<script>
|
||
function copyCmd(id, btn) {
|
||
const text = document.getElementById(id).textContent.trim();
|
||
navigator.clipboard.writeText(text).then(() => {
|
||
const orig = btn.textContent;
|
||
btn.textContent = '✓';
|
||
btn.classList.add('copied');
|
||
setTimeout(() => { btn.textContent = orig; btn.classList.remove('copied'); }, 2000);
|
||
});
|
||
}
|
||
</script>
|
||
|
||
<script src="auth.js"></script>
|
||
<script src="branding.js"></script>
|
||
</body>
|
||
</html>
|