{"id":37,"date":"2026-03-27T15:36:51","date_gmt":"2026-03-27T15:36:51","guid":{"rendered":"https:\/\/kr0311.com\/projects\/?p=37"},"modified":"2026-04-02T10:27:07","modified_gmt":"2026-04-02T10:27:07","slug":"custom-hosting-control-panel-build-phase-1","status":"publish","type":"post","link":"https:\/\/kr0311.com\/projects\/custom-hosting-control-panel-build-phase-1\/","title":{"rendered":"Phase 1: Base OS &amp; Stack Foundation"},"content":{"rendered":"<h2>\ud83d\ude80 Building the KR0311 Control Panel<\/h2>\n<p>The KR0311 platform is now live \u2014 and this is where it all begins.<\/p>\n<p><strong>KR0311 Build Series<\/strong><\/p>\n<p>This is <strong>Phase 1<\/strong> of a custom hosting control panel build \u2014 designed to manage hosting, infrastructure, and automation without relying on traditional panels.<\/p>\n<p>Before any UI, dashboards, or shiny features\u2026 we start with something far more important.<\/p>\n<p><strong>A solid, secure, production-ready foundation.<\/strong><\/p>\n<p>This isn\u2019t just about spinning up a server and hoping for the best.<\/p>\n<p>It\u2019s about building something we fully understand, fully control, and can scale without hitting a mysterious wall later labelled \u201clegacy issue\u201d.<\/p>\n<p>No shortcuts. No black boxes. Just doing it properly\u2026 the slightly painful way.<\/p>\n<hr \/>\n<h2>\ud83e\udde0 What is the KR0311 Control Panel?<\/h2>\n<p>This isn\u2019t just another web project that looks nice until you open the terminal.<\/p>\n<p>The KR0311 Control Panel is being built to:<\/p>\n<ul>\n<li>Manage hosting accounts and websites<\/li>\n<li>Automate provisioning (Nginx, PHP, system users)<\/li>\n<li>Provide a clean admin and client interface<\/li>\n<li>Remove reliance on traditional control panels<\/li>\n<\/ul>\n<p>The entire platform is being built on a solid, proven stack:<\/p>\n<ul>\n<li><strong>Laravel<\/strong> (backend framework)<\/li>\n<li><strong>Nginx<\/strong> (web server)<\/li>\n<li><strong>MariaDB<\/strong> (database)<\/li>\n<li><strong>Redis<\/strong> (queues &amp; caching)<\/li>\n<\/ul>\n<p>This isn\u2019t just a UI slapped on top of a server.<\/p>\n<p><strong>It\u2019s a full infrastructure-driven platform.<\/strong><\/p>\n<p>Which also means\u2026 when something breaks, it\u2019s definitely our fault.<\/p>\n<h2>\ud83d\udda5\ufe0f Development Environment Setup<\/h2>\n<p>This control panel is being built inside a dedicated internal environment.<\/p>\n<p>Nothing public. Nothing exposed. No unnecessary risk.<\/p>\n<ul>\n<li><strong>Operating System:<\/strong> Ubuntu 24.04 LTS<\/li>\n<li><strong>Access:<\/strong> Internal only (not publicly exposed) while in development<\/li>\n<li><strong>Purpose:<\/strong> Development and testing<\/li>\n<\/ul>\n<p>This gives full control, isolation, and the freedom to break things safely\u2026 which, let\u2019s be honest, is absolutely going to happen.<\/p>\n<figure style=\"max-width: 600px;margin: 20px auto;text-align: center\">\n  <img decoding=\"async\" src=\"https:\/\/kr0311.com\/projects\/wp-content\/uploads\/2026\/04\/Development-Rack.jpeg\" alt=\"custom hosting control panel build phase 1 development rack\" style=\"width: 100%;height: auto;border-radius: 10px\" \/><figcaption style=\"font-size: 0.9em;opacity: 0.8;margin-top: 8px\">\n    Development environment rack used for the KR0311 control panel build<br \/>\n  <\/figcaption><\/figure>\n<h2>\ud83d\udd12 Security First \u2013 Not an Afterthought<\/h2>\n<p>Security isn\u2019t something being bolted on later after a mild panic.<\/p>\n<p>It\u2019s part of the foundation from the very beginning.<\/p>\n<p>The system was configured with:<\/p>\n<ul>\n<li>A dedicated sudo user (no direct root usage)<\/li>\n<li>SSH hardened (no password login, no root access)<\/li>\n<li>Firewall enabled with restricted ports only<\/li>\n<li>Fail2Ban protection against brute-force attempts<\/li>\n<li>Internal-only access during development<\/li>\n<\/ul>\n<p>This ensures the platform is secure <strong>before any application code is even deployed.<\/strong><\/p>\n<p>Because nothing ruins your day quite like securing a system after it\u2019s already been \u201cvisited\u201d.<\/p>\n<p>This stage of the custom hosting control panel build focuses on getting everything stable, secure, and ready for future automation.<\/p>\n<p>This phase lays the foundation for the custom hosting control panel build, ensuring everything is stable before moving into application-level development.<\/p>\n<h2>\u2699\ufe0f Core Stack Installed<\/h2>\n<p>With the base system secured, the next step was installing a clean, production-ready stack.<\/p>\n<p>Nothing flashy \u2014 just reliable components that won\u2019t randomly ruin your evening later.<\/p>\n<h3>\ud83c\udf10 Nginx Web Server<\/h3>\n<p>A fast, lightweight, and production-proven web server used to serve the application.<\/p>\n<p>Basically: it just works\u2026 which is exactly what we want.<\/p>\n<h3>\ud83d\udc18 PHP 8.3 (PHP-FPM)<\/h3>\n<p>The latest stable PHP version compatible with Laravel.<\/p>\n<p>Installed with required extensions including:<\/p>\n<ul>\n<li>mbstring<\/li>\n<li>xml<\/li>\n<li>curl<\/li>\n<li>mysql<\/li>\n<li>zip<\/li>\n<li>bcmath<\/li>\n<li>intl<\/li>\n<\/ul>\n<p>No missing extensions. No mysterious white screens. No guessing games.<\/p>\n<h3>\ud83d\uddc4\ufe0f MariaDB Database<\/h3>\n<p>A secure and reliable database engine configured with:<\/p>\n<ul>\n<li>No remote root access<\/li>\n<li>No test databases<\/li>\n<li>No anonymous users<\/li>\n<\/ul>\n<p>In other words: none of the stuff you forget about until it becomes a problem.<\/p>\n<h3>\u26a1 Redis (Caching &amp; Queues)<\/h3>\n<p>Redis is being introduced early so we don\u2019t have to awkwardly bolt it on later when everything already depends on something else.<\/p>\n<p>It will power:<\/p>\n<ul>\n<li>Background job queues<\/li>\n<li>Application caching<\/li>\n<li>Future real-time features<\/li>\n<\/ul>\n<h3>\ud83d\udce6 Composer<\/h3>\n<p>Used to manage Laravel dependencies and PHP packages globally.<\/p>\n<p>Without it, nothing works. With it, everything works\u2026 until you update something.<\/p>\n<h3>\ud83e\uddf0 Node.js &amp; npm<\/h3>\n<p>Installed to support modern frontend tooling such as:<\/p>\n<ul>\n<li>Vite<\/li>\n<li>Asset compilation<\/li>\n<li>JavaScript dependencies<\/li>\n<\/ul>\n<p>Because at some point, the frontend will absolutely demand it.<\/p>\n<p>For reference, the official Ubuntu Server documentation is available here: <a href=\"https:\/\/ubuntu.com\/server\/docs\" target=\"_blank\" rel=\"noopener\">Ubuntu Server documentation<\/a>.<\/p>\n<h3>\ud83d\udd27 Supporting Tools<\/h3>\n<p>Additional tools installed include:<\/p>\n<ul>\n<li>Git (version control)<\/li>\n<li>Fail2Ban (security)<\/li>\n<li>UFW Firewall<\/li>\n<li>System utilities (curl, htop, etc.)<\/li>\n<\/ul>\n<hr \/>\n<p>Getting the stack installed is one thing.<\/p>\n<p>Making sure it\u2019s secure before anything else touches it is where most people start cutting corners.<\/p>\n<p>We didn\u2019t.<\/p>\n<h2>\ud83d\udd10 Hardening the System<\/h2>\n<p>With everything in place, the next step was tightening it all down.<\/p>\n<p>This is about reducing risk now \u2014 not firefighting later at 2am.<\/p>\n<h3>\ud83d\udd10 SSH Lockdown<\/h3>\n<ul>\n<li>Root login disabled<\/li>\n<li>Password authentication disabled<\/li>\n<li>Key-based authentication enforced<\/li>\n<\/ul>\n<p>Only trusted access. No guessing. No brute force attempts getting lucky.<\/p>\n<h3>\ud83d\udd25 Firewall Strategy (UFW)<\/h3>\n<p>Only essential ports are open right now:<\/p>\n<ul>\n<li>22 (SSH)<\/li>\n<li>80 (HTTP)<\/li>\n<li>443 (HTTPS)<\/li>\n<\/ul>\n<p>Everything else is blocked by default.<\/p>\n<p>This is deliberate.<\/p>\n<p>At this stage, the system is still evolving \u2014 so we\u2019re keeping the attack surface as small as possible.<\/p>\n<p>As new services are introduced later, only the required ports will be opened \u2014 nothing more, nothing less.<\/p>\n<p>No \u201copen everything and see what happens\u201d strategy here.<\/p>\n<h3>\ud83d\udeab Fail2Ban Protection<\/h3>\n<p>Fail2Ban is active and monitoring login attempts, automatically blocking suspicious activity.<\/p>\n<p>If something starts hammering the server, it gets shut down pretty quickly.<\/p>\n<p>As it should.<\/p>\n<h2>\ud83e\uddea Service Validation<\/h2>\n<p>Before moving forward, everything was tested to confirm a clean working environment.<\/p>\n<p>If anything was broken at this stage, now was the time to find out \u2014 not three phases later when everything depends on it.<\/p>\n<ul>\n<li>Nginx serving pages correctly<\/li>\n<li>PHP-FPM processing requests<\/li>\n<li>MariaDB accessible and secure<\/li>\n<li>Redis responding successfully<\/li>\n<li>Node.js and npm functioning<\/li>\n<li>Composer installed and working<\/li>\n<\/ul>\n<p>At this point, the system is no longer \u201cjust a VM\u201d.<\/p>\n<p><strong>It\u2019s a fully operational application platform.<\/strong><\/p>\n<p>Which is both exciting\u2026 and slightly dangerous.<\/p>\n<h2>\ud83e\uddf1 Why This Phase Matters<\/h2>\n<p>This phase might not look exciting from the outside \u2014 no UI, no dashboards, nothing flashy.<\/p>\n<p>But this is where most projects quietly set themselves up for failure.<\/p>\n<p>By doing this properly, we now have:<\/p>\n<ul>\n<li>A secure Linux server foundation<\/li>\n<li>A complete production-ready stack<\/li>\n<li>Clean project structure<\/li>\n<li>Proper system configuration<\/li>\n<\/ul>\n<p>Everything moving forward builds on this.<\/p>\n<p>This is where most people rush.<\/p>\n<p><strong>We didn\u2019t.<\/strong><\/p>\n<p>Future us will be very grateful for that.<\/p>\n<p>At this point, the custom hosting control panel build has a stable and secure foundation to build on in the next phase.<\/p>\n<hr \/>\n<h2>\ud83d\udd1c What\u2019s Next \u2013 Phase 2<\/h2>\n<p>With the base system complete, the next step is where things start to come to life.<\/p>\n<p><strong>Phase 2 will include:<\/strong><\/p>\n<ul>\n<li>Installing Laravel<\/li>\n<li>Configuring the application environment<\/li>\n<li>Connecting MariaDB<\/li>\n<li>Setting up Nginx for the panel<\/li>\n<li>Running the first version of the control panel<\/li>\n<\/ul>\n<p><em>This is where things stop being \u201cinfrastructure\u201d and start becoming an actual product.<\/em><\/p>\n<hr \/>\n<h2>\ud83d\udccc Final Thoughts<\/h2>\n<p>Every platform starts somewhere.<\/p>\n<p>This is the first real step in building the KR0311 Control Panel \u2014 not just as an idea, but as a working system.<\/p>\n<p>Built properly. Built securely. Built to scale from day one.<\/p>\n<p>No shortcuts.<\/p>\n<p>Just a solid foundation\u2026 and a lot more work to come.<\/p>\n<h2>\ud83d\udd17 Follow the Build<\/h2>\n<p>This project is being built step by step as part of the KR0311 Control Panel series.<\/p>\n<p>If you want to follow along:<\/p>\n<ul>\n<li>\ud83d\udc49 Browse all updates in the <a href=\"https:\/\/kr0311.com\/projects\/\"><strong>Projects &amp; Updates<\/strong><\/a> section<\/li>\n<li>\ud83d\udc49 View every phase in the <a href=\"https:\/\/kr0311.com\/projects\/category\/control-panel\/\"><strong>Control Panel build series<\/strong><\/a><\/li>\n<\/ul>\n<p>Each phase builds on the last \u2014 from infrastructure and provisioning through to a fully functional hosting platform.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Phase 1 of the KR0311 Control Panel build: Ubuntu setup, security hardening, and installing the core stack that forms the foundation of the platform.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[19,20,10,29,13,26,24,25,27,28,21,23,22],"class_list":["post-37","post","type-post","status-publish","format-standard","hentry","category-control-panel","tag-control-panel","tag-custom-hosting-control-panel","tag-homelab","tag-hosting-infrastructure","tag-linux","tag-mariadb","tag-nginx","tag-php","tag-redis","tag-security-hardening","tag-self-hosted","tag-server-setup","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":4,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":87,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/posts\/37\/revisions\/87"}],"wp:attachment":[{"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kr0311.com\/projects\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}