Skip to content

Commit

Permalink
added: hivebox project architecture diagram in steps
Browse files Browse the repository at this point in the history
Signed-off-by: Ahmed AbouZaid <[email protected]>
  • Loading branch information
aabouzaid committed Oct 11, 2024
1 parent ee4b591 commit be0fedf
Show file tree
Hide file tree
Showing 11 changed files with 81 additions and 25 deletions.
5 changes: 3 additions & 2 deletions docs/getting-started/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ How to process:
- Follow and implement the requests of each phase in the same order.
- Each stage builds on the previous stage (the phases are continued, not separated).

> **NOTE**
> Each phase of this project is tackled gradually as part of the roadmap modules. But it's also **standalone**, and you can work on it if you have the required knowledge for each phase.
:::note
Each phase of this project is tackled gradually as part of the roadmap modules. But it's also **standalone**, and you can work on it if you have the required knowledge for each phase.
:::

### 3. Mentorship Program

Expand Down
101 changes: 78 additions & 23 deletions docs/projects/hivebox/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
---
title: "Project: Hive Box"
title: "Project - Hive Box"
sidebar_label: "HiveBox"
description: "An industry-grad end-to-end hands-on project to learn DevOps"
description: "An incremental industry-grad end-to-end project to learn DevOps in a hands-on way"
keywords: ["project", "real project", "e2e"]
image: ./hivebox-architecture-preview.png
---

# Project: Hive Box

<img alt="Beekeeping" class="img-right" align="right" width="30%" border="0" src={require('./beekeeping.png').default} />

Almost everyone loves honey, and we at [DevOps Hive](https://devopshive.net/) love it and appreciate the role that bees play for the planet! Because [bees are essential to people and planet](https://www.unep.org/news-and-stories/story/why-bees-are-essential-people-and-planet).

For that reason, in this roadmap our main hands-on project will be for the bees! We will utilize the technology and open source software to build an API to track the environmental sensor data from [openSenseMap](https://opensensemap.org/), a platform for open sensor data in which everyone can participate.

> **TIP**
> If you are looking for the full roadmap including this project, back to the [getting started page](../../getting-started).
:::tip
If you are looking for the full roadmap including this project, back to the [getting started page](../../getting-started).
:::

## Project Badge

Expand All @@ -29,30 +33,31 @@ Preview:

---

<p align="center">
<a href="beekeeping.png">
<img alt="Beekeeping" border="0" src={require('./beekeeping.png').default} />
</a>
<br/>
Image by <a href="https://www.freepik.com/free-vector/beekeeping-concept-illustration_13918549.htm">storyset</a> on Freepik
</p>

## Approach

This project follows the same Dynamic MVP-style mindset used in the [roadmap](../../getting-started). Which aims to cover the whole Software Development Life Cycle (SDLC). That mean each phase of this project will cover all aspects of the DevOps areas like planning, coding, containers, testing, continuous integration, continuous delivery, infrastructure, etc.

This project works the best in `Peering` mode where you have another person helps you whenever you stuck (like a mentor or so). But in case you don't have that, always back to the `Related Module` where it has more details could help you in the project.

> **NOTE**
> Each phase of this project is tackled gradually part of the roadmap modules. But it's also **standalone**, and you can work on it if you have the required knowledge for each phase.
> **CAUTION**
> Remember, the goal is not only to implement the project but also to learn industry best practices in the DevOps field!
> Just applying this project without understanding what the problems to solve will not help you to be a DevOps Engineer!
:::note
Each phase of this project is tackled gradually part of the roadmap modules. But it's also **standalone**, and you can work on it if you have the required knowledge for each phase.
:::

:::danger
Remember, the goal is not only to implement the project but also to learn industry best practices in the DevOps field!
Just applying this project without understanding what the problems to solve will not help you to be a DevOps Engineer!
:::

## Goal

<p align="center">
<a href={require('./hivebox-architecture.png').default}>
<img alt="HiveBox Architecture" border="0" src={require('./hivebox-architecture.png').default} border="0" width="90%" />
</a>
<br/>
This project aims to build a real system from code to infrastructure and everything in between but iterative phases.
</p>

The goal of this project is to build a scalable RESTful API around [openSenseMap](https://opensensemap.org/) but customized to help beekeeper with their chores. The API output should be in JSON. You will start with a basic implementation, then extend the whole system to handles thousands of requests per second. But always remember, every decision has a cost.

You can get senseBox IDs by checking the [openSenseMap](https://opensensemap.org/) website. Use 3 senseBox IDs close to each other (you can use this one [5eba5fbad46fb8001b799786](https://opensensemap.org/explore/5eba5fbad46fb8001b799786) as starting point). Just copy the IDs, you will need them in the next steps.
Expand All @@ -63,6 +68,12 @@ You can get senseBox IDs by checking the [openSenseMap](https://opensensemap.org

Roadmap Module: [Welcome to the DevOps World](../../content/module-01)

<p align="center">
<a href={require('./hivebox-architecture-phase-01.png').default}>
<img alt="HiveBox Architecture - Phase 1" border="0" src={require('./hivebox-architecture-phase-01.png').default} border="0" width="90%" />
</a>
</p>

- Understand your role in this project and how you work with other teams.
- Brush up on your knowledge about Software Project management (Hint: [What is agile project management?](https://www.apm.org.uk/resources/find-a-resource/agile-project-management/) And [Introduction to Software Product Management](https://www.coursera.org/learn/introduction-to-software-product-management)).
- Decide which Agile methodology you will use. (Scrum, Kanban, Scrumban, etc.).
Expand All @@ -77,6 +88,12 @@ Roadmap Module: [Welcome to the DevOps World](../../content/module-01)

Roadmap Module: [Basics - DevOps Core](../../content/module-02)

<p align="center">
<a href={require('./hivebox-architecture-phase-02.png').default}>
<img alt="HiveBox Architecture - Phase 2" border="0" src={require('./hivebox-architecture-phase-02.png').default} border="0" width="90%" />
</a>
</p>

### 2.1 Tools

- Git
Expand Down Expand Up @@ -108,6 +125,12 @@ Roadmap Module: [Basics - DevOps Core](../../content/module-02)

Roadmap Module: [Start - Laying the Foundation](../../content/module-03)

<p align="center">
<a href={require('./hivebox-architecture-phase-03.png').default}>
<img alt="HiveBox Architecture - Phase 3" border="0" src={require('./hivebox-architecture-phase-03.png').default} border="0" width="90%" />
</a>
</p>

### 3.1 Tools

- [Hadolint](https://github.com/hadolint/hadolint) **and** [VS Code hadolint extension](https://marketplace.visualstudio.com/items?itemName=exiasr.hadolint)
Expand Down Expand Up @@ -157,6 +180,12 @@ Roadmap Module: [Start - Laying the Foundation](../../content/module-03)

Roadmap Module: [Expand - Constructing a Shell](../../content/module-04)

<p align="center">
<a href={require('./hivebox-architecture-phase-04.png').default}>
<img alt="HiveBox Architecture - Phase 4" border="0" src={require('./hivebox-architecture-phase-04.png').default} border="0" width="90%" />
</a>
</p>

### 4.1 Tools

- Kind
Expand Down Expand Up @@ -210,6 +239,12 @@ Roadmap Module: [Expand - Constructing a Shell](../../content/module-04)

Roadmap Module: [Transform - Finishing the Structure](../../content/module-05)

<p align="center">
<a href={require('./hivebox-architecture-phase-05.png').default}>
<img alt="HiveBox Architecture - Phase 5" border="0" src={require('./hivebox-architecture-phase-05.png').default} border="0" width="90%" />
</a>
</p>

### 5.1 Tools

- Kind
Expand All @@ -222,7 +257,14 @@ Roadmap Module: [Transform - Finishing the Structure](../../content/module-05)
**Requirements:**

**General:**
- Add a caching layer using Memcached or etcd.
- Add a caching layer using Redis based project [Valkey](https://github.com/valkey-io/valkey).
- Add a storage layer using S3-Compatible project [MinIO](https://min.io/) and store the data periodically every 5 minutes.

**Store:**
- Endpoint: `/store`
- Parameters: No parameters.
- Requirements:
- By default, the application will store the data every 5 minutes, but by calling this endpoint, it should store the data directly on MinIO.

**Metrics:**
- Endpoint: `/metrics`
Expand All @@ -241,7 +283,7 @@ Roadmap Module: [Transform - Finishing the Structure](../../content/module-05)
### 5.3 Containers

- Create a Helm chart for the application (Hint: [Awesome Helm List](https://github.com/cdwv/awesome-helm)).
- Create Kustomize manifests for the infrastructure resources like Memcached or etcd (Hint: [Awesome Kustomize List](https://github.com/DevOpsHiveHQ/awesome-kustomize)).
- Create Kustomize manifests for the infrastructure resources like KeyVal (Hint: [Awesome Kustomize List](https://github.com/DevOpsHiveHQ/awesome-kustomize)).
- Review Kubernetes Security Best Practices (Hint: [Kubernetes Security Best Practices with tips for the CKS exam](https://tech.aabouzaid.com/2022/07/kubernetes-security-best-practices-with-tips-for-the-cks-exam.html)).
- Configure the Kubernetes app manifest to use `/readyz` as a readiness probe.

Expand All @@ -263,16 +305,23 @@ Roadmap Module: [Transform - Finishing the Structure](../../content/module-05)

## Phase 6

Roadmap Module: [Optimiation - Keep Improving](../../content/module-06)
Roadmap Module: [Optimize - Keep Improving](../../content/module-06)

<p align="center">
<a href={require('./hivebox-architecture-phase-06.png').default}>
<img alt="HiveBox Architecture - Phase 6" border="0" src={require('./hivebox-architecture-phase-06.png').default} border="0" width="90%" />
</a>
</p>

This phase a free-style user-defined enhancements which means the enhancements could be related to any part of the project.

Here are some suggestions:

- Deploy the application in Declarative GitOps style using [Argo CD](https://argo-cd.readthedocs.io/en/stable/getting_started/).
- Prepare for production by setup DNS ([ExternalDNS](https://kubernetes-sigs.github.io/external-dns/)) and Certificates ([Cert-Manager](https://cert-manager.io/)).
- Build Multi-environment Kubernetes clusters (Dev, Stage, and Prod) with Terraform and Kustomize.
- Use [TestKube](https://testkube.io/) for better testing execution.
- Automate dependency updates with [Dependabot](https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide).
- Deploy the application in Declarative GitOps style using [Argo CD](https://argo-cd.readthedocs.io/en/stable/getting_started/).
- Develop a Kubernetes Operator to handle the app operations (Hint: [Introduction to Kubernetes Operators](https://tech.aabouzaid.com/2020/03/introduction-to-kubernetes-operators-presentation.html)).

---
Expand All @@ -281,4 +330,10 @@ Here are some suggestions:

Roadmap Module: [Capstone Project](../../content/module-07)

In this phase, you will design and impelment your own project similar to HiveBox project but with an idea and a tech stack of your choice.
<p align="center">
<a href={require('./hivebox-architecture-phase-07.png').default}>
<img alt="HiveBox Architecture - Phase 7" border="0" src={require('./hivebox-architecture-phase-07.png').default} border="0" width="90%" />
</a>
</p>

In this phase, you will design and impelment your own project similar to HiveBox project but with an idea and a tech stack of your choice. Check the [Capstone Project](../../content/module-07) page for more details.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/projects/hivebox/hivebox-architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit be0fedf

Please sign in to comment.