{"id":25332213,"url":"https://github.com/malekmiladi/project-nebula","last_synced_at":"2026-04-14T14:32:17.912Z","repository":{"id":273243900,"uuid":"911262169","full_name":"malekmiladi/project-nebula","owner":"malekmiladi","description":"An Infrastructure as a Service private cloud computing platform.","archived":false,"fork":false,"pushed_at":"2025-02-23T18:06:47.000Z","size":372,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-08T06:42:01.360Z","etag":null,"topics":["cloud-computing","design-patterns","fastapi","grpc","infrastructure-as-service","java","kafka","kvm","libvirt","microservices","postgresql","python","spring-boot","sql"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/malekmiladi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-02T15:56:52.000Z","updated_at":"2025-02-23T18:06:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"4fef8e36-d0b7-493a-b2ad-c15f55ce72b4","html_url":"https://github.com/malekmiladi/project-nebula","commit_stats":null,"previous_names":["malekmiladi/project-nebula"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/malekmiladi/project-nebula","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malekmiladi%2Fproject-nebula","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malekmiladi%2Fproject-nebula/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malekmiladi%2Fproject-nebula/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malekmiladi%2Fproject-nebula/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malekmiladi","download_url":"https://codeload.github.com/malekmiladi/project-nebula/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malekmiladi%2Fproject-nebula/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31801299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-computing","design-patterns","fastapi","grpc","infrastructure-as-service","java","kafka","kvm","libvirt","microservices","postgresql","python","spring-boot","sql"],"created_at":"2025-02-14T04:31:30.511Z","updated_at":"2026-04-14T14:32:17.884Z","avatar_url":"https://github.com/malekmiladi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Presentation\n\nAn Infrastructure as a Service cloud computing platform.\n\nThe application is made of 4 microservices + the vm instance itself:\n\n- compute-manager:\n  Manages user projects, takes in user's VM configuration and sends it to an orchestrator and a data source.\n  Maps VMs to their respective names, descriptions, projects, tags, users, regions, CPU counts, storage sizes and ram sizes.\n- compute-orchestrator:\n  Manages compute nodes. Takes in VM specs (only CPU count, RAM, storage size and region), a UUID and a token from vm-manager, finds a suitable compute node, and uses gRPC to create and spin up the VM instance. It also uses gRPC to issue VM shutdown/start/restart requests.\n- cloud-data-source:\n  Stores user's instance configuration.\n  Receives a UUID and a hashed input from the compute-manager, and stores it. Sends back a token.\n- compute-node:\n  Installed on machines with spare cpu, memory and storage resources.\n  Registers to the compute-orchestrator, and sends a periodic heartbeat.\n  Takes in VM specs (CPU counts, RAM, storage size) a UUID and a token.\n  Creates an XML description of the VM instance which is then handled by libvirt to spin up a new VM instance.\n  The XML config contains an encoded url to the cloud-data-source with the instance's predefined UUID and the token passed down by the compute-orchestrator.\n- Virtual Machine:\n  Once spun up, leverages the \"cloud-init\" method for fetching the user's configuration.\n  Ideally, the image used is a preinstalled distribution with an additional configuration to \"cloud-init\" where you implement how the mechanism would contact the cloud data source, how to authenticate, how to take in the data and pre-process it (decrypt, parse, etc...).\n  For simplicity, I opted in building a \"dumb\" implementation of this part (no hashing of data, no fancy auth method - auth uses a forever valid token for each instance).\n\n## Architecture\n```\n                               ┌───────────────┐\n                               │ message queue │\n                               │    (kafka)    │\n                               └───────┬───────┘\n                                       │ topic1 ┌───────────────────┐ REST API\n                                       │───────►│ cloud-data-source │◄──────────────┐\n  ┌────────┐  ┌─────────────────┐ msg1 │        └───────────────────┘               │\n  │ client │─►│ compute-manager │─────►│                                            │\n  └────────┘  └─────────────────┘ msg2 │ topic2  ┌──────────────────────┐           │\n                                       │────────►│ compute-orchestrator │           │\n                                       │         └───────────┬──────────┘           │\n                                                             │                      │\n                                                             │ gRPC                 │\n                    db                                       │                      │\n              ┌────────────┐                                 ▼                      ▼\n              │ postgreSQL │                           ┌──────────────┐    ┌─────────────────┐\n              └─────┬──────┘                           │ compute-node │───►│ virtual machine │\n                    │──────► compute-manager           └──────────────┘    └─────────────────┘\n                    │──────► compute-orchestrator\n\n              ┌────────────┐\n              │   CouchDb  │\n              └─────┬──────┘\n                    │──────► cloud-data-source\n```\n\n## Tech stack\n\nJava - Python - TypeScript - Spring Boot - FastAPI - Angular - gRPC - Kafka - KVM - Libvirt - PostgreSQL - CouchDB\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalekmiladi%2Fproject-nebula","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalekmiladi%2Fproject-nebula","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalekmiladi%2Fproject-nebula/lists"}