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:
- Regenerated SSH key at
/home/node/.ssh/vps_key - Added new public key to VPS authorized_keys
- 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
- Access web UI at
http://new-host:18789 - Reconfigure OpenClaw (Telegram, channels, etc.)
- 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 hotmodifies 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
- Created IT Documents blog at https://898998.xyz/blog/
- Notion-style theme with search, categories, TOC
- 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