Hosting Packages¶
Hosting packages define the resource quotas and permissions that a subscription receives. Each subscription is assigned to exactly one package.
Overview¶
The package list shows all configured hosting packages with their key metrics.
Displayed Columns¶
| Column | Description |
|---|---|
| Name | Package name |
| Storage | Disk quota in MB |
| Sites | Maximum number of websites |
| Domains | Maximum number of domains |
| Databases | Maximum number of MariaDB databases |
| Mailboxes | Maximum number of email mailboxes |
| FTP | Maximum number of FTP accounts |
| PHP | Default PHP version |
| Subscriptions | Number of subscriptions using this package |
Create Package¶
Click Create Package. The form is divided into several tabs:
Tab: Resources¶
| Field | Default | Description |
|---|---|---|
| Name | — | Unique package name |
| Disk Space (MB) | — | Disk quota (0 = unlimited) |
| Max. Sites | — | Maximum number of websites (0 = unlimited) |
| Max. Domains | — | Maximum number of domains |
| Max. Subdomains | — | Maximum number of subdomains |
| Max. Domain Aliases | — | Maximum number of domain aliases |
| Max. Databases | — | Maximum number of databases |
| Max. Mailboxes | — | Maximum number of email mailboxes |
| Max. Mailbox Quota (MB) | — | Maximum size per mailbox |
| Max. Email Quota Total (MB) | — | Total email storage limit |
| Max. DB Quota (MB) | — | Maximum database size |
| Max. DB Connections | — | Simultaneous connections per DB user (MariaDB MAX_USER_CONNECTIONS, PostgreSQL CONNECTION LIMIT) |
| Max. Queries/Hour | — | Query-rate governor, MariaDB only (MAX_QUERIES_PER_HOUR) |
| Max. Query Runtime (ms) | — | Caps single long-running queries (runaway/CPU guard), PostgreSQL only (statement_timeout) |
| Max. Files (inodes) | — | Per-site inode limit (requires filesystem quota enabled) |
| Max. FTP Accounts | — | Maximum number of FTP accounts |
| Max. Cron Jobs | — | Maximum number of cron jobs |
| Max. Backups | — | Maximum number of backups |
| Max. WordPress | — | Maximum number of WordPress installations |
| Max. Traffic (GB) | 0 | Monthly traffic limit (0 = unlimited) |
Unlimited Resources
A value of 0 means "unlimited" for all quotas.
Systemd slice (per-customer resource limits)¶
On the Resources tab the Systemd slice (resource limits) card limits what a customer's processes may consume at kernel level (systemd cgroups; effective for PHP-FPM with master and workers, cron jobs and the customer's processes):
| Field | Meaning |
|---|---|
| Max memory (MB) | hard limit — processes beyond it are OOM-killed |
| CPU quota (%) | 100 = one full core, 200 = two cores etc. |
| Max processes | fork-bomb protection |
| IO read/write (MB/s or IOPS) | 0 = unlimited |
Defaults of a new package. If you create a package and leave all three fields (RAM, CPU, processes) at 0, the panel sets values by the number of PHP workers. The larger of the tier and the linear formula (204.8 MB, 10 % CPU and 102.4 processes per worker) applies:
| PHP workers | RAM | CPU | Processes |
|---|---|---|---|
| up to 2 | 512 MB | 100 % | 128 |
| 3–5 | 1024 MB | 200 % | 256 |
| 6–10 | 1536 MB | 300 % | 512 |
| more than 10 | 3072 MB | 400 % | 1024 |
The reason for the floor: a PHP pool needs roughly 140–160 MB before its first worker (128 MB OPcache plus the master). With one worker the old linear calculation (205 MB) left too little room, a brief peak caused an OOM kill of the PHP master, and the site was down without any limit naming the cause. The tiers therefore guarantee at least 160 MB plus 128 MB per worker. Likewise a CPU quota below a full core lengthens the response time of every request (at 10 % an uncached WordPress page answered only after about 1.9 s) — hence the floor of one full core.
Existing packages keep their values
The new defaults apply only to newly created packages. An already stored package is not changed by an update — changing a limit on a customer's server is your decision, not a side effect of an update. If a customer runs on an older package with small values (e.g. 205 MB and 10 % CPU at one worker) and gets throttled or OOM-killed, raise the values yourself: edit the package → Resources tab → Systemd slice card → save. The panel then pushes the limits to every server running sites of this package. Keep in mind: if a customer raises memory_limit in their PHP settings above 128 MB, their slice needs correspondingly more.
A package's values also reach the first site of a new subscription. Until now it stayed on the agent defaults, and only a later change to the package applied the package values.
Tab: PHP Configuration¶
| Field | Default | Description |
|---|---|---|
| PHP Workers | 1 | Number of PHP-FPM processes |
| Default PHP Version | 8.4 | PHP version for new sites |
| Allowed PHP Versions | 8.1, 8.2, 8.3, 8.4 | Comma-separated list |
PHP limits (caps) — values a customer may not exceed in their website's PHP settings (memory_limit, upload_max_filesize, post_max_size, max_execution_time, max_input_vars; 0 = no cap). PHP defaults — initial values for new websites under this package (separate from the caps; clamped to the cap; 0 = system default).
Container hosting (Docker extension)
When the Docker extension is enabled, Allow container hosting (perm_docker) plus its limits (Container count, RAM/CPUs per container) also appear here. Container storage counts against the website's general disk quota. See Container Hosting (Docker).
Tab: Permissions¶
Each permission can be individually enabled or disabled:
| Permission | Description |
|---|---|
| Create Domains | Customer may add their own domains |
| Create Subdomains | Customer may create subdomains |
| Create Domain Aliases | Customer may configure domain aliases |
| Create Databases | Customer may create MariaDB databases |
| PostgreSQL Databases | Customer may additionally create PostgreSQL databases |
| Create Mailboxes | Customer may create email mailboxes |
| Create Forwards | Customer may create email forwards |
| Catch-All | Customer may set up one catch-all address per domain |
| Create FTP Accounts | Customer may create FTP accounts |
| Create Cron Jobs | Customer may set up cron jobs |
| Manage DNS | Customer has access to DNS zones |
| Manage Backups | Customer may create and restore backups |
| Manage SSL | Customer may configure SSL certificates |
| PHP Settings | Customer may change PHP configuration |
| Choose PHP Version | Customer may switch the PHP version |
| File Manager | Access to the file manager |
| phpMyAdmin | Access to phpMyAdmin (SSO) |
| Webmail | Access to Webmail (SOGo) |
| Groupware | Access to SOGo calendars & contacts (CalDAV/CardDAV) per mailbox |
| Logs | Access to access and error logs |
| Spam Filter | Customer may change spam settings |
| Password Protection | Customer may protect directories via .htpasswd |
| Web Statistics | Access to visitor statistics |
| WAF | Customer may enable the Web Application Firewall (ModSecurity/OWASP CRS) per website, see WAF |
| WordPress Toolkit | Access to WordPress management |
| Joomla Toolkit | Access to Joomla management |
| Staging | Customer may create staging environments for websites |
| Uptime Monitor | Customer may set up their own uptime monitors |
| Preview URL | Access to the preview domain |
| Git Deployment | Git-based deployment enabled |
| Composer | Access to Composer management |
| Node.js/Python | Access to Node.js and Python configuration |
Tab: Web and Mail¶
| Field | Default | Description |
|---|---|---|
| SSL Enabled | Yes | SSL enabled by default |
| HTTP > HTTPS | No | Automatic redirect |
| SSH Access | No | Shell access for customers |
| CGI Enabled | No | CGI scripts allowed |
| Email service | Yes | Mail service for the package. Off = mailboxes & forwarders blocked for customers on this package (SMTP/IMAP) and the Email menu hidden — the entire mail service is disabled for the package |
| Max. Outgoing Emails/Hour | 0 | Rate limiting (0 = unlimited) |
| Max. per Mailbox/Hour | 0 | Rate limiting per mailbox |
| Max. per Domain/Hour | 0 | Rate limiting per domain |
Tab: Limits and Policies¶
| Field | Default | Description |
|---|---|---|
| Overuse Policy | block | block or notify on quota exceeded |
| Storage Warning (%) | 80 | Customer is notified at this threshold |
| Suspended Site Status | disabled | What happens to the websites when the subscription is suspended: disabled (default, "Deactivate (Nginx off)") switches the vhosts off, suspended_page shows a suspension page, active leaves everything running. Suspending never deletes files or the Linux user; unsuspending (or renewing an expired subscription) switches the websites back on unchanged. Deleting is a separate, explicit action. |
| Validity Period (Days) | 0 | Automatic expiration (0 = unlimited) |
| Default resource quotas (CPU quota, RAM, max tasks) | — | No effect. Nothing reads these fields any more and they can no longer be written through the API. The effective limits are in the Systemd slice section |
| Backup Enabled | Yes | Backup feature available for this package |
Edit Package¶
- Click the Edit icon in the action column
- Change the desired settings
- Click Save
Existing Subscriptions
Changes to a package affect new subscriptions. Existing subscriptions retain their current limits until a package upgrade is performed.
Delete Package¶
- Click the Delete icon
- Confirm the deletion
Packages with Subscriptions
A package cannot be deleted while subscriptions are assigned to it. Move all subscriptions to another package first.
Duplicate Package¶
To quickly create a similar package:
- Click the Copy icon in the action column
- The creation form opens with pre-filled values
- Adjust the name and desired settings
- Click Create