SectionHow it works
DocumentationInternals

How it works

One binary, monopanel (also mp), runs in several roles:

RolePrivilegesPurpose
apiunprivileged monopanel userHTTPS :8443, a unix socket for the CLI, the job queue, schedulers
agentroota closed set of typed operations over a unix socket — never a command string
helpersetuid, irreversible dropfile operations on behalf of an account
fsopthe account's own privilegesthe file operation itself

State lives in SQLite. Changing a site is not an edit to a file on disk but a row in the database, from which configuration is rendered: template → validation (nginx -t, apachectl -t, php-fpm -t) → every file written atomically → reload. A failure anywhere on that path rolls the whole set back and returns the error text.

The principles, briefly:

  1. One Go binary, no runtime on the host.
  2. Split privileges: an unprivileged API process talks to a root agent with an allow-list of operations and paths.
  3. One API behind the web UI, the CLI, the menu and any integration.
  4. Declared state → render → validate → apply atomically → reload, with rollback.
  5. The panel serves its own port and does not depend on the system nginx.
  6. One php-fpm master per version, one pool per site; Apache only through mod_proxy_fcgi, never mod_php.
Page source on GitHub