Self-hosted platform for deploying web applications

NEBULA 🌌

Self-hosted platform for deploying web applications on modest hardware

Status Docker Ubuntu License

A lightweight alternative to Heroku, Render, or Vercel β€” built for small teams, developers, and homelabs who want full control without recurring SaaS costs.


🎯 What is NEBULA?

NEBULA is a self-managed server platform that lets you deploy and manage web applications using Docker containers on hardware as modest as 2 vCPU / 4 GB RAM. It integrates:

  • πŸ” Automatic SSL certificates via Let’s Encrypt
  • πŸ“Š Real-time monitoring with Netdata (consuming ~100-200 MB RAM)
  • πŸ›‘οΈ Security hardening with UFW firewall, Fail2Ban, and SSH key-only access
  • 🐳 Docker-based deployments for portability and isolation

Perfect for startups, homelab enthusiasts, or anyone tired of vendor lock-in.


✨ Key Features

FeatureDescription
Zero SaaS CostsHost on your own VPS or hardware β€” pay only for the server
Data SovereigntyYour data stays under your control, always
Lightweight MonitoringNetdata uses up to 88% less RAM than Prometheus in low-scale setups
Automated SSLLet’s Encrypt certificates renew automatically via Nginx Proxy Manager
Battle-Tested SecuritySSH hardening, firewall rules, and intrusion prevention out of the box

πŸ—οΈ Architecture

Internet β†’ UFW Firewall β†’ Nginx Proxy Manager (SSL) β†’ Docker Containers
                                                         β”œβ”€ App 1
                                                         β”œβ”€ App 2
                                                         └─ Netdata (Monitoring)

Tech Stack:

  • OS: Ubuntu 24.04 LTS (kernel 6.8.0-90 recommended for stability)
  • Containerization: Docker Engine + Docker Compose v2
  • Reverse Proxy: Nginx Proxy Manager
  • Monitoring: Netdata Agent
  • Security: UFW, Fail2Ban, SSH with public key authentication

πŸš€ Quick Start

Prerequisites

  • Ubuntu 24.04 LTS server (VPS or local)
  • Root/sudo access
  • Domain name (optional, can use IP or DuckDNS)

Installation

# Clone the repository
git clone https://github.com/MohamedKamil-hub/nebula-selfhosted-paas.git
cd nebula-selfhosted-paas

# Copy environment template
cp .env.example .env

# Edit with your configuration
nano .env

# Run the complete setup script
sudo ./scripts/setup_nebula_complete.sh

# Start services
docker compose up -d

That’s it! Access your monitoring dashboard at http://your-server-ip:19999


πŸ“‚ Project Structure

nebula-selfhosted-paas/
β”œβ”€β”€ apps/                    # Example applications
β”‚   β”œβ”€β”€ python-app/         
β”‚   β”œβ”€β”€ static-web/         
β”‚   └── wordpress-app/      
β”œβ”€β”€ config/                  # Configuration files
β”‚   β”œβ”€β”€ fail2ban/           # Intrusion prevention rules
β”‚   β”œβ”€β”€ netdata/            # Monitoring configuration
β”‚   β”œβ”€β”€ nginx/              # Reverse proxy settings
β”‚   └── ssh/                # SSH hardening configs
β”œβ”€β”€ docs/                    # Documentation & diagrams
β”œβ”€β”€ infrastructure/          # Docker compose files
β”‚   └── docker/
β”‚       β”œβ”€β”€ apps/           # Application containers
β”‚       └── monitoring/     # Monitoring stack
β”œβ”€β”€ scripts/                 # Automation scripts
β”‚   β”œβ”€β”€ deploy.sh           # App deployment helper
β”‚   └── setup_nebula_complete.sh  # Initial server setup
β”œβ”€β”€ tests/                   # Test suites
β”‚   β”œβ”€β”€ integration/
β”‚   β”œβ”€β”€ load/
β”‚   └── security/
β”œβ”€β”€ docker-compose.yml       # Main compose file
β”œβ”€β”€ docker-compose.prod.yml  # Production overrides
└── .env.example            # Environment template

πŸŽ“ About This Project

NEBULA was developed as part of a Systems and Networks final project (2ΒΊ SMR, Curso 2025-2026) to demonstrate:

  • Infrastructure as Code (IaC) best practices
  • Docker containerization and orchestration
  • Linux server hardening and security
  • DevOps workflows with Git version control

Objectives achieved:

  • βœ… Deploy multiple containerized apps with <200 MB monitoring overhead
  • βœ… Implement automatic SSL certificate management
  • βœ… Provide real-time observability without complex setup
  • βœ… Achieve full data sovereignty at minimal cost

πŸ“Š Performance Benchmarks

MetricNEBULA (Netdata)Alternative (Prometheus)
RAM Usage (Idle)~150 MB~800-1200 MB
Dashboard Load Time<3 seconds5-10 seconds
Configuration ComplexityOne-line installMulti-step setup
Data RetentionReal-time onlyRequires persistent storage

Benchmarks based on 2 vCPU / 4 GB RAM VPS running 2-3 containerized apps


πŸ”’ Security Features

  • SSH Hardening: Key-only authentication, non-standard port, root login disabled
  • Firewall Rules: UFW blocks all ports except 80, 443, and custom SSH
  • Intrusion Prevention: Fail2Ban auto-bans IPs after 5 failed login attempts
  • Container Isolation: Docker namespaces and cgroups prevent privilege escalation
  • Automatic Updates: Let’s Encrypt certificates renew every 90 days

🀝 Contributing

This project welcomes contributions! To get started:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘€ Author

Mohamed Kamil El Kouarti Mechhidan
Student, 2ΒΊ SMR PROMETEO by thePower
Project Tutor: RaΓΊl

πŸ“§ Contact: GitHub Profile


πŸ™ Acknowledgments

  • Netdata for lightweight, real-time monitoring
  • Docker for containerization simplicity
  • Nginx Proxy Manager for making SSL management painless
  • Let’s Encrypt for free SSL certificates
  • The open-source community for making self-hosting accessible

**⭐ If you find NEBULA useful, consider starring the repo!** Made with ❀️ for students, developers, and self-hosting enthusiasts