2026-04-10 Daily Tasks Summary

Overview

Daily tasks and achievements on 2026-04-10.

VPS Infrastructure

SSH Access Restored

Problem: VPS SSH key auth failing, couldn't access blog-vps

Solution:

  1. Regenerated SSH key at /home/node/.ssh/vps_key
  2. Added new public key to VPS authorized_keys
  3. Verified connection works
ssh -i /home/node/.ssh/vps_key root@blog-vps

Sites Status

Site URL Status
Quantum Finance /findash/ βœ… HTTP 200
Star Office /homeforcat/ βœ… HTTP 200
IT Documents /blog/ βœ… Live

homeforcat Bug Fixed

Problem: State frozen at "syncing" since March 24 (17 days!)

Solution:

echo '{"state":"idle","detail":"εΎ…ε‘½δΈ­","updated_at":"2026-04-10T11:25:00"}' > /root/Star-Office-UI/state.json

System Optimization

Swap Expansion

Before: 949MB total (zram only)

After: 3.9GB total

# Added 2GB swapfile + 1GB swapfile2
dd if=/dev/zero of=/swapfile bs=1M count=2048 \
chmod 600 /swapfile \
mkswap /swapfile \
swapon /swapfile

Storage Benchmark

Metric Result
Write (dd) 629 MB/s
Sequential Read 10.6 GB/s
Random 4K 98 MB/s

Docker Migration (OpenClaw)

Migration Overview

Complete workflow for migrating OpenClaw from old host to new host:

Old Host                          New Host
--------                          --------
1. docker save image          β†’  5. docker load image
2. tar volume backup          β†’  6. docker compose up -d
3. scp to new host           β†’  7. restore volume
4.                          β†’  8. reconfigure via UI :18789

Step 1: On OLD Host - Save Image

# Save the working OpenClaw image
docker save ghcr.io/openclaw/openclaw:latest -o openclaw_image_backup.tar \
# Verify
ls -lh openclaw_image_backup.tar

Step 2: On OLD Host - Backup Volume

# Backup openclaw_data volume (contains OpenCLI packages)
docker run --rm \
  -v openclaw_data:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/openclaw_data.tar.gz \
  -C /data . \
  --exclude="./node_modules/.cache" \
# Also backup chromium_config volume if exists
docker run --rm \
  -v chromium_config:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/chromium_config.tar.gz -C /data .

Step 3: On OLD Host - Copy to New Host

scp openclaw_image_backup.tar openclaw_data.tar.gz user@new-host:/

Step 4: On NEW Host - Load Image

# Load the image
docker load -i openclaw_image_backup.tar \
# Verify
docker images | grep openclaw

Step 5: On NEW Host - Start Containers

# Stop if running
docker compose down \
# Start fresh with loaded image
docker compose up -d \
# Check status
docker ps

Step 6: On NEW Host - Restore Volume

# Restore openclaw_data
docker run --rm \
  -v openclaw_data:/data \
  -v $(pwd):/backup \
  alpine \
  tar xzf /backup/openclaw_data.tar.gz -C /data \
# Restore chromium_config if needed
docker run --rm \
  -v chromium_config:/data \
  -v $(pwd):/backup \
  alpine \
  tar xzf /backup/chromium_config.tar.gz -C /data

Step 7: On NEW Host - Reconfigure OpenClaw

  1. Access web UI at http://new-host:18789
  2. Reconfigure OpenClaw (Telegram, channels, etc.)
  3. Save config

Step 8: Verify Everything Works

# Test OpenCLI
docker exec openclaw_main node /home/node/.openclaw/.npm-global/node_modules/@jackwener/opencli/dist/src/main.js bilibili hot \
# Should show hot content from bilibili

What is Preserved vs Reset

Data Location Status
OpenCLI packages openclaw_data volume βœ… Preserved
chromium_config chromium_config volume βœ… Preserved
Workspace files ./workspace βœ… Preserved
Skills, memory ./workspace βœ… Preserved
OpenClaw config openclaw.json ❌ Resets - reconfigure via UI

Key Insights

  • OpenCLI is installed in volume, NOT baked into image
  • docker exec ... bilibili hot modifies volume data
  • Volume persistence handles OpenCLI automatically
  • Only openclaw.json (OpenClaw config) needs reconfiguration
  • No need for custom image build - standard image + volume works

Backup Strategy (Restic)

Why Restic: Deduplication = only stores unique chunks. 9GB can hold months of daily backups.

Setup

# Install
sudo apt install restic \
# Initialize repo on Google Drive (one-time)
restic -r rclone:gdrive:openclaw-backups init \
# Backup (simple)
restic -r rclone:gdrive:openclaw-backups backup /home/node/.openclaw/workspace \
# Restore (easy)
restic -r rclone:gdrive:openclaw-backups restore latest --target /tmp/restore

Retention Policy

restic forget -r rclone:gdrive:openclaw-backups \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune

Daily Backup Script

#!/bin/bash
# /opt/backup-openclaw.sh
export RESTIC_PASSWORD="your-strong-password" \
restic -r rclone:gdrive:openclaw-backups backup /home/node/.openclaw/workspace \
restic forget -r rclone:gdrive:openclaw-backups --keep-daily 7 --prune

Why Restic over tar:

  • Deduplication: same files across backups = nearly zero extra space
  • Compression: automatic
  • Encryption: built-in
  • Retention: automatic cleanup of old backups

Blog Setup

/blog/ Created

  1. Created IT Documents blog at https://898998.xyz/blog/
  2. Notion-style theme with search, categories, TOC
  3. Admin panel at port 3847

Admin Login: cat / blog2026

Tech Stack

  • Sandbox: Node.js Express app (port 3847)
  • VPS: Static HTML + Caddy
  • Format: Markdown β†’ HTML

Market Data

Finnhub API Active

Symbol Price Change
SPY $679.91 +0.58%
QQQ $610.19 +0.68%
WTI Oil $86.04 +0.57%

Notes

  • User prefers concise answers
  • First session was lost/reset - fresh start
  • VPS has only 1GB RAM - can't run Halo CMS
  • Blog replaces halo.gocat.top style documentation