{"id":196,"date":"2026-06-02T18:18:06","date_gmt":"2026-06-02T18:18:06","guid":{"rendered":"https:\/\/blog.offshorekaka.in\/?p=196"},"modified":"2026-08-27T05:43:41","modified_gmt":"2026-08-27T05:43:41","slug":"install-aapanel-on-offshore-vps","status":"publish","type":"post","link":"https:\/\/offshorekaka.in\/blog\/install-aapanel-on-offshore-vps\/","title":{"rendered":"How to Install aaPanel on an Offshore VPS"},"content":{"rendered":"<div class=\"ok-pro-panel\">\n<p><span class=\"ok-pro-kicker\">Installation Guides<\/span><\/p>\n<h2>A free panel that installs in ten minutes<\/h2>\n<p>aaPanel gives you a web interface for sites, databases, certificates, cron jobs and backups on an <a href=\"https:\/\/offshorekaka.in\/offshore-vps-server\/\">offshore VPS<\/a>, without a licence fee. For one person running a handful of sites it covers most of what cPanel does.<\/p>\n<p>The single most important thing about the install is the output at the end. It prints a URL with a random path, a username and a password, and it prints them once. Copy them somewhere before you close that terminal.<\/p>\n<div class=\"ok-pro-grid\">\n<div class=\"ok-pro-card\"><strong>Time<\/strong><span>10 minutes.<\/span><\/div>\n<div class=\"ok-pro-card\"><strong>Cost<\/strong><span>Free. Paid add-ons are optional.<\/span><\/div>\n<div class=\"ok-pro-card\"><strong>Needs<\/strong><span>A clean server, 1GB RAM minimum.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"ok-toc\"><strong>On this page<\/strong><a href=\"#install\">Installing<\/a><a href=\"#login\">The login details<\/a><a href=\"#lock\">Locking the panel down<\/a><a href=\"#stack\">Choosing the stack<\/a><a href=\"#site\">Adding a site<\/a><a href=\"#faq\">FAQ<\/a><\/div>\n<h2 id=\"install\">Installing<\/h2>\n<p>Start on a fresh server. Like any panel, aaPanel wants to install and manage nginx, MySQL and PHP itself, and it will conflict with anything already there.<\/p>\n<p>On Ubuntu or Debian:<\/p>\n<pre><code>wget -O install.sh https:\/\/www.aapanel.com\/script\/install-ubuntu_6.0_en.sh\nbash install.sh aapanel<\/code><\/pre>\n<p>On AlmaLinux or Rocky:<\/p>\n<pre><code>yum install -y wget\nwget -O install.sh https:\/\/www.aapanel.com\/script\/install_6.0_en.sh\nbash install.sh aapanel<\/code><\/pre>\n<p>It runs for a few minutes and finishes by printing the panel address, username and password.<\/p>\n<h2 id=\"login\">The login details<\/h2>\n<p>The panel URL includes a random path, something like <code>http:\/\/your-server-ip:8888\/a1b2c3d4<\/code>. That path is a security measure: without it the port answers nothing useful. It also means losing it is genuinely inconvenient.<\/p>\n<p>If you did lose it, you can print everything again from SSH:<\/p>\n<pre><code>bt default<\/code><\/pre>\n<p>And reset the password if you need to:<\/p>\n<pre><code>bt 5<\/code><\/pre>\n<p>The <code>bt<\/code> command is the panel&#8217;s own management tool and it is worth knowing. <code>bt<\/code> on its own lists what it can do, including restarting the panel and changing the port.<\/p>\n<h2 id=\"lock\">Locking the panel down<\/h2>\n<p>Do this before you host anything. A control panel on a public port is a root level login form facing the internet.<\/p>\n<pre><code>ufw allow from 203.0.113.5 to any port 8888 proto tcp\nufw allow 80\/tcp\nufw allow 443\/tcp\nufw enable<\/code><\/pre>\n<figure class=\"wp-block-image size-large ok-inline-visual\"><img decoding=\"async\" src=\"https:\/\/offshorekaka.in\/blog\/wp-content\/uploads\/2026\/08\/ok-firewall-ufw-status.webp\" alt=\"UFW status showing incoming denied by default with only the needed ports allowed\" loading=\"lazy\" width=\"2296\" height=\"824\"><figcaption>The panel port restricted to one IP, everything else denied.<\/figcaption><\/figure>\n<p>Then, inside the panel settings, do three more things:<\/p>\n<ul>\n<li><strong>Change the port<\/strong> from the default 8888 to something else.<\/li>\n<li><strong>Turn on BasicAuth<\/strong>, which adds a second password prompt before the panel even loads.<\/li>\n<li><strong>Set an IP allowlist<\/strong> in the panel&#8217;s own security section, as a second layer behind the firewall.<\/li>\n<\/ul>\n<p>Also note that aaPanel installs phpMyAdmin on port 888 by default. If you do not use it, turn it off. It is a well known target and it is one more thing to keep patched.<\/p>\n<h2 id=\"stack\">Choosing the stack<\/h2>\n<p>On first login the panel offers to install a stack. Pick <strong>LNMP<\/strong> unless you have a reason not to, since nginx uses noticeably less memory than Apache on a small VPS.<\/p>\n<p>Choose the <strong>fast compiled installation<\/strong> rather than compile from source. Compiling takes an hour or more on a small server, produces the same result for almost everyone, and occasionally fails partway through on a 1GB box.<\/p>\n<p>Pick PHP 8.2 or 8.3, MySQL 8 or MariaDB 10.11, and nginx. You can add other PHP versions later and run different sites on different versions, which is one of the nicer things about a panel.<\/p>\n<h2 id=\"site\">Adding a site<\/h2>\n<p>In Website, click Add site, enter the domain, and let it create the database and the FTP user at the same time. Then use the SSL tab to issue a Let&#8217;s Encrypt certificate, which needs DNS already pointing at the server.<\/p>\n<p>Two settings worth changing straight away on any site you add:<\/p>\n<ul>\n<li><strong>Force HTTPS<\/strong>, in the SSL tab, once the certificate is issued.<\/li>\n<li><strong>The default document<\/strong> and rewrite rules if you are running WordPress. The panel has a WordPress preset in the rewrite section that handles permalinks.<\/li>\n<\/ul>\n<p>Then check what you have actually got running:<\/p>\n<figure class=\"wp-block-image size-large ok-inline-visual\"><img decoding=\"async\" src=\"https:\/\/offshorekaka.in\/blog\/wp-content\/uploads\/2026\/08\/ok-stack-versions.webp\" alt=\"Terminal listing the installed PHP, web server, database and WordPress versions\" loading=\"lazy\" width=\"2296\" height=\"630\"><figcaption>Worth recording. Panels make it easy to forget what version anything is on.<\/figcaption><\/figure>\n<h2 id=\"test\">How to test<\/h2>\n<ol>\n<li>Panel loads on its port from your IP, and not from anywhere else.<\/li>\n<li>A test site loads over HTTP, then over HTTPS after issuing a certificate.<\/li>\n<li>An inner page loads, proving rewrite rules are set.<\/li>\n<li>phpMyAdmin is either off or restricted.<\/li>\n<li>A scheduled backup runs and produces a file with a real size.<\/li>\n<li>Reboot and confirm nginx, MySQL and the panel all come back.<\/li>\n<\/ol>\n<h2 id=\"trouble\">When something breaks<\/h2>\n<table>\n<thead>\n<tr>\n<th>What you see<\/th>\n<th>Why<\/th>\n<th>Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Lost the panel URL or password<\/td>\n<td>Only printed once at install<\/td>\n<td><code>bt default<\/code> over SSH, or <code>bt 5<\/code> to reset<\/td>\n<\/tr>\n<tr>\n<td>Panel unreachable after enabling the firewall<\/td>\n<td>Panel port not allowed<\/td>\n<td><code>bt default<\/code> to find the port, then allow it from your IP<\/td>\n<\/tr>\n<tr>\n<td>Install fails or hangs<\/td>\n<td>Existing web server, or too little RAM to compile<\/td>\n<td>Clean OS, and use the fast compiled option<\/td>\n<\/tr>\n<tr>\n<td>Certificate will not issue<\/td>\n<td>DNS not pointing here yet, or port 80 closed<\/td>\n<td><code>dig +short yourdomain.com<\/code>, then open 80<\/td>\n<\/tr>\n<tr>\n<td>Site homepage works, inner pages 404<\/td>\n<td>Rewrite rules not set for WordPress<\/td>\n<td>Apply the WordPress preset in the site&#8217;s rewrite tab<\/td>\n<\/tr>\n<tr>\n<td>Panel edits to nginx.conf keep disappearing<\/td>\n<td>The panel rewrites its own config files<\/td>\n<td>Make changes through the panel, or in the per-site include file<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"checklist\">Checklist<\/h2>\n<ul>\n<li>Installed on a clean server.<\/li>\n<li>Login URL, username and password saved somewhere safe.<\/li>\n<li>Panel port changed off the default and restricted to your IP.<\/li>\n<li>BasicAuth enabled on the panel.<\/li>\n<li>phpMyAdmin disabled or locked down.<\/li>\n<li>LNMP installed with the fast compiled option.<\/li>\n<li>Certificate issued and HTTPS forced.<\/li>\n<li>Backups scheduled and one restore tested.<\/li>\n<\/ul>\n<div class=\"ok-cta-box\">\n<p><strong>Prefer a panel you do not have to secure yourself?<\/strong><\/p>\n<p>OffshoreKaka shared and reseller plans come with cPanel already configured and maintained, on LiteSpeed servers in Amsterdam and Frankfurt.<\/p>\n<p><a class=\"btn ok-cta-link\" href=\"https:\/\/offshorekaka.in\/offshore-reseller-hosting\/\">See reseller hosting<\/a><\/p>\n<\/div>\n<h2 id=\"faq\">FAQ<\/h2>\n<h3>Is aaPanel really free?<\/h3>\n<p>The panel is. Some plugins inside it are paid, mostly the professional firewall and a few monitoring add-ons. Nothing you need for normal hosting is behind a paywall.<\/p>\n<h3>How does it compare to cPanel?<\/h3>\n<p>cPanel is more polished, has a much larger ecosystem, and is what most hosting companies and clients expect. aaPanel costs nothing and installs in ten minutes. For your own sites, aaPanel is fine. If you are reselling to clients who expect cPanel, use cPanel. Our <a href=\"https:\/\/offshorekaka.in\/blog\/install-cpanel-on-offshore-vps\/\">cPanel install guide<\/a> covers that side, including the parts that are not reversible.<\/p>\n<h3>How much RAM does it need?<\/h3>\n<p>It runs on 1GB but that is tight once MySQL and PHP are also running. 2GB is a more honest minimum for a real site. There is more on sizing in <a href=\"https:\/\/offshorekaka.in\/blog\/choose-offshore-vps-specs\/\">choosing VPS specs<\/a>.<\/p>\n<h3>Does a control panel affect SEO?<\/h3>\n<p>No. Google never sees it. What it affects is how likely you are to keep things updated and backed up, which matters indirectly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A free panel in ten minutes. The login details print once, so this covers what to do when you have already lost them.<\/p>\n","protected":false},"author":1,"featured_media":1020,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-installation-guides"],"_links":{"self":[{"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":5,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":1004,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/posts\/196\/revisions\/1004"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/media\/1020"}],"wp:attachment":[{"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/offshorekaka.in\/blog\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}