6.3 KiB
6.3 KiB
Metabolizer Blog Pipeline
A full CMS pipeline integrating Gitea, Streamlit, and HexoJS for SecuBox OpenWrt.
┌─────────────────────────────────────────────────────────────────────────┐
│ METABOLIZER PIPELINE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ GITEA │───►│ STREAMLIT │───►│ HEXOJS │───► PORTAL │
│ │ Storage │ │ CMS App │ │ Generator │ (static) │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ Clone from Edit posts clean → │
│ GitHub URL + media generate → │
│ publish │
└─────────────────────────────────────────────────────────────────────────┘
Features
- Gitea Integration - Mirror GitHub repos, store blog content locally
- Streamlit CMS - Web-based markdown editor with live preview
- HexoJS Generator - Static site generation with cyberpunk theme
- Webhook Automation - Auto-rebuild on git push
- Portal Access - Static blog served at
/blog/
Installation
opkg install secubox-app-metabolizer
metabolizerctl install
Dependencies
secubox-app-gitea- Git repository serversecubox-app-streamlit- Streamlit application serversecubox-app-hexojs- Static site generatorrsync- File synchronizationgit- Version control
Quick Start
1. Install the Pipeline
metabolizerctl install
This will:
- Create
blog-contentrepo in Gitea - Deploy CMS app to Streamlit
- Configure webhooks for auto-rebuild
2. Mirror from GitHub (Optional)
metabolizerctl mirror https://github.com/user/my-blog.git
3. Access the CMS
Open http://<router-ip>:8501 in your browser.
4. View Your Blog
Navigate to http://<router-ip>/blog/
Commands
| Command | Description |
|---|---|
metabolizerctl install |
Setup repos, webhooks, deploy CMS |
metabolizerctl uninstall |
Remove metabolizer setup |
metabolizerctl status |
Show pipeline status (JSON) |
metabolizerctl mirror <url> |
Clone GitHub repo to Gitea |
metabolizerctl sync |
Pull latest from all repos |
metabolizerctl build |
Run Hexo clean → generate → publish |
metabolizerctl publish |
Copy static site to portal |
metabolizerctl cms deploy |
Deploy CMS app to Streamlit |
metabolizerctl cms update |
Pull and restart CMS |
CMS Pages
Editor (/pages/1_editor.py)
Two-column markdown editor with:
- Live preview
- YAML front matter editor (title, date, categories, tags)
- Save as draft or publish directly
- Trigger Hexo build from UI
Posts (/pages/2_posts.py)
Manage your content:
- View published posts and drafts
- Edit, delete, publish/unpublish
- Sync from Git
- Rebuild blog
Media (/pages/3_media.py)
Media library:
- Drag-and-drop image upload
- Gallery view with thumbnails
- Copy markdown code for embedding
- Auto-sync to blog
Settings (/pages/4_settings.py)
Pipeline controls:
- Service status (Gitea, Streamlit, HexoJS)
- Git operations (pull, status, mirror)
- Build pipeline (clean, generate, publish)
- Portal configuration
Configuration
UCI config at /etc/config/metabolizer:
config metabolizer 'main'
option enabled '1'
option gitea_url 'http://127.0.0.1:3000'
option webhook_port '8088'
config content 'content'
option repo_name 'blog-content'
option repo_path '/srv/metabolizer/content'
config hexo 'hexo'
option source_path '/srv/hexojs/site/source/_posts'
option public_path '/srv/hexojs/site/public'
option portal_path '/www/blog'
option auto_publish '1'
config portal 'portal'
option enabled '1'
option url_path '/blog'
Data Flow
1. Author writes post in Streamlit CMS
│
▼
2. CMS commits + pushes to Gitea
│
▼
3. Gitea webhook triggers metabolizer-webhook
│
▼
4. Webhook runs: sync → build → publish
│
├─► git pull content repo
├─► rsync posts to Hexo source
├─► hexoctl clean
├─► hexoctl generate
└─► rsync public/ to /www/blog/
│
▼
5. Blog accessible at http://router/blog/
Directory Structure
/srv/metabolizer/
├── content/ # Blog content git repo
│ ├── _posts/ # Published markdown files
│ ├── _drafts/ # Draft posts
│ └── images/ # Media files
/srv/hexojs/site/
├── source/_posts/ # Hexo source (synced from content)
└── public/ # Generated static site
/www/blog/ # Portal static files (published)
Webhook Integration
The webhook listener runs on port 8088 (configurable) and handles:
- Content repo push → Sync + Build + Publish
- CMS repo push → Update Streamlit app
Webhook URL: http://<router-ip>:8088/webhook
Troubleshooting
Check service status
metabolizerctl status
View logs
logread | grep metabolizer
Manual rebuild
metabolizerctl sync
metabolizerctl build
Reset pipeline
metabolizerctl uninstall
metabolizerctl install
License
MIT License - CyberMind Studio