# Optional components

> Add mail, webmail, DNS, WAF, Apache, FTP, PostgreSQL, MongoDB, Adminer, Docker and S3 storage to a ZoPanel server, at install time or later from Components.

Source: https://zopanel.net/docs/components  
Updated: 2026-10-07

A default ZoPanel install (`--profile web`) contains only the web stack: nginx, PHP, MariaDB, SFTP, the firewall and the panel. Everything else is an optional **component** that you add when you need it, because every component costs memory. You can choose components when you install, or add them at any time from the panel.

## Available components

| ID | Component | What it adds | Typical extra RAM |
| --- | --- | --- | --- |
| `mail` | Mail server | Postfix, Dovecot and Rspamd: mailboxes, forwarders, DKIM, spam filter, Sieve rules | ~300 MB |
| `webmail` | Webmail | Read and send mail in the browser (port 2096) | ~40 MB |
| `dav` | Calendars & contacts | CalDAV/CardDAV for every mailbox (Radicale), port 2080 | ~40 MB |
| `dns` | DNS server | PowerDNS: customers' zones, DNSSEC, wildcard certificates | ~30 MB |
| `waf` | Web application firewall | ModSecurity with the OWASP Core Rule Set, enabled per website | ~130 MB |
| `apache` | Apache (.htaccess) | Lets websites switch to Apache mode so `.htaccess` files work | ~40 MB |
| `ftp` | FTP server | Pure-FTPd with TLS, for customers who still use FTP | ~10 MB |
| `postgres` | PostgreSQL | PostgreSQL databases for applications | ~120 MB |
| `mongo` | MongoDB | MongoDB databases for Node.js and other applications | ~250 MB |
| `adminer` | Adminer | Web interface for MariaDB, PostgreSQL and MongoDB | ~20 MB |
| `docker` | Docker | Runs App Store applications and Dockerfile deploys, isolated per website | ~150 MB |
| `storage` | S3 object storage | S3-compatible buckets for customers | ~150 MB |

Dependencies are added for you:

- `webmail` and `dav` need the mail server, so `mail` is installed with them.
- `storage` needs Docker, so `docker` is installed with it.

`storage` requires a Pro license; on the Free plan it is skipped. Apache is also installed automatically the first time a website switches to Apache mode, so you rarely need to add it by hand.

## Install components from the panel

1. Sign in as an administrator and go to **Components** (under **Server** in the menu).
2. Components are grouped as **Email**, **Web & security**, **Databases** and **Applications**. Installed ones are marked **installed**.
3. Tick the components you want. The panel shows about how much extra memory they need.
4. If you selected the mail server, enter the **Mail server hostname**, for example `mail.example.com`. It must resolve to this server; set its reverse DNS (PTR) at your VPS provider.
5. If you selected the DNS server, enter the **Nameservers**, for example `ns1.example.com, ns2.example.com`. Create them as glue records (A records pointing to this server's IP) at the registrar of that domain.
6. Click **Install N component(s)**.

The installation runs as one background task. You can close the window: follow it under **Tasks**. Components that are already installed are skipped. If one fails, the others continue and the task lists what was not installed; you can retry it.

Some pages also offer to install their component directly, for example **Install mail server** on the **Email** page or **Install FTP server** on the **FTP / SFTP** page.

## Choose components at install time

### Profiles

| Profile | Components |
| --- | --- |
| `web` (default) | None: the web stack only |
| `full` | `mail`, `webmail`, `dav`, `dns`, `waf`, `apache`, `ftp`, `postgres`, `adminer`, `docker` |

```bash
curl -fsSL https://get.zopanel.net | sudo bash -s -- --profile full \
  --mail-hostname mail.example.com \
  --nameservers ns1.example.com,ns2.example.com
```

### Individual components

Add components to any profile with `--with`, comma separated:

```bash
curl -fsSL https://get.zopanel.net | sudo bash -s -- --with waf,docker,postgres
```

`mongo` and `storage` are not part of `full`; add them with `--with`.

### What the installer needs

| Component | Flag | If missing |
| --- | --- | --- |
| `mail`, `webmail` | `--mail-hostname mail.example.com` | Skipped with a message. If `--hostname` has at least three labels (for example `srv1.example.com`), it is used as the mail hostname. |
| `dns` | `--nameservers ns1.example.com,ns2.example.com` | Skipped with a message |

The installer does not install components itself. It queues them, and the panel installs them as a background task right after it starts, visible under **Tasks**. If the installer restarts the server (for a new kernel), the components are installed after the restart. If the server restarts in the middle, the task resumes.

## Ports opened

Components open their ports in the UFW firewall when installed. If your provider has its own firewall, open them there too.

| Component | Ports |
| --- | --- |
| Mail server | 25, 465, 587 (SMTP), 143, 993 (IMAP), 110, 995 (POP3) |
| Webmail | 2096 |
| Calendars & contacts | 2080 |
| DNS server | 53 TCP and UDP |
| FTP server | 21 and passive ports 30000-30100 |
| Adminer | 8889 |

## After installing

| Component | Where to use it |
| --- | --- |
| Mail server, webmail, calendars & contacts | **Email** page: enable email for a domain, create mailboxes, check DNS records and deliverability |
| DNS server | **DNS** page: zones, records, DNSSEC, DNS cluster |
| Web application firewall | **Security** page for all websites, and each website's **Tools** tab; start with **Detect only (log)** for a few days, then switch to blocking |
| Apache (.htaccess) | A website's **Tools** tab: .htaccess support (Apache mode) |
| FTP server | **FTP / SFTP** page: FTP accounts restricted to one folder |
| PostgreSQL, MongoDB, Adminer | **Databases** page |
| Docker | **App Store**, and Docker or Dockerfile deploys for websites |
| S3 object storage | **S3 storage** page: buckets and access keys |

## Plan memory before you install

Every component uses memory all the time, which is then not available for websites. On a 1-2 GB server, install only what you use. The **Tuning** page and the **PHP performance** card in **Settings → System** show how memory is shared between the system and customers after you add components.
