Ranger12/NebulaOS
Nebula ๐
A production-grade, browser-based container management panel for self-hosted Ubuntu environments. Runs in a single Docker container with a dual-mode init:
- ๐ข systemd as PID 1 when the container has
--privileged+/sys/fs/cgroup. Tools that require systemd (x-ui, real.serviceunits,journalctl, etc.) work fully. - ๐ก s6-overlay + systemctl shim when running unprivileged (Hugging Face Spaces, plain
docker run). The shim translatessystemctl start/stop/restart/status/enable/...calls so most tools that opportunistically use systemctl keep working. Tools that need a real D-Bus connection won't, but the panel itself is fully functional.
The entrypoint auto-detects the environment and picks the right init on every boot โ you don't have to configure anything.
Open port 7860 and get:
- Real interactive terminal with persistent sessions (15-min reattach), tabs, search, zoom, copy/paste
- Services manager with live log tailing
- Files browser with inline editor + drag-and-drop upload
- Env vars with secrets masking
- Proxy rules to expose internal services on sub-paths (e.g.
/n8n) - Rich Monitor dashboard โ per-core CPU, memory breakdown, swap, disk, network throughput
- Process list with kill action
- shadcn/ui design system, dark/light themes, 6 accent colors, Three.js animated background
Quick start (local Docker)
docker build -t nebula .
docker run -d \
--name nebula \
--privileged \
--tmpfs /tmp --tmpfs /run --tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-p 7860:7860 \
-v nebula-data:/data \
-v nebula-logs:/var/log/nebula \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=changeme \
-e PUBLIC_URL=https://your.domain.com \
nebulaThen visit <http://localhost:7860>. Default credentials: admin / admin (forced change on first login).
The --privileged flag and /sys/fs/cgroup mount are required for systemd to function correctly inside the container.
Hugging Face Spaces
Push this repo as a Docker Space. The frontmatter above declares sdk: docker and app_port: 7860. The container auto-detects the unprivileged Spaces sandbox and switches to s6-overlay automatically โ no Space-side configuration required. systemctl calls from user-installed tools are intercepted by the shim.
Caveat: tools that need a working D-Bus + cgroup hierarchy (full systemd internals) won't work on HF Spaces. The panel itself, pm2, plain background processes, npm/pip installed binaries, and Docker CLI all work fine. For full systemd (x-ui's journalctl integration, real .service units with dependencies, etc.) use a VPS with --privileged.
Environment variables
Stack
License
MIT
