Systemic clobber: the scaffold boilerplate (install -d -m 750 /var/lib/secubox, /run/secubox) put restrictive modes on SHARED parents in ~56 module postinsts, reverting them to 0750 on every install/upgrade and breaking traversal for non-secubox daemons (kbin/toolbox 500). Empirically confirmed install -d -m only modes the final component, so /parent/leaf forms are harmless — only bare-parent targets were rewritten. Multi-arg lines (incl. ones making /var/lib world-writable 1777) split per-parent: /run/secubox=1777 root:root, /var/lib|cache|etc=0755 secubox:secubox; module-private leaves keep 0750. Scaffold + PATTERNS.md fixed so new packages don't reintroduce it. |
||
|---|---|---|
| .. | ||
| api | ||
| config | ||
| debian | ||
| menu.d | ||
| nginx | ||
| sbin | ||
| sudoers.d | ||
| www/streamlit | ||
| README.md | ||
🎨 Streamlit
Streamlit app platform
Category: Apps
Screenshot
Features
- App hosting
- Deployment
- Management
- Logs
Installation
# Add SecuBox repository
curl -fsSL https://apt.secubox.in/install.sh | sudo bash
# Install package
sudo apt install secubox-streamlit
Configuration
Configuration file: /etc/secubox/streamlit.toml
API Endpoints
GET /api/v1/streamlit/status- Module statusGET /api/v1/streamlit/health- Health checkGET /api/v1/streamlit/apps- Per-app list, enriched withcurrent_taganddeployed_at(read from<app>/.deploy.jsonor fallbackgit describe --tags --exact-match)
Version pinning via Gitea
The 28 directory-form Streamlit apps under /srv/streamlit/apps/ are
mirrored in Gitea as gandalf/streamlit-<appname>, each with a v1.0.0
tag on the initial state.
Deploy a specific version:
sudo streamlitctl deploy <app> --from-gitea --tag v1.0.0
Rollback to the most recent backup:
sudo streamlitctl rollback <app>
After a deploy, /srv/streamlit/apps/<app>/.deploy.json records the
current tag and deployment timestamp. The FastAPI surfaces them via
current_tag and deployed_at on /api/v1/streamlit/apps.
To re-run the ingest (or pick up newly added apps):
bash scripts/streamlit-ingest.sh # all apps
bash scripts/streamlit-ingest.sh --dry-run # preview
bash scripts/streamlit-ingest.sh --app <name> # single app
bash scripts/streamlit-ingest.sh --halt-on-fail # stop on first failure
The deploy/rollback path does not auto-restart the LXC — streamlitctl start/stop operate on the whole container, which would kill all other
running apps. Streamlit auto-reloads on file changes in the watched app
directory.
License
MIT License - CyberMind © 2024-2026
