Self-hosted platform for deploying web applications
NEBULA π
Self-hosted platform for deploying web applications on modest hardware
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
| Feature | Description |
|---|---|
| Zero SaaS Costs | Host on your own VPS or hardware β pay only for the server |
| Data Sovereignty | Your data stays under your control, always |
| Lightweight Monitoring | Netdata uses up to 88% less RAM than Prometheus in low-scale setups |
| Automated SSL | Letβs Encrypt certificates renew automatically via Nginx Proxy Manager |
| Battle-Tested Security | SSH 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
| Metric | NEBULA (Netdata) | Alternative (Prometheus) |
|---|---|---|
| RAM Usage (Idle) | ~150 MB | ~800-1200 MB |
| Dashboard Load Time | <3 seconds | 5-10 seconds |
| Configuration Complexity | One-line install | Multi-step setup |
| Data Retention | Real-time only | Requires 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:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - 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
