The First Question Every New User Asks#
When someone downloads Salieno Core for the first time, the first thing they notice isn't the control panel, the billing module, or the containerized PHP runtime. It's the installer. Or rather, the lack of a graphical one.
There's no web-based setup wizard. No progress bar with rounded corners. No "click next to continue" screens. Instead, you run a single binary from the command line, answer a handful of prompts (or pass a config file), and the system is deployed.
For hosting resellers coming from cPanel or Plesk, this feels unfamiliar. Those platforms have invested heavily in graphical installers that make the process feel approachable. So why did we go the other direction?
The Architectural Problem With GUI Installers#
A graphical installer on a headless server is, architecturally, a contradiction. To render a web-based setup wizard, you need a working web server, a working PHP runtime, and a working database — all of which are the things the installer is supposed to be setting up.
This creates a bootstrapping chicken-and-egg problem. cPanel's installer, for example, bootstraps a temporary Apache instance just to serve the setup interface, then tears it down and rebuilds the stack properly once configuration is complete. That's a lot of moving parts for what is fundamentally a one-time operation.
More practically, GUI installers break in predictable ways:
- Network interruptions kill the session. If your SSH tunnel drops or your VNC connection resets, a CLI installer picks up where it left off. A web-based wizard often doesn't.
- They're slow over high-latency connections. Managing a remote server from a café in Lisbon over a metered 4G connection is a real scenario for indie hosts. CLI is responsive; a setup wizard with dozens of AJAX calls is not.
- They obscure what's actually happening. A progress bar tells you nothing. A streaming CLI output tells you exactly which component is being configured, which package is being fetched, and where something went wrong if it did.
What Salieno Core's Installer Actually Does#
The installer is a single statically-linked binary. No dependencies. No package manager required. You download it, make it executable, and run it.
It handles everything in a defined sequence: system dependency checks, user and group creation, directory structure, Nginx configuration, PHP-FPM pool setup, SQLite database initialization, the billing schema, DNS zone templates, and TLS certificate provisioning via Let's Encrypt.
You can run it interactively — it asks about your hostname, IP address, admin email, and a few other basics — or you can pass a YAML config file for unattended installs. The config file approach is particularly useful if you're deploying multiple nodes or rebuilding after a hardware failure.
The entire process typically completes in under two minutes on a modern VPS with NVMe storage. That's not because we optimized the installer's UI rendering. It's because there's no UI rendering.
The Config File Approach#
This is where the CLI-first decision starts paying dividends beyond installation. The same config file format used for unattended installs is used for system configuration throughout the lifecycle of a Salieno Core deployment.
Want to change your PHP-FPM worker count? Edit the config file and re-run the configuration step. Need to add a new nameserver IP? Same process. This means your entire server configuration is versionable, diffable, and restorable — things that are genuinely difficult when configuration lives in a database behind a web UI.
For resellers managing infrastructure across multiple data centers, this is the difference between SSHing into each server and clicking through menus versus running an Ansible playbook or a simple shell loop.
"But My Customers Expect a Polished Experience"#
They do. And they get one. The Salieno Core control panel — the interface your customers use to manage their sites, email, and databases — is a fully featured web application with a modern UI. We haven't skimped there.
The distinction is between the interface your customers see and the interface you use to manage infrastructure. Your customers never touch the installer. They never see the CLI. They interact with a polished web panel that's been designed for end users, not sysadmins.
Conflating "installer UX" with "product quality" is a mistake we see frequently in hosting software. A slick setup wizard doesn't indicate that the underlying architecture is sound. It indicates that the vendor spent engineering time on a component you'll use exactly once.
The Honest Tradeoff#
We're not pretending there's no downside. The CLI installer has a real learning curve for hosts who've never managed a Linux server without a graphical crutch. If you're coming from a fully managed cPanel environment where you've never touched the command line, the first install will feel intimidating.
We've tried to mitigate this with thorough documentation, a community-maintained install script that handles common edge cases, and a diagnostics command that checks your system state and suggests fixes. But the fundamental reality is that running a hosting business on self-hosted software requires some comfort with the terminal.
If that's a dealbreaker, managed hosting panels with one-click deploys exist for a reason, and they serve a legitimate market. Salieno Core is built for operators who want full control over their stack and are willing to trade a graphical installer for a faster, more reliable, and more scriptable deployment process.
The Broader Principle#
This decision reflects a philosophy we apply across Salieno Core: optimize for the operation that happens repeatedly, not the one that happens once. Installation happens once per server. Configuration changes, debugging, and deployment automation happen weekly or daily. A CLI-first architecture serves the latter without compromising the former.
The installer isn't a missing feature. It's a deliberate choice about where complexity belongs.
0 comments
Loading comments…