Requirements
- A freshly installed server (64-bit Intel/AMD or ARM, VPS or dedicated) with Ubuntu 22.04, 24.04 or 26.04 LTS, or Debian 12 or 13. Interim Ubuntu releases such as 26.10 aren't supported. The VPS must be a full virtual machine (KVM, VMware, Hyper-V, Xen), not a container.
- At least 1 GB of memory (2 GB or more recommended) and 10 GB of free disk.
- A public IPv4 address and root access.
- A domain name you control, for the panel address (for example
panel.yourdomain.com).
HostFog needs a server of its own. Don't install it on a server that already runs another control panel or websites.
| System | PHP | Dovecot | MariaDB |
|---|---|---|---|
| Ubuntu 22.04 LTS | 8.1 (7.4–8.5 can be added from the panel) | 2.3 | 10.6 |
| Ubuntu 24.04 LTS | 8.3 (7.4–8.5 can be added from the panel) | 2.3 | 10.11 |
| Ubuntu 26.04 LTS | 8.5 | 2.4 | 11.8 |
| Debian 12 | 8.2 (7.4–8.5 can be added from the panel) | 2.3 | 10.11 |
| Debian 13 | 8.4 (others when the extra PHP repository publishes them) | 2.4 | 11.8 |
Newer versions of Nginx, Apache, MariaDB, PostgreSQL, Redis and Node.js can be installed later under Server Admin → Software versions. If a release doesn't package an optional part (for example the FTP server), the installer leaves it out, says so, and the rest works as normal.
1. Set up DNS
At your DNS provider, add A records pointing at the server's IP:
| Name | Used for |
|---|---|
server.yourdomain.com |
Server Admin: the administrators' panel |
panel.yourdomain.com |
Control Panel: your customers' panel (also the classic address on port 8443) |
reseller.yourdomain.com |
Reseller Panel: your resellers' panel |
webmail.yourdomain.com |
webmail |
mx.yourdomain.com |
mail server: IMAP, SMTP and MX |
ftp.yourdomain.com |
FTP |
ns1.yourdomain.com, ns2.yourdomain.com |
your own nameservers (optional; also add them as glue records at your registrar) |
Right after you enter the panel address, the installer shows the exact records to add (or update, if they already exist with another value) in your domain's DNS, plus the glue records and reverse DNS, and waits for Enter so you can make the changes first. It shows the list again at the end. It also saves a zone file you can import at most DNS providers: /etc/hostfog/dns-setup.zone. Show it again any time with hf-admin dns-setup (add --check to also see which records public DNS already has).
If you add them before installing, one SSL certificate covers them all. If DNS isn't ready, the install still works: names that don't point at the server yet are added to the certificate by themselves within 5 minutes of their DNS pointing there.
2. Set reverse DNS
At your server provider, set the reverse DNS (PTR) of the server IP to mx.yourdomain.com. Without it, Gmail and Outlook are likely to send your mail to spam.
3. Run the installer
Log in as root (sudo -i) and run:
cd /home && curl -o latest -L https://get.hostfog.io/latest && bash latest
The installer: - checks that the server is a supported Ubuntu version - asks for the panel address and your email - installs everything, showing one line per step with a timer - asks you to create the admin login - prints a summary with your links and a short to-do list
It takes about 10–15 minutes. Everything the commands print goes to /var/log/hostfog-install.log. If a step fails, the installer shows the last lines of that log; fix the problem and run the same command again.
Options
You can give the answers up front, which is useful for automated installs:
bash latest --hostname panel.yourdomain.com --email you@yourdomain.com
| Option | What it does |
|---|---|
--hostname NAME |
panel address |
--email ADDRESS |
admin email, also used for Let's Encrypt |
--port 8443 |
panel port (default 8443) |
--ns1 NAME --ns2 NAME |
nameserver names (default ns1./ns2. + your domain) |
--mail-host NAME |
mail server name (default mx. + your domain) |
--node 22 |
Node.js version for customer apps: 18, 20, 22 or 24 |
--quotas |
enforce hard disk quotas |
--no-mail |
skip email (Postfix, Dovecot, SpamAssassin, webmail) |
--no-dns |
skip the BIND DNS server |
--no-portals |
one panel for everyone, instead of separate Server Admin, Control Panel and Reseller Panel |
Firewall ports
The installer opens these ports in the server firewall (ufw). If your provider also has a cloud firewall, open them there too.
| Port | Service |
|---|---|
| 22 (or your SSH port) | SSH / SFTP |
| 80, 443 | websites, Let's Encrypt |
| 8443 | control panel |
| 21, 40000–40100 | FTP (TLS) |
| 25, 587, 993, 995 | |
| 53 | DNS |
| 7000 | HostFog Tunnel (only once you switch it on under Tunnels) |
fail2ban protects SSH, FTP, SMTP and IMAP/POP3 logins.
What you get
| Service | Address |
|---|---|
| Server Admin (administrators) | https://server.yourdomain.com |
| Control Panel (customers) | https://panel.yourdomain.com |
| Reseller Panel (resellers) | https://reseller.yourdomain.com |
| Classic address (every login, always works) | https://panel.yourdomain.com:8443 |
| Webmail | https://webmail.yourdomain.com |
| Email (IMAP 993, SMTP 587, MX) | mx.yourdomain.com |
| FTP (21, TLS) / SFTP (22) | ftp.yourdomain.com |
| phpMyAdmin | https://panel.yourdomain.com:8443/phpmyadmin/ |
Separate panels
Administrators, customers and resellers each get their own panel, at their own address, with their own sign-in page, look and app icon. Only the people a panel is for can sign in there: a customer who tries the Server Admin address is told where to go instead. Log in as from the Server Admin (or Reseller Panel) opens the customer's own Control Panel, and Return to admin takes you back. The classic address on port 8443 keeps working for every login, so you can always get in, even before the new names' DNS is in place.
Servers installed before this release: point server. and reseller. at the server, then run sudo hf-admin portals on. Choose other names with --admin, --customer and --reseller; go back to one panel with hf-admin portals off.
Next: Getting started.