Skip to main contentSkip to navigation
[email protected]
Client AreaSupport
Hosting Mammoth
HostingMammothYour Data, Our Responsibility
Home
Solutions
Hosting Services
Store
Pricing
About
Blog
API
Contact

Stay Ahead of the Curve

Get the latest insights on cybersecurity, AI innovations, and enterprise data solutions delivered to your inbox.

Hosting Mammoth
HostingMammothEnterprise Solutions

Enterprise-grade data solutions. Hosting, recovery, cybersecurity, and AI-powered services for businesses worldwide.

[email protected]
Sun - Fri, 9:00am - 5:00pm

Services

  • Cloud Hosting
  • Data Recovery
  • Cybersecurity
  • Legal Support
  • MSP Services
  • Web Development
  • AI Services
  • Free Server Migration

Hosting

  • VPS Hosting (NVMe SSD)
  • VDS Hosting (NVMe)
  • Storage VPS (High SSD)
  • GPU Servers
  • Managed Services
  • Cloud Firewall
  • Load Balancer
  • One-Click Apps
  • n8n Hosting
  • Object Storage
  • FAQ

Company

  • Store
  • Pricing
  • About Us
  • Locations
  • Blog
  • Testimonials
  • Contact
  • Affiliate Program
  • White-Label
  • Terms of Service
  • Privacy Policy
  • Browser Cookies
  • SLA

Support

  • Client Area
  • Submit Ticket
  • Knowledge Base
  • Server Status
  • API Documentation

© 2026 Hosting Mammoth. All rights reserved.

Knowledge Base
Getting StartedAccount ManagementVPS HostingGPU ServersStorage VPSCloud FirewallLoad BalancerServer ManagementBilling & PaymentsSupport & TicketsAffiliate ProgramReseller ProgramMarketplace & Appsn8n HostingManaged ServicesServer MigrationAPI & DevelopersSecurityTroubleshootingGlossaryInstall Guides
  1. Home
  2. /
  3. Support
  4. /
  5. Install Guides
  6. /
  7. How To Install Aapanel Ubuntu
GUIDEInstall Guides

How to Install aaPanel on Ubuntu 24.04 VPS: Free LNMP/LAMP Control Panel

25 min read

How to Install aaPanel on Ubuntu 24.04 VPS: Free LNMP/LAMP Control Panel

Running a modern web stack on a VPS used to mean hours of apt install, config files scattered across /etc, and manual TLS renewals at 2 AM. aaPanel turns all of that into a point-and-click workflow. This guide walks you through installing aaPanel on an Ubuntu 24.04 VPS, from the single install command to deploying WordPress, automating Let's Encrypt, and hardening the control panel for production.

Skip the setup? Deploy aaPanel in one click with our pre-configured image. Launch a CloudCore Starter VPS now and have your control panel online in under 60 seconds.

Table of Contents

  • What is aaPanel?
  • Why Choose aaPanel Over cPanel or Plesk?
  • Prerequisites
  • Step 1: Update System Packages
  • Step 2: Run the aaPanel Installer
  • Step 3: Capture Your Panel URL and Credentials
  • Step 4: Open the Firewall
  • Step 5: First Login and Initial Setup
  • Step 6: Install the LNMP Stack
  • Step 7: Add Your First Website
  • Step 8: Install Free Let's Encrypt SSL
  • Step 9: Deploy WordPress via the App Store
  • Step 10: File Manager, Cron, and Docker
  • Step 11: Configure Scheduled Backups
  • Step 12: Harden aaPanel Security
  • Updating aaPanel
  • Troubleshooting
  • FAQ
  • Next Steps
  • What is aaPanel?

    aaPanel is a free, open-source web hosting control panel that provides a graphical interface for managing Linux servers. It is the international edition of BT Panel (宝塔面板), one of the most widely used control panels in Asia, and now ships with full English localization, an active international community forum, and a plugin ecosystem with over 100 one-click applications.

    Think of aaPanel as a graphical replacement for the dozens of CLI tools you would otherwise string together: Nginx or Apache for the web server, PHP with FPM pools, MariaDB or MySQL for the database, phpMyAdmin for database administration, Pure-FTPd for FTP, Redis and Memcached for caching, and Fail2ban for intrusion prevention. Install any of these with a single click, configure them from the browser, and monitor resource usage with real-time charts.

    The App Store is the real force multiplier. One-click installers are available for WordPress, NextCloud, Joomla, Drupal, Magento, PrestaShop, Ghost, Laravel, Discourse, Mautic, and many more. Each installer handles the database creation, configuration file generation, file permissions, and PHP extension requirements, which normally take 20-30 minutes of manual work per app.

    aaPanel is used in practice for shared hosting on a single VPS (host dozens of client sites with isolated directories, databases, and FTP users), rapid agency deployments (spin up a staging WordPress in 90 seconds), developer sandboxes (switch PHP versions per site with one dropdown), and self-hosted SaaS stacks (run Mautic, NextCloud, and a Ghost blog side by side on a EUR 5 VPS).

    Why Choose aaPanel Over cPanel or Plesk?

    Control panel choice comes down to cost, performance, and flexibility. Here is how aaPanel compares to the two commercial incumbents:

    • Free forever -- aaPanel has no per-account licensing. cPanel pricing starts at around USD 24.99/month for up to 5 accounts and scales sharply; Plesk starts around USD 14/month with tiered account caps. Over a year, aaPanel saves USD 150-500+ per VPS.
    • Lightweight footprint -- aaPanel idles at roughly 200-300 MB of RAM. cPanel's recommended minimum is 4 GB of RAM just for the panel process. This means aaPanel runs comfortably on a 1 GB VPS while cPanel effectively requires 4 GB or more.
    • Full sudo access -- Unlike locked-down commercial panels, aaPanel never fights you for control of the underlying system. You can edit any config file, install any package, and drop to the shell without voiding support.
    • App Store with one-click installs -- The App Store covers mainstream CMSes, ecommerce platforms, marketing tools, and developer stacks. cPanel's Softaculous is excellent but is a paid add-on on most hosts.
    • Multi-PHP made easy -- Install PHP 7.4, 8.1, 8.2, and 8.3 side by side. Assign a different version per website from a dropdown. Toggle extensions without touching php.ini.
    • Open source and auditable -- The installer and core panel code are available on GitHub. No opaque licensing server, no phone-home checks that can brick your panel.

    aaPanel vs cPanel vs Plesk at a Glance

    FeatureaaPanelcPanelPlesk
    Monthly license costFree~$24.99+~$14+
    Minimum RAM512 MB (1 GB recommended)4 GB2 GB
    One-click app installsBuilt-in, freeSoftaculous (paid)Built-in
    Multi-PHP versionsYes, freeYes (EasyApache)Yes
    Full root/sudo accessYesRestrictedRestricted
    Docker management UIYesNoPaid extension
    Let's Encrypt automationYes, freeYes, freeYes
    Typical cost at 10 sitesEUR 7.99/mo (VPS only)~$30/mo (license + VPS)~$25/mo (license + VPS)
    For small agencies, freelancers, and self-hosters, aaPanel is the obvious pick. cPanel and Plesk still have strengths for large reseller operations, but you pay dearly for them.

    Prerequisites

    Before you begin, make sure you have:

    • A VPS running Ubuntu 24.04 LTS with root or sudo access (aaPanel also supports Debian 11/12, CentOS 7/8, and AlmaLinux)
    • SSH access to your server (PuTTY on Windows, or the built-in terminal on macOS/Linux)
    • At least 1 GB of RAM (2 GB+ recommended if you plan to run WordPress, MariaDB, and Redis together)
    • At least 10 GB of free disk space for the panel, Nginx, PHP, MariaDB, and one or two websites
    • A clean system -- aaPanel should be installed on a fresh OS. Running it alongside an existing LAMP stack or another control panel will fail
    Recommended Plan: CloudCore Starter
    >
    For hosting 5-15 standard WordPress sites with Redis caching and daily backups, we recommend the CloudCore Starter plan:
    >
    - 4 vCPU cores
    - 6 GB RAM
    - 100 GB NVMe SSD
    - Unmetered bandwidth
    - Starting at EUR 7.99/month
    >
    This gives you enough headroom for aaPanel itself, an LNMP stack, Redis, multiple PHP-FPM pools, and comfortable traffic spikes. For a single low-traffic site, our 1 GB entry plan works fine too.

    Connect to your server via SSH to get started:

    bash
    ssh root@your-server-ip

    Step 1: Update System Packages

    Start by updating your package index and upgrading installed packages. A fresh, fully-patched system avoids dependency conflicts during the aaPanel install.

    bash
    sudo apt update && sudo apt upgrade -y

    Expected output (abbreviated):

    text
    Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
    Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease
    Reading package lists... Done
    Building dependency tree... Done
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

    Install a handful of tools the aaPanel installer expects:

    bash
    sudo apt install -y wget curl tar unzip

    If your kernel was updated, reboot before continuing:

    bash
    sudo reboot

    Then reconnect via SSH after a minute.

    Step 2: Run the aaPanel Installer

    aaPanel ships a single install script that handles everything: downloading the panel code, installing the Python runtime it uses, creating a systemd service, and opening the default panel port.

    Run the official installer:

    bash
    wget -O install.sh https://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel

    You will see a confirmation prompt:

    text
    +----------------------------------------------------------------------
    | aaPanel FOR Ubuntu Installer
    +----------------------------------------------------------------------
    Do you want to install aaPanel to the /www directory now? (y/n):

    Type y and press Enter. The installer will:

  • Install dependencies (Python 3, OpenSSL, libxml2, zip, unzip, sqlite)
  • Download the aaPanel application code into /www/server/panel
  • Generate random values for the panel port, username, and password
  • Create a systemd service at /etc/systemd/system/bt.service
  • Start the panel and enable it at boot
  • The full install typically takes 2-4 minutes depending on your network speed. You will see a running progress indicator and several package installation logs.

    Step 3: Capture Your Panel URL and Credentials

    When the installer finishes, it prints a block that looks like this. Copy it somewhere safe immediately — the random port and password are generated once and shown only on stdout:

    text
    ==================================================================
    Congratulations! Installed successfully!
    ==================================================================
    aaPanel Internet Address: https://203.0.113.42:8888/a1b2c3d4
    aaPanel Internal Address: https://10.0.0.5:8888/a1b2c3d4
    username: zk9mxv7p
    password: X7hQ2nP8vL4mR6wT
    ==================================================================

    Three important details:

    • Port 8888 is the default panel port, but the trailing path (/a1b2c3d4 in this example) is a randomized security entry. Visiting https://your-ip:8888/ without it returns a 404.
    • The username is a randomly generated 8-character string, not admin or root. This prevents brute-force attempts against common usernames.
    • The password is a one-time random 16-character string. If you lose it, reset with sudo bt default on the server.
    If you close the terminal before copying the credentials, retrieve them again with:

    bash
    sudo bt default

    Expected output:

    text
    ==================================================================
    aaPanel default info!
    ==================================================================
    Internet panel address: https://203.0.113.42:8888/a1b2c3d4
    Internal panel address: https://10.0.0.5:8888/a1b2c3d4
    username: zk9mxv7p
    initial password: X7hQ2nP8vL4mR6wT  (if you have not changed the password)

    Step 4: Open the Firewall

    The panel runs on a random high port (typically 8888, but sometimes different if 8888 is in use). You need to allow it through both the OS firewall and any cloud provider firewall.

    Ubuntu UFW

    If UFW is active, allow SSH and the panel port:

    bash
    sudo ufw allow 22/tcp
    sudo ufw allow 8888/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 21/tcp
    sudo ufw allow 888/tcp
    sudo ufw enable
    sudo ufw status

    Port reference:

    • 22 -- SSH
    • 80 / 443 -- HTTP and HTTPS for your hosted sites
    • 888 -- phpMyAdmin default port
    • 8888 -- aaPanel itself (or whatever random port was assigned)
    • 21 / 39000-40000 -- FTP control and passive range (only if you plan to use FTP)

    Cloud Provider Firewall

    If you are running on Contabo, Hetzner, OVH, or another provider with an external firewall, add the same rules in the cloud control panel. A common pitfall is opening the port in UFW but forgetting the provider's firewall — the panel will appear unreachable with no obvious error.

    Step 5: First Login and Initial Setup

    Open the Internet Address from Step 3 in your browser. You will see a TLS warning because aaPanel ships with a self-signed certificate on first boot. Click Advanced then Proceed — we will replace this certificate later.

    Log in with the username and password from the install output. On first login aaPanel shows a recommended software prompt. You can:

    • Accept the LNMP recommendation -- Installs Nginx, PHP, MariaDB, phpMyAdmin, and Pure-FTPd in one batch.
    • Accept the LAMP recommendation -- Installs Apache instead of Nginx (pick this only if you have legacy .htaccess-heavy applications).
    • Skip and install individually -- Closes the wizard so you can pick components by hand.
    We will walk through the LNMP path in the next step.

    Step 6: Install the LNMP Stack

    From the aaPanel dashboard, click Recommended Installation (or navigate to App Store > Runtime). Configure the stack as follows:

    ComponentRecommended VersionNotes
    Web ServerNginx 1.24Preferred for modern workloads. Select Apache 2.4 only for legacy apps.
    DatabaseMariaDB 10.11LTS release, drop-in MySQL replacement, better defaults.
    PHPPHP 8.2Best balance of compatibility and performance in early 2026.
    phpMyAdmin5.2Ships listening on port 888 by default.
    Pure-FTPdLatestOptional — skip if you will use SFTP only.
    Pick Compile Install only if you need a very specific build configuration. For almost everyone, Fast Install is correct — it uses precompiled binaries and takes 3-5 minutes instead of 30-60.

    Click One-click (or install each row individually). aaPanel will show an install queue at the bottom-right of the dashboard. Each component progresses from Queued to Installing to Completed.

    While you wait, take a look at the sidebar:

    • Home -- Real-time CPU, memory, disk, and network graphs
    • Website -- Virtual host management
    • FTP -- Pure-FTPd users
    • Database -- MariaDB databases and users
    • Files -- Browser-based file manager with a built-in code editor
    • Terminal -- Web SSH
    • Monitor -- Historical resource graphs
    • Security -- Firewall rules and IP block lists
    • App Store -- One-click applications
    Once every LNMP component is marked Completed, you are ready to add a site.

    Step 7: Add Your First Website

    Navigate to Website > Add Site. The form collects all the information needed to configure Nginx, PHP-FPM, the FTP account, and the database in one step:

    • Domain name -- example.com. Add www.example.com as an additional domain if needed.
    • Remark -- An internal label like "Main marketing site" to distinguish sites later.
    • Root directory -- Leave as the default /www/wwwroot/example.com.
    • FTP -- Tick Create FTP. Set a username and password. Skip if you prefer SFTP.
    • Database -- Tick Create database. Pick MySQL, enter a username, and set a password. aaPanel auto-generates the database name.
    • PHP version -- Select 8.2 from the dropdown.
    Click Submit. Behind the scenes aaPanel:

  • Creates /www/wwwroot/example.com with correct permissions
  • Writes an Nginx vhost at /www/server/panel/vhost/nginx/example.com.conf
  • Creates the MariaDB database and user with the provided credentials
  • Creates the FTP user mapped to the document root
  • Reloads Nginx
  • Visit http://example.com (after pointing DNS at your VPS IP) and you should see the aaPanel default landing page.

    DNS tip: Create an A record pointing example.com and www.example.com at your VPS IP address. Propagation usually completes in 5-15 minutes.

    Step 8: Install Free Let's Encrypt SSL

    From the Website list, click Settings next to your site, then the SSL tab. aaPanel supports three TLS modes:

    • Let's Encrypt -- Free, auto-renewing, 90-day certificates. The right choice for nearly all sites.
    • Other Certificate -- Paste a custom certificate (for EV certificates or a wildcard from another CA).
    • Self-Signed -- For internal-only testing.
    Select Let's Encrypt, tick both domains (example.com and www.example.com), and click Apply. The process takes 15-30 seconds and performs an HTTP-01 challenge behind the scenes.

    When it completes, enable Force HTTPS at the top of the SSL tab. aaPanel will insert an HTTP-to-HTTPS redirect into the vhost and reload Nginx. Your site now serves over HTTPS with an auto-renewing certificate.

    Certificates renew automatically via a daily cron job that runs bt renew_all_ssl. You can verify the next renewal date from the SSL tab.

    Step 9: Deploy WordPress via the App Store

    aaPanel's App Store removes the usual 20-minute WordPress install ritual. Navigate to App Store > One-click deployment, search for WordPress, and click One-click deployment.

    The form asks for:

    • Domain -- Pick an existing site from Step 7 or add a new one from the same dialog.
    • Database -- Auto-generated if you tick the checkbox.
    • Admin username / password -- Becomes the WordPress superadmin account.
    • Site name -- WordPress blogname setting.
    Click Submit. aaPanel downloads the latest WordPress core, unpacks it into the document root, writes wp-config.php with the database credentials, and runs the WordPress installer silently. You receive a confirmation modal with the admin URL, username, and password.

    Log in at https://example.com/wp-admin/ and you are done. The whole end-to-end process — new domain, PHP version selected, database created, SSL issued, WordPress installed — takes about 4-5 minutes.

    Other One-Click Apps Worth Trying

    • NextCloud -- Self-hosted Dropbox alternative with file sync, calendar, and contacts.
    • Mautic -- Marketing automation and email campaign platform.
    • Ghost -- Node.js publishing platform, faster than WordPress for pure blogs.
    • phpMyAdmin -- Already installed with LNMP, accessible at http://your-ip:888.
    • Discourse -- Modern forum software (requires Docker — enable it first).

    Step 10: File Manager, Cron, and Docker

    Three utilities that replace a lot of CLI work.

    File Manager

    Files in the sidebar opens a full-featured file manager: upload, download, rename, chmod, compress, extract, and edit files in a built-in Monaco-based code editor with syntax highlighting for PHP, JS, HTML, CSS, and YAML. Multi-file upload works by drag-and-drop, and the editor autosaves.

    Use it to drop in custom Nginx snippets, edit wp-config.php, or review log files without ever opening vim.

    Cron

    Cron in the sidebar provides a graphical interface to crontab. Add a task by picking:

    • Task type -- Shell script, backup a database, backup a site, release memory, log cutting
    • Name -- Label like "Nightly WordPress backup"
    • Schedule -- Minute / hour / day / week / month selectors, or a freeform cron expression
    • Target -- The site, database, or script to run
    Example cron jobs worth scheduling:

    • Log rotation -- Keep /www/wwwlogs/*.log from filling your disk
    • Memory release -- Drop Linux page cache weekly on memory-constrained servers
    • Custom shell script -- Anything you would normally put in /etc/cron.d

    Docker Integration

    Install Docker Manager from the App Store. Once installed, aaPanel exposes a Docker sidebar item that manages containers, images, volumes, and networks — roughly equivalent to Portainer but integrated with the panel's user accounts. Use it to run Discourse, Invoice Ninja, or any other Docker-only application alongside your Nginx-served PHP sites.

    Step 11: Configure Scheduled Backups

    Data loss is rarely about whether — it is about when. aaPanel has backups built into the Cron module.

    Navigate to Cron and create two tasks:

  • Backup site — Pick your website, set a daily schedule at 03:00, and choose a retention of 7 copies.
  • Backup database — Pick the matching database, same schedule, same retention.
  • By default backups land in /www/backup/site/ and /www/backup/database/. That is fine as a first line of defense, but a local-only backup on the same disk as the production data protects against nothing except accidental file deletion.

    Offsite Backups to S3 or Compatible

    Install Cloud Storage from the App Store. It ships with drivers for:

    • Amazon S3 (and any S3-compatible service: Backblaze B2, DigitalOcean Spaces, Wasabi, MinIO)
    • Google Drive
    • OneDrive
    • Dropbox
    • FTP remote
    Enter your S3 endpoint, access key, secret key, and bucket name, test the connection, then re-open each backup cron job. You will see a new Backup to cloud storage toggle. Enable it so each nightly backup is uploaded offsite within minutes of creation.

    A good configuration for a production site is:

    • Local daily backup, keep 7 copies (~1 week)
    • S3 daily backup, keep 30 copies (~1 month)
    • Weekly full-server snapshot via your VPS provider (most offer this for EUR 1-2/month)

    Step 12: Harden aaPanel Security

    The default aaPanel install is reasonably secure out of the box thanks to the random port, random username, and random entry path. A few extra steps make it significantly harder to attack.

    Change the Default Panel Port

    Navigate to Settings > Panel Port. Change 8888 to a less-scanned high port like 34721. Update your UFW and cloud firewall rules accordingly and close 8888.

    Enable Two-Factor Authentication

    Settings > Authenticator > toggle on. Scan the QR code with Google Authenticator, Authy, or 1Password. From the next login, aaPanel requires a 6-digit TOTP in addition to the password.

    IP Whitelist

    Settings > Authorization IP. Add the static IP addresses from which you administer the server (office, home, VPN). Requests from any other source get a 403 before they even reach the login form. This is the single most impactful hardening you can do — aaPanel login attempts from the public internet simply stop existing.

    If your administrative IP is dynamic, pair this with a small wireguard VPN on a cheap VPS and whitelist only the VPN IP.

    Change the Entry Path

    Settings > Security Entrance. The random path from the installer is fine, but if it has leaked (pasted in Slack, committed to a repo), regenerate it here.

    Disable Password Login Over SSH

    Not strictly aaPanel, but a vital companion step. Edit /etc/ssh/sshd_config:

    text
    PasswordAuthentication no
    PubkeyAuthentication yes
    PermitRootLogin prohibit-password

    Then sudo systemctl restart ssh. Make sure you have a working SSH key before disabling password auth.

    Install Fail2ban

    From App Store > Security, install Fail2ban. It monitors /var/log/auth.log, the aaPanel login log, and the Nginx error log, and bans IPs that hit obvious brute-force patterns. Default bans last 24 hours after 5 failed attempts.

    Updating aaPanel

    Panel updates ship every few weeks with bug fixes and new App Store plugins. There are two ways to update:

    From the UI, click the Update button in the top-right of the dashboard when a new version is available.

    From the CLI:

    bash
    sudo bt update

    Expected output:

    text
    ==================================================================
    Upgrading aaPanel, please wait...
    ==================================================================
    Downloading aaPanel 7.0.x...
    Unpacking...
    Restarting bt service...
    ==================================================================
    aaPanel has been upgraded to 7.0.x
    ==================================================================

    Updates take 20-40 seconds and briefly restart the panel process. Your hosted websites are not affected — Nginx, PHP-FPM, and MariaDB keep running throughout.

    For installed apps (PHP, MariaDB, Nginx), use App Store > Installed and click Upgrade next to each. Always take a snapshot or backup before major version upgrades (for example, MariaDB 10.11 to 11.x).

    Troubleshooting

    ProblemCauseSolution
    Panel URL times outPort 8888 (or custom port) blocked by UFW or cloud firewallsudo ufw status on the server; open the port in your cloud provider firewall too. Run sudo bt default to confirm the actual port.
    This site can't be reached at the random entry pathSecurity entrance mismatchRun sudo bt default to print the current path. If it still fails, regenerate with sudo bt 16 (resets security entrance).
    Forgot username or passwordRandom credentials lostsudo bt 5 resets the password. sudo bt 6 sets a new username. sudo bt default prints the current values.
    Let's Encrypt issuance failsPort 80 closed, DNS not propagated, or domain points elsewhereConfirm dig +short example.com returns your VPS IP. Ensure UFW and cloud firewall allow port 80. Retry from the SSL tab.
    502 Bad Gateway on a PHP sitePHP-FPM pool crashed or wrong PHP version selectedWebsite > Settings > PHP Version — pick the right version. Restart PHP: App Store > PHP 8.2 > Restart.
    PHP extension missing (e.g. imagick, redis, exif)Extension not installed in the selected PHP buildApp Store > PHP 8.2 > Install tab. Click Install next to the missing extension.
    MariaDB won't start after rebootLow memory triggered OOM-killCheck sudo journalctl -u mariadb -n 50. Add swap: sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile.
    403 Forbidden on a newly added siteDocument root permissions incorrectsudo chown -R www:www /www/wwwroot/example.com && sudo chmod -R 755 /www/wwwroot/example.com
    Panel loads but shows blank dashboardBrowser cache after upgradeHard-reload (Cmd+Shift+R or Ctrl+Shift+R). Try a private/incognito window.
    High CPU from a single siteBot traffic, missing cachingInstall Redis from the App Store, enable the WordPress Cache plugin, or enable Cloudflare in front of the site.

    Checking Panel Logs

    When something does not behave as expected, the panel logs usually have the answer:

    bash
    sudo tail -f /www/server/panel/logs/error.log

    Nginx per-site logs live in /www/wwwlogs/example.com.log and /www/wwwlogs/example.com.error.log. PHP-FPM slowlogs are in /www/server/php/82/var/log/.

    FAQ

    Is aaPanel really free? What's the catch?

    Yes — the core panel is free, with no account caps and no feature-gated functionality. aaPanel monetizes through paid plugins (advanced WAF, ModSecurity rule sets, migration tools, and a few premium App Store entries) and an optional Pro subscription that unlocks those plugins as a bundle. The free tier covers everything in this guide, including Nginx, PHP, MariaDB, Let's Encrypt, backups, Docker, and most App Store installs. You only pay if you opt into a specific paid plugin.

    How is aaPanel different from BT Panel?

    aaPanel is the international edition of BT Panel (宝塔面板). They share the same codebase and the same App Store architecture, but aaPanel ships with English documentation, English-language App Store metadata, and the forum.aapanel.com support community. BT Panel is Chinese-first and some App Store entries are region-specific (payment processors, CDN providers). For English-speaking users, aaPanel is the correct edition.

    Can I run aaPanel alongside an existing LAMP stack?

    No. aaPanel installs its own Nginx, Apache, PHP, and MariaDB builds into /www/server/ and expects to manage them exclusively. Installing on a server that already has Apache, Nginx, or MySQL from apt will cause port conflicts and confuse the panel. Always install on a clean Ubuntu 24.04 system. If you need to migrate an existing site, install aaPanel fresh on a new server, use the Website > Migrate tool, then decommission the old box.

    How many websites can one aaPanel server host?

    It depends on traffic and resources, not on any panel limit — aaPanel itself has no account cap. As a rough guide:

    • 1 GB RAM VPS -- 1-3 low-traffic WordPress sites
    • 4 GB RAM VPS -- 10-20 WordPress sites with Redis object cache
    • 8 GB RAM VPS -- 30-50 WordPress sites or 5-10 busy ecommerce sites
    • 16 GB+ RAM VPS -- 100+ low-traffic sites or dedicated ecommerce
    The real bottlenecks are MariaDB's innodb_buffer_pool_size and PHP-FPM worker counts. Monitor memory in the aaPanel Monitor tab and scale up when swap starts getting used.

    How do I migrate a WordPress site into aaPanel?

    Three options, in order of ease:

  • App Store > Migration API (between aaPanel servers) — Install the same plugin on both boxes, enter the destination API key, pick the site, and start the transfer. aaPanel handles files, database, DNS instructions, and SSL reissuance.
  • Duplicator / All-in-One WP Migration plugin — Export from the old host, create an empty site in aaPanel, upload the migration archive, and restore.
  • Manual rsync + mysqldump — rsync the files to /www/wwwroot/example.com, dump the old database with mysqldump, import through phpMyAdmin. Fastest for experienced admins and large sites.
  • How does aaPanel compare to CyberPanel and HestiaCP?

    aaPanel — Largest App Store, most polished UI, best for WordPress/CMS hosting and general-purpose use. Runs on OpenLiteSpeed if installed that way, but Nginx is the default.

    CyberPanel — Built around OpenLiteSpeed and LSCache. Best pure-speed WordPress experience thanks to LiteSpeed Cache, but smaller plugin ecosystem and a rougher UI.

    HestiaCP — Fork of VestaCP focused on simplicity and low resource usage. Fewer one-click apps, no Docker GUI, but rock-solid for straightforward shared hosting.

    For most DM and agency use cases — multiple CMS sites, Docker, backups to S3, Let's Encrypt, occasional custom Node.js or Python app — aaPanel is the best fit.

    Next Steps

    Now that aaPanel is running on your VPS, here are recommended next steps to get the most from your setup:

    • Install Redis and enable object caching -- From App Store > Runtime > Redis. Pair it with the Redis Object Cache plugin in WordPress for 3-10x faster admin and logged-in page loads.
    • Put Cloudflare in front of your sites -- Point your domain's nameservers at Cloudflare, enable the free tier, and turn on Full (strict) SSL mode. You get free DDoS protection, a global CDN, and analytics without changing anything on the VPS.
    • Set up Uptime Kuma for monitoring -- Deploy Uptime Kuma via the Docker Manager and monitor each site plus the aaPanel port. Alert to email, Slack, or Discord when anything goes down.
    • Try the App Store's WAF plugin -- The free Nginx WAF module blocks SQL injection, XSS, and common CMS attack patterns. Enable it per-site from Website > Settings > WAF.
    • Read the aaPanel forum -- forum.aapanel.com is active and English-speaking. Most questions already have answers, and the aaPanel team responds to bug reports within a day or two.
    • Explore the full App Store -- Browse www.aapanel.com for new plugins. Recent additions include AI-powered log analysis, WireGuard VPN, and automated NextCloud hardening.

    Skip the Manual Install -- Get aaPanel Pre-Installed
    >
    Our CloudCore Starter VPS plans come with aaPanel, an LNMP stack, and SSL automation pre-configured. Deploy in 60 seconds and start hosting immediately.
    >
    - aaPanel 7.x with random port and random entrance pre-set
    - Nginx, PHP 8.2, MariaDB 10.11, and phpMyAdmin installed
    - UFW preconfigured to allow only essential ports
    - Automatic Ubuntu security updates enabled
    - Optional WordPress or NextCloud pre-deployment at checkout
    >
    Deploy Your CloudCore Starter VPS Now -- Plans start at EUR 7.99/month.

    Was this article helpful?

    ← Back to Install GuidesBrowse all categories →

    Still have questions?

    Contact Support →Submit a Ticket