Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
보안 중심 Rust 코어로 nginx·FPM·DB·TLS·WordPress를 한 번에 배포하고 VPS 군에서도 자동 확장합니다
A small, security-first Rust core that provisions nginx + FPM + database + TLS + WordPress in one atomic transaction — and scales across a fleet of VPSes out of the box.
개발 도구Rust · HTMLGitHub @nechodom온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Rust hosting control panel for Debian. Multi-node clustering, kernel-enforced quotas, tamper-evident audit log, and live progress bars on every operation. The Cloudpanel / HestiaCP alternative that doesn't shell-template PHP at root.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A self-hosted, multi-node hosting control panel for Debian, written in Rust.
One agent on each server, one web UI on the master. Hyperion provisions PHP, static and reverse-proxy sites end to end (Linux user, nginx vhost, PHP-FPM pool, database, TLS, WordPress) in one transaction that rolls back if any step fails. On top of that it runs the day-to-day work of a small hosting business: backups and off-site copies, WordPress updates and repairs, a per-site WAF and firewall, monitoring, paid care plans with monthly customer reports, and imports from HestiaCP and CloudPanel. You drive it from one screen, a scriptable HTTP API, or a CLI.
Install · Documentation · Features · Remote API · Import · Architecture · Status
[!NOTE] Running in production. Hyperion serves real customer sites on two production deployments. It is still a young project: it has not been tried on a large fleet, and the multi-node path has seen less traffic than the single-node one. Keep backups and report anything that breaks.
| Dashboard | Cluster stats |
|---|---|
| What needs attention, load, live network throughput, recent backups and activity. | Cluster and per-node metrics, per-site CPU / RAM / disk / traffic, a realtime network graph. |
| Hostings | Site detail |
|---|---|
| Every site in the cluster with its state, PHP, node and a needs-attention filter; bulk actions. | One site: health, HTTPS, backups, uptime, security, WordPress and database in tabs. |
Most open-source panels are PHP wrappers around templated shell: thousands of lines of string-built commands running as root, where a domain with an odd character can turn a config write into unintended shell. Hyperion does the same job from a Rust core where every system command is built from typed, pre-validated arguments and never passed through a shell. It also manages several servers from the start.
| HestiaCP / Vesta / aaPanel | Hyperion | |
|---|---|---|
| Memory-safe language | PHP + bash | Rust, #![forbid(unsafe_code)] |
| Multi-node cluster | single node | master + N workers, signed RPC |
| Atomic provisioning | partial | rollback on every step |
| Scriptable HTTP API (OpenAPI) + CLI | partial / unofficial | /api/v1 + hctl |
| Live progress for long operations | — | background job page with sub-steps |
| Tamper-evident audit log | — | BLAKE3 hash chain |
| Off-site backups | FTP | S3 (age-encrypted) + FTP/FTPS/SFTP, restic snapshots |
| Import from HestiaCP / CloudPanel | — | in place, over SSH, or from an exporter |
| Import a WordPress site from any host | — | plugin and a pasted code, no SSH needed |
On a fresh Debian 12 or 13 server, as root:
curl -fsSL https://raw.githubusercontent.com/nechodom/hyperion/main/packaging/install/install-master.sh | sudo bash
This pipes a script into root, so read it first. The installer asks no
questions. It checks that ports 80, 443 and 8443 are free, installs nginx,
postfix and a few base tools, downloads the pre-built release binaries (checked
against SHA256SUMS; it builds from source on non-x86_64 or if the download
fails), writes /etc/hyperion/*.toml and the systemd units, and prints a
one-time setup link with a setup code and the certificate fingerprint.
The link opens a setup wizard in the browser that walks through:
For automation, set HYPERION_ADMIN_PASS (and optionally
HYPERION_COMPONENTS) and the installer does everything itself without the
wizard. Re-running the script is safe.
Worker node. In the UI, open Nodes → Generate invite and paste the printed one-liner on another Debian server. It enrolls in about 30 seconds and appears on the Nodes page; from then on you create hostings on it from the master.
Update. Run sudo hyperion update, or use the Nodes page. The update waits
for running jobs (backups, imports, installs) to finish first, rolls back
automatically if the new build doesn't come up, and only re-installs the
components this server actually uses. While the panel restarts, its address
shows an "updating…" page that returns to the panel by itself. Auto-update is
available as an opt-in.
docs/RUNBOOK.md has every installer variable, manual
deploys and recovery steps.
The Hyperion manual takes you from a fresh install to sites that are running and backed up:
.git is never served.wp-cli: bulk
updates, per-plugin auto-update, and a library of plugin and theme zips that
profiles install on new sites.hctl carry the same verdict, and repair of core files
and reinstall of tampered plugins start from the findings. The new checks run
as a silent pilot until [integrity] new_layers_live is switched on. That
flag is per node: set it in each node's own agent.toml (the settings sync
doesn't carry [integrity]).WP_DEBUG switch, admin password reset, a sign-up spam
guard, and a mail self-repair that sends WordPress mail through the local
server when delivery keeps failing.age encryption, several targets with
their own retention) or FTP / FTPS / SFTP with keep-newest. The local copy can
be dropped once the off-site copy is verified, and restored from off-site
later..tar.gz to restore.#![forbid(unsafe_code)] in every crate, Argon2id passwords, Ed25519-signed
session cookies with a revocation ledger, and roles re-checked on every
request, so a demoted or locked user loses access at once.nftables ban sets for the panel, SSH,
FTP, mail and WordPress logins, with escalation for repeat offenders.For agencies that sell maintenance:
A scriptable HTTP API at /api/v1 for provisioning and running the cluster from
CI, cron or your own tools.
GET /api/v1/openapi.json is a generated OpenAPI 3 document;
GET /api/v1/docs shows it in a self-hosted viewer.202 {job_id}, which
you poll at /api/v1/jobs/:id; errors come as a JSON envelope.hctl remote is the official CLI for that API:
hctl remote --url https://panel.example.com --key hyp_… login
hctl remote list --state active | jq '.items[].domain'
hctl remote create --domain new.example.com --php 8.3
hctl remote backup new.example.com --wait
On the node itself, hctl talks to the local agent over its Unix socket, so
it keeps working when the panel is down or you are locked out of it: hostings,
backups, certificates, WordPress, users (hctl user unlock,
hctl user disable-2fa), bans, the firewall escape hatch and node updates.
Every command is listed with examples in the CLI reference.
Move existing sites off HestiaCP or CloudPanel, off any host running WordPress, or between two Hyperion servers. The Import page (admin) has four ways in:
Hyperion reads the source panel's own state (Hestia *.conf, CloudPanel's
SQLite) rather than scraping it. You pick the sites, their PHP version, profile
and a new domain if needed; a dry run shows what would be created, skipped or
in conflict, and an existing domain is never overwritten. Sites and databases
come across, including WordPress with wp-config.php repointed. Mail and DNS
are listed in the report but not migrated.
Two processes per server:
hyperion-agent runs as root and owns all system state: users,
directories, nginx vhosts, FPM pools, databases, certificates, FTP, cron,
backups, firewall. It listens on a local Unix socket and, on workers, on
:9443 for signed RPC from the master.hyperion-web (master only) serves the UI and /api/v1. It runs
unprivileged and owns the audit log, web users, session ledger, node registry
and the Ed25519 master signing key. web browser (cookie) API client (Bearer hyp_…)
│ │
▼ ▼
┌──────────────────────────────────────────────┐
│ hyperion-web (master only) │
│ axum + Askama + HTMX · /api/v1 (OpenAPI) │
└────┬─────────────────────────┬───────────────┘
│ local Unix socket │ signed RPC / HTTPS
▼ ▼
┌────────────────┐ ┌────────────────┐
│ hyperion-agent │ │ hyperion-agent │
│ (master) │ │ (each worker) │
│ HostingService│ ··· │ HostingService│
│ SQLite state │ │ SQLite state │
│ adapters: │ │ adapters: │
│ fs users nginx│ │ fs users nginx│
│ php db acme │ │ php db acme │
│ wp ftp backup │ │ wp ftp backup │
└────────────────┘ └────────────────┘
Every adapter takes typed, pre-validated arguments and runs commands only
through Command::new(..).arg(..), never format!() into a shell. RPC messages
are Ed25519-signed canonical JSON over HTTPS, and node responses are
authenticated too.
crates/
hyperion-types/ newtype IDs + DTOs (no I/O)
hyperion-validate/ domain + system-user parsers
hyperion-rpc[-server/-client]/ trait, wire types, codec, transport
hyperion-state/ SQLite, migrations, audit chain, api keys
hyperion-adapters/ system-tool wrappers (nginx/php/db/acme/ftp/…)
hyperion-core/ orchestration + secrets + RealAdapter
hyperion-import/ HestiaCP / CloudPanel importers
hyperion-auth/ Argon2id + Ed25519 sessions + CSRF
bin/
hyperion-agent/ privileged daemon + background scheduler
hyperion-web/ axum admin UI + /api/v1 + setup wizard
hyperion-export/ static-musl exporter served by the Import page
hctl/ CLI (local socket + remote HTTP)
packaging/install/ install-master.sh · install-node.sh · update.sh
In production. Two live deployments run real customer sites, and every change goes through CI (format, clippy, the full test suite, a release build, template and script lints) before it ships. It is not yet proven on a large fleet, and multi-node has had less real traffic than single-node, so feedback from bigger installs is the most useful contribution.
Roadmap: HA control plane (warm standby + state replication) · SSO / OIDC login.
git clone https://github.com/nechodom/hyperion && cd hyperion
cargo build --release --workspace # → target/release/{hyperion-agent,hyperion-web,hctl}
cargo test --workspace # ~2,500 tests
cargo clippy --workspace --all-targets # clean under -D warnings
Integration tests that need a real Debian (useradd, mariadb-dump,
systemctl reload nginx) are #[ignore]d; run them on a node with
cargo test --workspace -- --ignored. bin/hyperion-web/tests/web_e2e.rs
drives the whole stack (login, CSRF, hosting create, the API) against a real
socket-backed agent with mocked adapters, and tests/devserver.rs starts a
local panel with demo data for UI work.
A new system effect follows one path: adapter (typed args, no shell
interpolation) → mockable AdapterPort method → orchestration in
HostingService with a LIFO rollback step → RPC variant and handler → CLI / UI
/ API surface → tests at every layer. Multi-node handlers never touch the local
socket directly; they go through dispatcher::dispatch_to_node.
Each binary stamps its version from git describe at build time, so
--version names the exact commit. Cut a release with
git tag vX.Y.Z && git push --tags; CI builds a named GitHub release, and a
rolling release follows every push to main.
AGPL-3.0-only. Built as an open-source alternative to CloudPanel, HestiaCP and Plesk: Rust instead of templated PHP, multi-node and API-driven from the start. For commercial use or to fund a feature, get in touch.
Built in Czechia by @nechodom. Contributions and bug reports welcome.