diff --git a/SYSTEMD-SETUP.md b/SYSTEMD-SETUP.md new file mode 100644 index 0000000..9e0ac67 --- /dev/null +++ b/SYSTEMD-SETUP.md @@ -0,0 +1,154 @@ +# Auto-Start Obsidian with Systemd + +Ensures Obsidian starts automatically on boot and stays running. + +## Installation + +### 1. Install Required Packages +```bash +sudo apt update +sudo apt install -y xvfb xvfb-run +``` + +### 2. Copy Service Files +```bash +sudo cp /workspace/second-brain/obsidian.service /etc/systemd/system/ +sudo cp /workspace/second-brain/obsidian-mcp.service /etc/systemd/system/ +``` + +### 3. Reload Systemd +```bash +sudo systemctl daemon-reload +``` + +### 4. Enable Services +```bash +# Enable Obsidian to start on boot +sudo systemctl enable obsidian.service + +# Enable MCP server (optional, but recommended) +sudo systemctl enable obsidian-mcp.service +``` + +### 5. Start Services +```bash +# Start both services +sudo systemctl start obsidian.service +sudo systemctl start obsidian-mcp.service + +# Check status +sudo systemctl status obsidian.service +sudo systemctl status obsidian-mcp.service +``` + +--- + +## Managing Services + +### View Logs +```bash +# Real-time Obsidian logs +sudo journalctl -fu obsidian.service + +# Real-time MCP server logs +sudo journalctl -fu obsidian-mcp.service + +# Last 50 lines +sudo journalctl -n 50 -u obsidian.service +``` + +### Stop/Restart +```bash +sudo systemctl stop obsidian.service +sudo systemctl restart obsidian.service +sudo systemctl restart obsidian-mcp.service +``` + +### Check Auto-Start +```bash +# List enabled services +systemctl list-unit-files | grep obsidian + +# Should show "enabled" for both +``` + +--- + +## Service Configuration + +### obsidian.service +- **Type:** simple +- **User:** intense +- **Display:** Virtual Xvfb (:99) +- **Restart:** Always (if crashes, restarts in 15s) +- **Memory Limit:** 2GB +- **CPU Quota:** 80% + +### obsidian-mcp.service +- **Depends on:** obsidian.service +- **Type:** simple +- **Restart:** Always +- **Memory Limit:** 512MB +- **Health Check:** Verifies API is reachable on startup + +--- + +## Troubleshooting + +### Obsidian won't start +```bash +sudo journalctl -u obsidian.service -n 50 --no-pager +``` + +### MCP server failing +```bash +# Make sure .env has valid API key +cat /workspace/second-brain/.env | grep OBSIDIAN_API_KEY +``` + +### Can't connect to Obsidian +```bash +# Check if Obsidian is running +ps aux | grep obsidian + +# Check virtual display +ps aux | grep Xvfb + +# Manual test +DISPLAY=:99 xdpyinfo +``` + +### Port already in use +```bash +# Check who's using port 27123 +sudo lsof -i :27123 +``` + +--- + +## Alternative: Supervisor + +If systemd doesn't work, use supervisord: + +```bash +sudo apt install supervisor + +cat > /etc/supervisor/conf.d/obsidian.conf << 'EOF' +[program:obsidian] +command=/home/intense/.local/bin/obsidian --no-sandbox +user=intense +autostart=true +autorestart=true +redirect_stderr=true +stdout_logfile=/var/log/obsidian.log +environment=DISPLAY=:99 +EOF + +sudo supervisorctl reread +sudo supervisorctl update +sudo supervisorctl start obsidian +``` + +--- + +Created: 2026-04-26 diff --git a/install-systemd.sh b/install-systemd.sh new file mode 100755 index 0000000..1193bd0 --- /dev/null +++ b/install-systemd.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Install Obsidian and MCP systemd services +# Run with sudo: sudo bash install-systemd.sh + +set -e + +echo "📦 Installing Obsidian systemd services..." + +# Check if running as root +if [ "$EUID" -ne 0 ]; then + echo "❌ This script must be run with sudo" + exit 1 +fi + +# Install dependencies +echo "Installing dependencies..." +apt-get update -qq +apt-get install -y -qq xvfb xvfb-run + +# Copy service files +echo "Installing systemd services..." +cp obsidian.service /etc/systemd/system/obsidian.service +cp obsidian-mcp.service /etc/systemd/system/obsidian-mcp.service + +# Fix permissions +chmod 644 /etc/systemd/system/obsidian.service +chmod 644 /etc/systemd/system/obsidian-mcp.service + +# Reload systemd +echo "Reloading systemd..." +systemctl daemon-reload + +# Enable services +echo "Enabling services..." +systemctl enable obsidian.service +systemctl enable obsidian-mcp.service + +echo "" +echo "✅ Systemd services installed!" +echo "" +echo "Next steps:" +echo "1. Configure .env with your Obsidian API key" +echo "2. Start services: sudo systemctl start obsidian.service" +echo "3. View logs: sudo journalctl -fu obsidian.service" +echo "" +echo "For more info, see SYSTEMD-SETUP.md" diff --git a/obsidian-mcp.service b/obsidian-mcp.service new file mode 100644 index 0000000..1365424 --- /dev/null +++ b/obsidian-mcp.service @@ -0,0 +1,36 @@ +[Unit] +Description=Obsidian MCP Server +After=obsidian.service network.target +Documentation=https://github.com/cyanheads/obsidian-mcp-server + +[Service] +Type=simple +User=intense +WorkingDirectory=/workspace/second-brain + +# Load environment +EnvironmentFile=/workspace/second-brain/.env + +# Start MCP server +ExecStart=/usr/bin/npx obsidian-mcp-server + +# Health check - restart if API is unavailable +ExecStartPost=/usr/bin/sh -c 'sleep 5 && curl -s -f -H "Authorization: Bearer ${OBSIDIAN_API_KEY}" http://127.0.0.1:27123/ || exit 1' + +# Restart policy +Restart=always +RestartSec=10 +StartLimitInterval=300 +StartLimitBurst=5 + +# Resource limits +MemoryLimit=512M +CPUQuota=50% + +# Logging +StandardOutput=journal +StandardError=journal +SyslogIdentifier=obsidian-mcp + +[Install] +WantedBy=multi-user.target diff --git a/obsidian.service b/obsidian.service new file mode 100644 index 0000000..8993caf --- /dev/null +++ b/obsidian.service @@ -0,0 +1,38 @@ +[Unit] +Description=Obsidian Vault Server with MCP +After=network.target +Documentation=file:///workspace/second-brain/SETUP.md + +[Service] +Type=simple +User=intense +Home=/home/intense +WorkingDirectory=/workspace/second-brain + +# For headless: use Xvfb virtual display +Environment="DISPLAY=:99" + +# Start Xvfb first, then Obsidian +ExecStartPre=/usr/bin/sh -c "Xvfb :99 -screen 0 1024x768x24 &" +ExecStart=/home/intense/.local/bin/obsidian --no-sandbox + +# Restart policy +Restart=always +RestartSec=15 +StartLimitInterval=300 +StartLimitBurst=3 + +# Resource limits +MemoryLimit=2G +CPUQuota=80% + +# Logging +StandardOutput=journal +StandardError=journal +SyslogIdentifier=obsidian + +# Stop timeout +TimeoutStopSec=30 + +[Install] +WantedBy=multi-user.target