Skip to content

Project Outline

Said Ghamra edited this page Jan 25, 2021 · 25 revisions

Description

AgoraCloud is an open source and self hosted cloud coding platform that runs on any Kubernetes cluster.

It allows developers to move their coding workspaces to the cloud, accessible through any browser.

It gives developers the ability to instantly spin up VS Code instances, with the specified amount of resources (cpu and memory).

With AgoraCloud, teams and developers also have the ability to store documentation in the provided wiki and manage tasks.

Project Type

AgoraCloud is a type 2 project and is aimed towards the open market.

Team Members and Roles

Member Name Project Manager Business Analyst QA Manager Architect Build Manager Lead Developer
Said Ghamra
Waleed Zafar
Marc Frame

Objectives

Benefit to Customers

  • Centralizes the creation and management of development workspaces.
  • Allows developers to leverage virtually unlimited resources in the cloud, anywhere, anytime.
  • Negates the need for powerful laptops and workstations.
  • Accessible through virtually any modern web browser.
  • Data is securely stored in the Kubernetes cluster, instead of being stored on the developers machine.
  • Highly available, fault tolerant and deployable on any Kubernetes cluster.

Key Things to Accomplish

  • Server is able to communicate with the Kubernetes API and CRUD secrets, configmaps, services and deployments for code-server containers.
  • Server is able to proxy all connections to the relevant code-server containers running in the Kubernetes cluster.
  • Basic project management and wiki functionality.
  • Deployable on any Kubernetes cluster through a Helm chart.
  • UI is intuitive, fast and easy to use.
  • Automated testing and CI/CD.

Success Criteria

  • Users are able to access VS Code, as if it were running natively on their computer, through the browser or PWA.
  • Users are able to document and manage their projects through the provided wiki and project management tools.
  • Achieve at-least 80% branch coverage.
  • Automated Docker image building and publishing.
  • New release every week.
  • Good documentation.

Architecture

High Level Overview

AgoraCloud Architecture

As seen above, AgoraCloud will be split into two containers, the server and ui. Both the server and ui containers are dockerized, published to DockerHub and deployed on a Kubernetes cluster through the provided Helm chart.

The docker containers support multiple architectures (amd64, arm64 and arm/v7), allowing AgoraCloud to run on virtually any Kubernetes cluster.

Server Architecture

AgoraClouds backend is built using Nestjs (Nodejs framework) and Typescript. It utilizes MongoDB as a datastore. The server will handle tasks such as authentication, authorization, APIs, communication with the Kubernetes API through the Kubernetes-Client package to CRUD secrets, configmaps, services and deployments and proxying authenticated connections to the code-server containers.

UI Architecture

AgoraClouds frontend is built using React and Typescript. The react application will be a PWA, giving users the ability to access the AgoraCloud platform like any other desktop app, if they choose to do so.

UML Class Diagram

AgoraCloud Class Diagram

Note: The class diagram is not complete and will be updated as development progresses.

Anticipated Risks

None.

Legal and Social Issues

None.

Initial Plans for First Release, Tool Setup, ...

The AgoraCloud GitHub organization is split into two teams, the frontend and backend team. Each team has their own repository, where they store code, manage tasks and issues, build and release. This was done to create as little friction as possible between the two teams and accelerate development efforts.

All documentation pertaining to the Capstone I course will be stored in the agoracloud/server wiki.

The two repositories:

As for releases and tooling, GitHub will be used for everything:

  • Repository: GitHub
  • Task Management: GitHub Projects/Issues
  • Wiki: GitHub Wiki
  • CI/CD: GitHub Actions/Workflows

At the time of writing (January 20, 2021):

  • Each repository will have two branches: main and develop.
  • Feature branches will be merged into the develop branch through pull requests.
  • A second pull request will be opened from the develop branch into the main branch.
  • When the pull request is approved and merged into main, the configured GitHub workflow will run, building the necessary containers and publishing them to DockerHub.
  • Both Docker images are tagged as latest and are not versioned yet.
  • In a few weeks, we plan on introducing pull request checks (build, test and lint) for the main and develop branches for both repositories. This will be implemented when tests have been written.

The Docker images can be found here:

Clone this wiki locally