Sites
A site is a domain, a type and an account. Everything underneath it (the Unix user, the pool, the vhost, the database, the certificate) is created and owned by KLYRN, and changing it later is one operation.
The five types
static- Files served directly by nginx. No PHP process at all.
php- A PHP-FPM pool running as the site's own Unix user, confined by
open_basedir. wordpress- A PHP site plus the database,
wp-config.phpwith fresh salts, the admin user, permalinks, HTTPS and a real cron entry replacing WP-Cron. See WordPress. node- A Node.js application behind nginx on a private port, in a sandboxed systemd unit with a memory ceiling. See Node.js.
proxy- nginx and TLS in front of something already listening on a local port.
Creating a site
klyrn site create example.com
klyrn site create example.com --type static
klyrn site create example.com --type wordpress --admin-email you@example.com
klyrn site create app.example.com --type node --runtime 22 --git https://github.com/you/app
klyrn site create api.example.com --type proxy --port 9000
Flags that apply to any type:
--typephp(the default),static,wordpress,nodeorproxy.--php- A PHP version other than the server default.
--account- The hosting account. Derived from the domain if you do not say.
--no-ssl- Do not request a certificate now.
--no-www- Do not also serve
www.<domain>as an alias. --wait- Wait for the job and stream its log. On by default.
WordPress adds --title, --admin-user and --admin-email,
which is required. Node adds --runtime, --git,
--branch, --start and --build. Proxy needs
--port.
The account is a real Unix user with a home at 0710, owned by the account and
grouped to www-data, so nginx can traverse it and no other account can list
it. Two sites in two accounts cannot read each other's files.
Changing a site
The PHP version, the document root and the www handling all end in the same nginx and PHP-FPM reload, so they are one command.
klyrn site set example.com --php 8.3
klyrn site set example.com --docroot public/web
klyrn site set example.com --www none
klyrn site set example.com --memory-limit 512M --upload-max 64M --max-execution 120
klyrn site set example.com --reset-php # back to the server defaults
Per-site PHP values are validated against real bounds, not passed through: memory up to 4096 MB, uploads up to 2048 MB, execution time up to 3600 seconds, input vars between 100 and 100000. An upload limit larger than the post limit is refused with the reason, because uploads that big would be rejected anyway. The panel shows the server default beside every field.
A document root that resolves outside the site tree, does not exist, is a symlink or is a file is refused. Changing the PHP version removes the old pool before creating the new one (both versions write the same socket path), so there is a moment with no backend. If the new pool fails to start, KLYRN puts the old one back and tells you the command to run if even that fails.
Suspension
Suspending swaps the vhost for a fixed page and nothing else. Files, databases, backups, cron rows and certificates are never read, moved or deleted.
klyrn site suspend example.com --reason "invoice 4417 unpaid"
klyrn site unsuspend example.com
The suspended page answers 403 Forbidden, not 503. Suspension is a deliberate access decision by the hosting provider, and 503 would tell visitors and search engines to come back later. Every name the site answers for (aliases and redirects included) is suspended with it, because leaving one out would drop that name through to the default server, which answers 200. The TLS configuration is kept when the site has a valid certificate, so a visitor sees the page rather than a certificate error.
A suspension may only be lifted by someone at least as senior as whoever imposed it. A reseller cannot quietly undo an administrator's suspension; the message says who imposed it and who may lift it. Reasons are capped at 300 characters.
Deleting a site
klyrn site delete example.com # keep the files
klyrn site delete example.com --remove-files # remove the site directory too
Deleting removes the vhost, the pool, the cron entries and the database rows KLYRN created for the site. Backups are not deleted with it. To remove a whole account and everything under it, see Deleting an account: that one makes you type the account name.
Logs and secrets
klyrn site show example.com # details, certificate, recent jobs
klyrn site logs example.com --kind access --lines 200
klyrn site logs example.com --kind error
klyrn site logs example.com --kind php
klyrn site secrets example.com # WordPress admin and database credentials
Logs live at /home/<account>/logs/<domain>.{access,error}.log.
Stored credentials are encrypted at rest, and revealing them is written to the audit log
with who asked and from where.