Installing on a server

Running install.sh as root, what it installs section by section, the six panel ports, and the five-step first-run wizard: requirements, database, server and root, licence, done.

On a fresh Linux server, install.sh does the work of the hosting panel's installer: it installs the services, places the panel, opens the ports and tells you where to finish in the browser. It takes a few minutes, most of it package downloads.

Before you start

  • A fresh Ubuntu 22.04 / 24.04, Debian 12, AlmaLinux or Rocky 8 / 9 server, and the root user. See Requirements.
  • A hostname such as server1.example.com that points at the server. Check it with hostname -f.
  • The AIOhPanel ZIP from your account on license.faruk.bd, and your licence key. See The licence key.

Run the installer

Upload the ZIP to the server, then as root:

unzip AIOhPanel-1.0.0.zip -d /root/aiohpanel-src
cd /root/aiohpanel-src
bash install.sh

You can also keep the ZIP next to the script and name it: bash install.sh ./AIOhPanel-1.0.0.zip. With no ZIP, the script downloads the latest one; the address can be changed with the variable AIOPANEL_ZIP_URL.

The installer refuses to run when it is not root, on an unsupported system, when Hosting Panel is already installed, or when AIOhPanel is already installed (installed.lock exists). Everything it does is written to /var/log/aiohpanel-install.log.

What it installs

In order, the sections of the script are:

  1. Packages. Apache with ModSecurity, nginx, MariaDB, BIND, Postfix and Dovecot, Pure-FTPd, PHP and PHP-FPM with the usual extensions, fail2ban, and tools such as rsync, zip, quota and socat. On Ubuntu it adds the Ondrej PPA and PHP 7.4, 8.1, 8.2 and 8.3. On AlmaLinux and Rocky it adds EPEL and Remi.
  2. The panel files go to /usr/local/aiohpanel. The command aiohpanel is linked into /usr/local/bin.
  3. Users. A system user aiohpanel and a sudo rule so the panel can manage the server, and a noshell program for accounts without shell access.
  4. MariaDB. A database aiohpanel with its own user, and a random root password kept in /root/.my.cnf. The passwords are also in /etc/aiohpanel/db.pass and mysql-root.pass.
  5. config.php with the database login, AP_DRIVER set to linux, AP_HOME_ROOT set to /home, a random secret, and the licence product aiohpanel.
  6. A PHP-FPM pool aiohpanel on a socket, with 2 GB uploads and 512 MB memory.
  7. A certificate for the panel ports, self-signed for ten years in /etc/aiohpanel/ssl.
  8. nginx on the six panel ports. Each face has an SSL port and a plain port that redirects to it. Folders such as includes, data, cron and bin and the file config.php answer 404.
  9. Apache for the accounts' web sites, reading the virtual hosts the panel writes to /etc/aiohpanel/apache/, plus a "suspended" page.
  10. BIND reading /etc/aiohpanel/named.zones.
  11. Postfix and Dovecot with virtual mailboxes in Maildir, SMTP on 25, submission on 587, SMTPS on 465, IMAP and POP3 with SSL.
  12. Pure-FTPd with chroot, TLS and the passive range 30000-35000.
  13. acme.sh for Auto SSL (Let's Encrypt). If the download fails, Auto SSL uses self-signed certificates until it is installed.
  14. The firewall. With ufw or firewalld running, it opens the ports listed in Requirements.
  15. A timer. aiohpanel-cron.timer runs the panel cron every 5 minutes, and aiohpanel.service puts extra IP addresses back after a reboot. See The panel cron.
  16. The tables. It runs db_update.php and stores the MariaDB root password, the hostname and the main IP in the panel.

At the end it prints the addresses to open.

The wizard

Open https://<server-ip>:2087/. The browser warns about the self-signed certificate; accept it. The wizard has five steps, shown as 1 to 5 across the top. Because the installer already wrote config.php, it opens at step 3.

StepWhat you do
1. RequirementsA checklist of PHP, extensions, writable folders and the driver (Linux - real services).
2. DatabaseHost, port, database name, user, password and Server driver. Already filled in by install.sh.
3. Server & rootServer hostname (a full name with at least two dots), Contact e-mail, Root password twice (8 characters or more), Primary and Secondary nameserver (empty means ns1. and ns2. plus the hostname) and Main shared IP.
4. LicenceType the key and press Activate, or Skip for now.
5. All doneLinks to the Host Manager and the hosting panel.

Step 3 creates the root user, writes installed.lock and sets the hostname. After that the wizard cannot be run again, except for steps 4 and 5. If you leave before step 5, open https://<server-ip>:2087/install.php?step=4 to enter the key; once step 5 has been seen, the wizard closes for good and you manage the key on the Licence page.

After the wizard

  1. Sign in at https://<hostname>:2087/ as root with the password you chose.
  2. Open Host Manager → Licence if you skipped the key. See The licence key.
  3. Set the nameservers under Server Configuration → Basic Host Manager Setup and add their A records.
  4. Check Server Status → Service Status and the cron line on the Home page.
  5. Create a package, then the first account. See Accounts and packages.

Updated 2026-11-02