Hyperion reads two files. /etc/hyperion/agent.toml configures the agent on each node. /etc/hyperion/web.toml configures the panel on the master. Both are TOML. Every section and key is optional: a missing file or key means the default shown here.
- The services read their file when they start. After a hand edit, run
sudo systemctl restart hyperion-agent, or sudo systemctl restart hyperion-web for the panel.
- When you save a setting in the panel, Hyperion writes the key into
agent.toml without touching your comments or the order of the file, keeps the previous contents as agent.toml.bak, and restarts the agent. Passwords stay in the file; the panel only shows whether one is set.
- The Panel column names where the panel edits a key: the Settings page and, where it matters, the card. A dash means the panel has no field for it, so edit the file.
- On a cluster the master copies some settings to every node (the pages show an All nodes tag). Others belong to one node (an Each node tag). Edit a worker’s own settings from Nodes, on the node’s settings page.
| Key |
Default |
Meaning |
Panel |
socket_path |
/run/hyperion.sock |
Unix socket hctl and the panel use to reach the agent. |
none |
socket_group |
hyperion-admin |
Group that may use the socket. |
none |
state_db |
/var/lib/hyperion/state.db |
SQLite database. |
none |
secrets_dir |
/etc/hyperion/secrets |
Directory for secret files. |
none |
log_path |
/var/log/hyperion/agent.log |
Agent log. |
none |
home_root |
/home |
Sites live under <home_root>/<system user>/<domain>/htdocs. |
none |
backup_root |
/var/lib/hyperion/backups/local |
Where local backups are written. |
none |
| Key |
Default |
Meaning |
Panel |
contact_email |
admin@example.com |
Address Let’s Encrypt knows you by. Issuance refuses an empty address and addresses ending in @example.com, @example.org, @example.net or @hyperion.invalid. |
Settings, HTTPS & previews, Let’s Encrypt contact |
challenge_dir |
/var/lib/hyperion/acme-challenges |
Where HTTP-01 challenge files are written. |
Settings, HTTPS & previews |
renewal_window_days |
30 |
The daily renewal check reissues a certificate when it expires within this many days. A value below 1 is treated as 1. |
none |
directory_url |
https://acme-v02.api.letsencrypt.org/directory |
Not used. Issuance always uses Let’s Encrypt production, or Let’s Encrypt staging when a request asks for it. |
none |
Only a worker node has this section. The installer writes it.
| Key |
Default |
Meaning |
Panel |
master_url |
empty |
The master to enroll with, for example https://panel.example.com. |
none |
invite_token |
empty |
One-time token from the master’s Nodes page. |
none |
node_label |
empty |
Name the node has in the cluster. |
none |
state_file |
/etc/hyperion/node-id.json |
Where the node id and secret are stored after enrollment. An existing file with no new token skips enrollment. |
none |
verify_tls |
absent |
Absent verifies the master’s certificate when master_url is https:// with a DNS name. true always verifies. false never verifies, and the invite token and the node’s secret then cross a channel others can read. A failed verification is never retried without verification. |
none |
The listener that accepts the master’s signed requests.
| Key |
Default |
Meaning |
Panel |
enabled |
false |
Whether the node accepts requests from the master. The worker installer turns it on. The local socket works either way. |
none |
bind |
0.0.0.0:9443 |
Address and port to listen on. Open the port in your firewall for the master only. |
none |
advertise_addr |
empty |
Address the master dials, when it is not the detected public IP, for example a private-network address. Empty uses the detected public IP. Read at enrollment, so changing it needs a re-enroll. |
none |
tls_cert_file |
/etc/hyperion/agent-rpc.crt |
Certificate for the listener. |
none |
tls_key_file |
/etc/hyperion/agent-rpc.key |
Its key. |
none |
With enabled = false, postfix delivers straight to each recipient’s mail server. With true, mail goes through the relay in smtp_host. See Set up the outgoing mail relay.
| Key |
Default |
Meaning |
Panel |
enabled |
false |
Use the SMTP relay below. |
Settings, Mail, Outgoing relay |
smtp_host |
smtp.example.com |
Relay host. |
Settings, Mail |
smtp_port |
587 |
Relay port. |
Settings, Mail |
smtp_user |
empty |
Relay user. |
Settings, Mail |
smtp_password |
empty |
Relay password. |
Settings, Mail |
from_address |
hyperion@example.com |
Sender address. |
Settings, Mail |
from_name |
Hyperion |
Sender name. |
Settings, Mail |
security |
starttls |
starttls (port 587), tls (port 465) or plain. |
Settings, Mail |
default_to |
empty |
Address that receives cluster-wide notices for sites with no owner email. |
Settings, Alerts, Recipients |
inet_protocols |
ipv4 |
Postfix inet_protocols for direct delivery: ipv4, ipv6 or all. |
none |
bind_address |
empty |
Postfix smtp_bind_address, the source address for outgoing mail. Empty leaves the choice to the kernel. |
none |
message_size_limit_mb |
0 |
Postfix message_size_limit in MiB, 0 to 100. 0 leaves postfix’s own value alone, which is 10 MB unless changed by hand. |
Settings, Mail, Largest message |
| Key |
Default |
Meaning |
Panel |
default_webhook |
empty |
Slack incoming webhook for cluster-wide notices. A profile can set its own. |
Settings, Alerts, Slack |
The off-site FTP, FTPS or SFTP target.
| Key |
Default |
Meaning |
Panel |
enabled |
false |
Push every successful backup to this target. |
Settings, Backups, FTP / SFTP target |
scheme |
ftp |
ftp, ftps or sftp. |
same |
host |
empty |
Server name. |
same |
port |
21 |
Server port. |
same |
user |
empty |
Login. |
same |
password |
empty |
Password, stored in the file in plain text. |
same |
base_path |
/hyperion-backups |
Directory on the server. A directory per hosting is added below it. |
same |
keep_latest |
0 |
Newest copies to keep per site on the target. 0 keeps everything. Range 0 to 1000. |
same |
| Key |
Default |
Meaning |
Panel |
max_age_days |
30 |
After each successful backup, archives older than this are deleted. Range 1 to 3650. |
Settings, Backups, Archive retention |
keep_latest_n |
5 |
The newest backups per hosting that are always kept. Range 1 to 1000. |
same |
| Key |
Default |
Meaning |
Panel |
drop_local_after_offsite |
false |
Delete the local archive once an independent check confirms the off-site copy. |
Settings, Backups, Local copies |
keep_local_latest |
0 |
Newest local copies per site to keep even so. 0 drops every verified copy. Range 0 to 1000. A value that is not a whole number turns dropping off. |
same |
| Key |
Default |
Meaning |
Panel |
enabled |
true |
Take a snapshot before Hyperion changes a site. It does nothing unless restic is installed. |
none |
keep_days |
the max_age_days value |
Snapshot age limit. 0 means never by age. Range 0 to 3650 when saved in the panel. |
Settings, Backups, Snapshot retention |
keep_last |
the keep_latest_n value |
Snapshots to keep. Range 0 to 1000. |
same |
| Key |
Default |
Meaning |
Panel |
mode |
both |
Which copy engine the node uses: backups, snapshots or both. Anything else is read as both. |
Settings, Backups, What is kept |
| Key |
Default |
Meaning |
Panel |
enabled |
true |
The five-minute permission self-repair. A site can opt out on its own Security card. |
none |
The brute-force scanner. Values below a floor are raised to it at start. See Brute-force scanner.
| Key |
Default |
Range the panel accepts |
Panel |
enabled |
true |
|
Settings, Brute-force & GeoIP |
window_secs |
600 |
1 to 86400 |
same |
ban_ttl_secs |
3600 |
60 to 31536000 |
same |
repeat_ttl_secs |
86400 |
60 to 31536000 |
same |
repeat_lookback_secs |
86400 |
0 to 31536000 (0 never escalates) |
same |
http_threshold |
12 |
2 to 10000 |
same |
ssh_threshold |
8 |
2 to 10000 |
same |
ftp_threshold |
8 |
2 to 10000 |
same |
mail_threshold |
8 |
2 to 10000 |
same |
waf_threshold |
20 |
3 to 1000 |
same |
| Key |
Default |
Meaning |
Panel |
auto |
false |
Check for a new release every hour and install it in safe mode. |
Settings, Panel, Updates |
Held by the master.
| Key |
Default |
Meaning |
Panel |
mode |
master |
standalone or master. Absent or unknown means master. A worker’s role comes from its enrollment, not this key. |
none |
master_accepts_hostings |
true |
Whether new sites may be placed on the master. |
Settings, Cluster, Placement |
test_node_ids |
empty |
Comma list of node ids marked as test nodes. |
Nodes, Mark as test |
test_domain_template |
empty |
Preview address template; empty means previews are off. |
Settings, HTTPS & previews, Preview address |
test_wp_no_index |
false |
Ask search engines to skip WordPress sites on test nodes. |
Settings, Cluster, Test nodes |
panel_hostname |
empty |
The panel’s own domain. |
Settings, Panel, Panel domain |
trash_enabled |
false |
A deleted site waits in Trash first. |
Settings, Backups, Trash |
trash_retention_days |
30 |
Days in Trash before removal. Range 1 to 365. |
same |
audit_retention_days |
0 |
Days to keep audit entries. 0 keeps them forever. Range 0 to 3650. |
Settings, Access, Audit log retention |
enforce_admin_2fa |
true |
Require two-factor sign-in for Administrator and Owner accounts. |
Settings, Access, Two-factor sign-in |
enforce_worker_cert_pinning |
false |
The master refuses a worker whose TLS certificate does not match the pin it reported. |
Settings, Cluster, Channel hardening |
enforce_response_auth |
false |
The master refuses unsigned answers from a worker that has published a signing key. |
Settings, Cluster, Channel hardening |
| Key |
Default |
Meaning |
Panel |
max_download_gb |
64 |
Largest bundle a node accepts when it imports a moved or copied site. Read on the importing node. Range 1 to 1024; anything else means 64. |
none |
Core Web Vitals in the care report.
| Key |
Default |
Meaning |
Panel |
cwv_source |
off |
off, psi (Google PageSpeed Insights, which receives the site’s URL) or lighthouse (a local Lighthouse, which must be installed). |
Settings, Customer letters, Core Web Vitals |
strategy |
mobile |
mobile or desktop. |
same |
psi_api_key |
empty |
PageSpeed Insights key. |
same |
cwv_interval_days |
7 |
Days between automatic measurements. 0 never. Range 0 to 365. |
same |
The wording of alerts and of the customer letters. Every key is optional and an empty or missing key means the built-in text. You edit them in the panel; the file holds the result.
| Section and key |
Meaning |
Panel |
[notifications] slack_template, email_subject_template, email_body_template |
Wrappers around alert messages. |
Settings, Alerts, Wording |
[notifications] care_report_subject_template, care_report_body_template, expiry_warning_subject_template, expiry_warning_body_template |
Whole-letter replacements. Leave empty to use [letters]. |
Settings, Customer letters, Letters |
[letters] lang |
Language of the customer letters: en or cs. |
Settings, Customer letters, Languages |
[letters] operator_lang |
Language of your own alerts. |
Settings, Alerts, Language |
[letters] billing_lang |
Language of the billing reminder: en, cs, or empty to follow lang. |
Settings, Customer letters, Languages |
[letters] overrides_lang |
Language your rewritten sentences are in: en, cs or empty. |
Settings, Customer letters |
[letters] any sentence id |
One reworded sentence. |
Settings, Customer letters, Sentences |
All keys sit in [web].
| Key |
Default |
Meaning |
listen |
127.0.0.1:8443 |
Address and port of the panel. The installer writes 0.0.0.0:8443 unless you set HYPERION_LISTEN. |
agent_socket |
/run/hyperion.sock |
The agent’s socket. |
admin_user_file |
/etc/hyperion/web-admin.json |
The bootstrap administrator record. |
session_key_file |
/etc/hyperion/web-session.key |
Key that signs session cookies. Created on first start. |
csrf_key_file |
/etc/hyperion/web-csrf.key |
CSRF key. Created on first start. |
session_ttl_secs |
28800 |
Session lifetime from sign-in, 8 hours. |
secure_cookies |
true |
Mark cookies Secure. Set false only for plain-HTTP testing. |
session_cookie_name |
hyperion_session |
Name of the session cookie. |
tls_enabled |
true |
The panel terminates TLS. It creates a self-signed certificate if none exists. |
tls_cert_file |
/etc/hyperion/web-tls/fullchain.pem |
Panel certificate. |
tls_key_file |
/etc/hyperion/web-tls/privkey.pem |
Panel key. |
pma_listen |
0.0.0.0:8447 |
Address of the phpMyAdmin listener. Empty switches it off and hides the button. |
setup_state_file |
/var/lib/hyperion/setup.json |
State of the first-run wizard. |
None of these keys has a field in the panel.