Installing on a server
bipanel installs on a fresh server with a single command run as root: the script downloads the release from bipanel.io, verifies its SHA-256 hash, installs Apache, PHP, MariaDB, email, DNS, FTP and the firewall, and finally prints the admin password and saves it to /root/bipanel-kurulum.txt. It usually takes 10–20 minutes.
On this page
#Before you start
- Supported systems: Ubuntu 22.04 / 24.04 / 26.04, Debian 12 / 13, AlmaLinux / Rocky Linux / RHEL 9 / 10 on x86_64 or ARM64 (aarch64). Memory, disk and network details are on the system requirements page.
- The server must be freshly installed. The installer stops if it finds another hosting control panel, Nginx, Apache or MySQL/MariaDB;
--forcelets you continue anyway, but existing configuration may be changed. - The server name must be a fully qualified domain name (FQDN) such as
server.example.com. Point an A record for it at the server's IP address; the server's SSL certificate is issued for that name. - Run the commands as root (or with
sudo).
This page covers the native server install. A Docker or Railway install has no mail server, DNS server or FTP; for that route see Docker and Railway.
#One-command install
curl -fsSL https://bipanel.io/install.sh | sudo bash -s -- --hostname server.example.com --email [email protected]
The bootstrap script:
- Reads the operating system from
/etc/os-releaseand checks the CPU architecture, stopping before it installs anything on an unsupported system. - Installs any missing tools (curl, tar, sha256sum, python3) with
apton Ubuntu and Debian, ordnfon AlmaLinux, Rocky Linux and RHEL. - Looks up the latest release on the selected channel at bipanel.io, downloads the archive and verifies its SHA-256 hash, stopping on a mismatch.
- Unpacks the archive and runs the bundled
deploy/native/install.shwith the options you pass after--.
The whole script is wrapped in a function, so nothing runs if the download is cut short. From a terminal, the installer lists the components it will install and the installation report notice, then asks you to confirm; -y or --yes skips the prompt. Without a terminal (under cloud-init, for example) it does not ask.
The default update channel is stable. To install from another channel, pass BIPANEL_CHANNEL to the bootstrap (lts, stable, release, current or edge); the installed panel keeps taking updates from that channel:
curl -fsSL https://bipanel.io/install.sh | sudo BIPANEL_CHANNEL=lts bash -s -- --hostname server.example.com --email [email protected]
The channels are explained on the panel updates page.
#Installing from a downloaded archive
If you would rather not pipe a script straight from the internet, get the release archive from the Download page. The page also shows the SHA-256 hash of the latest release; compare it before unpacking:
sha256sum bipanel-*.tar.gz
tar -xzf bipanel-*.tar.gz
cd bipanel
sudo bash deploy/native/install.sh --hostname server.example.com --email [email protected]
On Enterprise Linux (AlmaLinux, Rocky Linux, RHEL) the script must be run from inside the unpacked archive; a copy of install.sh on its own cannot find the distribution layer and stops.
#install.sh options
sudo bash deploy/native/install.sh --help lists every option. With the one-command install, put the options after bash -s --.
| Option | What it does |
|---|---|
--hostname FQDN | Server name. Defaults to hostname -f; the install stops if it is not a fully qualified name. |
--email ADDRESS | Admin email for Let's Encrypt and notifications. Defaults to root@<server name>. |
--php "8.2 8.3 8.4" | PHP versions to install. Default 8.2 8.3 8.4. |
--without-mail | Skip Postfix, Dovecot, OpenDKIM and Roundcube. |
--without-dns | Skip the BIND DNS server. |
--without-ftp | Skip Pure-FTPd. |
--without-firewall | Leave the firewall (UFW / firewalld) unconfigured. |
--with-modsecurity | Install Apache ModSecurity (OWASP CRS). |
--no-upgrade | Do not update system packages before installing. |
--force | Continue on a server that is not clean. |
-y, --yes | Do not ask for confirmation. |
--source PATH or GIT_URL | Where the bipanel source comes from (default: the package the script is in). |
--hub-url ADDRESS | License and update server (default: bipanel.io). |
Default PHP versions that the distribution's repositories do not offer are skipped with a warning. If none of the versions you pass with --php is available, the install stops.
#What gets installed and configured
#System preparation
The server name is set and added to /etc/hosts. Installed packages are then updated within the same distribution release: no release upgrade, no packages removed, modified configuration files kept. If a new kernel came in, the summary asks you to reboot. --no-upgrade skips this step.
#Web, PHP and database
| Component | Details |
|---|---|
| Web server | Apache 2.4 with PHP-FPM for each PHP version |
| PHP | 8.2, 8.3 and 8.4 side by side by default. Source: ppa:ondrej/php on Ubuntu 22.04 and 24.04, packages.sury.org on Debian and Ubuntu 26.04, the Remi repository on Enterprise Linux |
| Database | MariaDB, reachable only from the server itself |
| Other | Node.js 22, phpMyAdmin, certbot, Fail2Ban |
#Email, DNS and FTP
By default the installer sets up a mail server with Postfix, Dovecot and OpenDKIM, Roundcube webmail, the BIND9 DNS server and Pure-FTPd. Each can be skipped with the --without-… options above.
#Firewall
UFW is configured on Ubuntu and Debian, firewalld on Enterprise Linux. Incoming traffic is blocked by default and these ports are opened:
| Port | Service |
|---|---|
| SSH port (and 22) | SSH |
| 80, 443 (TCP) and 443 (UDP) | Websites, HTTP/3 |
| 2082–2083 | User panel |
| 2086–2087 | Server Admin |
| 20–21, 30000–30100 | FTP and passive FTP (when FTP is installed) |
| 25, 110, 143, 465, 587, 993, 995 | Email (when email is installed) |
| 53 (TCP and UDP) | DNS (when DNS is installed) |
#Enterprise Linux specifics
The EPEL and CRB repositories are enabled. SELinux stays in enforcing mode: the installer defines the booleans, panel ports and account directory file contexts the panel needs. If SELinux is disabled, the rules are still stored and take effect once it is enabled. chronyd is installed for time sync. If /home is on XFS and mounted without a quota option, the installer tells you what to do; quotas can be turned on with the disk quota component under Server Admin → System → Components.
#Default add-on components
Components such as automatic security updates, the jailed shell, the bipanel command-line tool, WP-CLI, GoAccess, log rotation, kernel link protections, and cron and SSH session limits are installed as well. A component that fails does not stop the install; retry it from Server Admin → System → Components. Others, such as PostgreSQL, Rspamd, ClamAV and Redis, are not installed by default and can be added from the same screen.
Finally the panel is installed under /opt/bipanel and started as the bipanel systemd service.
#Admin credentials and first login
When the install finishes, a summary is printed and saved to /root/bipanel-kurulum.txt, which only root can read:
| Item | Value |
|---|---|
| Server Admin | https://server.example.com:2087/admin |
| User panel | https://server.example.com:2083 |
| Webmail (when email is installed) | https://server.example.com/webmail |
| Admin username | admin |
| Admin password | A random password generated during the install |
The password and the other settings are also kept in /etc/bipanel/bipanel.env (mode 600). On first login your browser warns about the self-signed certificate. Then:
- Issue a Let's Encrypt certificate for the server name under Server Admin → SSL & AutoSSL.
- If you will run your own name servers, create glue records at your domain registrar and enter the name servers under Server Admin → Basic Setup.
- Change the admin password and turn on two-factor authentication.
Without a license key the panel runs as the Community edition with up to 3 hosting accounts. You activate a Pro license under Server Admin → System → License; see licensing for details and pricing for the editions. Carry on with first steps.
#Installation report
Every installation sends a short report to bipanel.io about every 2 hours for vulnerability matching: bipanel version and edition, update channel, operating system, architecture and kernel version, server name, counts of accounts, domains and resellers, installed package and component versions, and, once a license is entered, the first 8 characters of the license key and the server fingerprint. Customer data, email contents, passwords, file contents and databases are never sent. The report is on in both Community and Pro and cannot be turned off; everything it sends is shown under Server Admin → System → Installation Report.
#Duration, log and re-running
The install usually takes 10–20 minutes, depending on the server and its network. All output goes to /var/log/bipanel-install.log (root only). If the panel does not respond within 60 seconds, the installer warns you; check the service log with:
journalctl -u bipanel -n 100
The installer is safe to run again:
- If
/etc/bipanel/bipanel.envexists, it runs in update/repair mode and keeps the existing passwords and channel. - If an earlier install stopped halfway (the log file exists but the environment file does not), just run the same command again; the clean-server check does not trip over packages the earlier attempt installed, so
--forceis not needed.
If something goes wrong, see troubleshooting.
Something missing or wrong on this page? Let us know.