Skip to content

Commit

Permalink
wip: byok
Browse files Browse the repository at this point in the history
  • Loading branch information
evoxmusic committed Nov 29, 2023
1 parent 98dcf1c commit d451295
Show file tree
Hide file tree
Showing 47 changed files with 1,439 additions and 1,193 deletions.
2 changes: 1 addition & 1 deletion .meta/.schemas/guides.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"description": "Array of tags",
"items": {
"type": "string",
"enum": ["type: guide","type: post","type: tutorial","type: engineering","domain: buffers","domain: cli","domain: config","domain: dependencies","domain: networking","domain: observability","domain: operations","domain: platforms","domain: security","domain: sinks","domain: sources","domain: tests","domain: topology","domain: transforms","domain: ux","domain: website","domain: services","language: php","language: kotlin","language: java","language: javascript","language: python","language: rust","language: go","language: ruby","language: scala","database: mysql","database: postgresql","database: mongodb","framework: hasura","framework: laravel","framework: springboot","framework: nodejs","framework: flask","framework: jhipster","framework: gin","framework: rails","framework: django","framework: deno","framework: strapi","framework: nuxtjs","framework: discordpy","framework: sinatra","framework: meilisearch","technology: kubernetes","technology: helm","technology: docker","technology: kotlin","technology: qovery","technology: posthog","technology: terraform","technology: github","cloud_provider: aws","cloud_provider: digital_ocean","cloud_provider: scaleway","cloud_provider: gcp","cloud_provider: azure"]
"enum": ["type: guide","type: post","type: tutorial","type: engineering","domain: buffers","domain: cli","domain: config","domain: dependencies","domain: networking","domain: observability","domain: operations","domain: platforms","domain: security","domain: sinks","domain: sources","domain: tests","domain: topology","domain: transforms","domain: ux","domain: website","domain: services","language: php","language: kotlin","language: java","language: javascript","language: python","language: rust","language: go","language: ruby","language: scala","database: mysql","database: postgresql","database: mongodb","framework: hasura","framework: laravel","framework: springboot","framework: nodejs","framework: flask","framework: jhipster","framework: gin","framework: rails","framework: django","framework: deno","framework: strapi","framework: nuxtjs","framework: discordpy","framework: sinatra","framework: meilisearch","technology: kubernetes","technology: helm","technology: docker","technology: kotlin","technology: qovery","technology: posthog","technology: terraform","technology: github","cloud_provider: aws","cloud_provider: digital_ocean","cloud_provider: scaleway","cloud_provider: gcp","cloud_provider: azure","provider: kubernetes"]
}
},
"title": {
Expand Down
3 changes: 2 additions & 1 deletion .meta/.schemas/guides.json.erb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@
metadata.databases.collect { |d| "database: #{d.name}" } +
metadata.frameworks.collect { |f| "framework: #{f.name}" } +
metadata.technologies.collect { |t| "technology: #{t.name}" } +
metadata.cloud_providers.collect { |t| "cloud_provider: #{t.name}" }
metadata.cloud_providers.collect { |t| "cloud_provider: #{t.name}" } +
metadata.providers.collect { |t| "provider: #{t.name}" }
) .to_json %>
}
},
Expand Down
7 changes: 7 additions & 0 deletions .meta/guides.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ description = """\
Install Qovery on your favorite cloud provider.\
"""

[guides.provider]
title = "Providers"
series = false
description = """\
Install Qovery on one of our supported providers.\
"""

[guides.advanced]
title = "Advanced"
series = false
Expand Down
4 changes: 4 additions & 0 deletions .meta/providers.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[[providers]]
name = "kubernetes"
logo_path = "/img/logos/kubernetes.svg"
dark_logo_path = "/img/logos/kubernetes_white.svg"
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@
## Available Cloud Service Providers

<Jump to="/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services">Amazon Web Services (AWS)</Jump>
<Jump to="/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform">Google Cloud Platform (GCP)</Jump>
<Jump to="/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure">Azure</Jump>
<Jump to="/docs/using-qovery/configuration/cloud-service-provider/scaleway">Scaleway</Jump>
<Jump to="/docs/using-qovery/configuration/cloud-service-provider/other-csps">Others</Jump>
3 changes: 3 additions & 0 deletions scripts/util/metadata.rb
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ def validate_schema!(metadata)
:frameworks,
:technologies,
:cloud_providers,
:providers,
:env_vars,
:guides,
:highlights,
Expand Down Expand Up @@ -153,6 +154,7 @@ def initialize(hash, docs_root, guides_root, pages_root)
@frameworks = hash.fetch("frameworks").collect { |h| OpenStruct.new(h) }
@technologies = hash.fetch("technologies").collect { |h| OpenStruct.new(h) }
@cloud_providers = hash.fetch("cloud_providers").collect { |h| OpenStruct.new(h) }
@providers = hash.fetch("providers").collect { |h| OpenStruct.new(h) }

# highlights

Expand Down Expand Up @@ -398,6 +400,7 @@ def to_h
frameworks: frameworks.deep_to_h,
technologies: technologies.deep_to_h,
cloud_providers: cloud_providers.deep_to_h,
providers: providers.deep_to_h,
team: team.deep_to_h,
transforms: transforms.deep_to_h,
sinks: sinks.deep_to_h
Expand Down
8 changes: 3 additions & 5 deletions website/docs/getting-started/basic-concepts.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
last_modified_on: "2023-04-19"
last_modified_on: "2023-11-25"
title: "Basic Concepts"
description: "Basic Concepts about Qovery"
---
Expand All @@ -19,11 +19,8 @@ An Organization is the workspace where devops and developers can collaborate acr
More information about [Organization here][docs.using-qovery.configuration.organization].

## Cluster
At Qovery, when we refer to Clusters, we mean Kubernetes clusters. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

Qovery creates and manage for you clusters on your cloud account, more than one cluster can be created to match your use case (production, staging, dev etc..).

A running cluster is necessary to deploy your application with Qovery.
At Qovery, when we refer to Cluster, we mean [Kubernetes][urls.kubernetes] cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

More information about [Cluster here][docs.using-qovery.configuration.clusters].

Expand Down Expand Up @@ -88,3 +85,4 @@ You can monitor the execution of the deployment via the [Deployment Logs][docs.u
[docs.using-qovery.deployment.logs#deployment-logs]: /docs/using-qovery/deployment/logs/#deployment-logs
[docs.using-qovery.deployment.logs#live-logs]: /docs/using-qovery/deployment/logs/#live-logs
[docs.using-qovery.deployment]: /docs/using-qovery/deployment/
[urls.kubernetes]: https://kubernetes.io/
7 changes: 2 additions & 5 deletions website/docs/getting-started/basic-concepts.md.erb
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,8 @@ An Organization is the workspace where devops and developers can collaborate acr
More information about [Organization here][docs.using-qovery.configuration.organization].

## Cluster
At Qovery, when we refer to Clusters, we mean Kubernetes clusters. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

Qovery creates and manage for you clusters on your cloud account, more than one cluster can be created to match your use case (production, staging, dev etc..).

A running cluster is necessary to deploy your application with Qovery.
At Qovery, when we refer to Cluster, we mean [Kubernetes][urls.kubernetes] cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

More information about [Cluster here][docs.using-qovery.configuration.clusters].

Expand Down Expand Up @@ -63,4 +60,4 @@ You can monitor the execution of the deployment via the [Deployment Logs][docs.u
## High Level Schema
<p align="center">
<img src="/img/basic_concept_orga_project_env.png" alt="Basic Structure" />
</p>
</p>
121 changes: 3 additions & 118 deletions website/docs/getting-started/how-qovery-works.md
Original file line number Diff line number Diff line change
@@ -1,125 +1,10 @@
---
last_modified_on: "2023-05-29"
last_modified_on: "2023-11-24"
title: How Qovery Works
description: "How Qovery works under the hood and how to use it when you are a DevOps"
description: "How Qovery works under the hood"
---

import Alert from '@site/src/components/Alert';
Curious to get the big picture of how Qovery works? Refer to [this article](https://www.qovery.com/blog/how-we-built-qovery---part-1)

Qovery is the state-of-the-art deployment platform that any DevOps would build for their company. Beyond application deployment, Qovery is tailored to run production workload with maximum uptime. It is the perfect solution to make your developers autonomous in deploying their applications and keeping flexibility and control.

Qovery is the perfect product for DevOps who want to:
- Build an internal Platform as a Service (PaaS) with outstanding experience for developers.
- Build development, staging and production environments.
- Make developers productive and autonomous, while keeping the control on what they do.
- Get a production-ready infrastructure and save more than 18 months of work.

Qovery is an abstraction layer on top of the most promising tools (Kubernetes, Terraform, Helm...) and cloud service providers (AWS, Digital Ocean, Scaleway...). The goal of Qovery is to provide production-ready platform layer to build on top of it.

<p align="center">
<img src="/img/devops/qovery-on-top-of-kubernetes-and-terraform.svg" style={{maxWidth: '400px'}} alt="Qovery runs on top of Kubernetes, Terraform, Helm and many other tools" />
</p>

<!--
THIS FILE IS AUTOGENERATED!
To make changes please edit the template located at:
website/docs/getting-started/how-qovery-works.md.erb
-->

## Your cloud infrastructure with Qovery

<Alert type="info">

Check out our guides on how to install Qovery on your [AWS][guides.cloud-provider.guide-amazon-web-services] and [Scaleway][guides.cloud-provider.guide-scaleway] account.

</Alert>

Qovery needs to install a few services on your cloud account to work. Some of them are required and others optional.

<p align="center">
<img src="/img/devops/qovery-infra-and-your-infra.svg" alt="Your infrastructure is completely isolated from the qovery control plane" />
</p>

All your applications and your data run in your cloud account. The [Qovery Engine][urls.qovery_engine], Qovery Agent, and Kubernetes are the three main services running on your infrastructure to run your applications. The Qovery Engine and the Qovery Agent receive remote instructions from the control plane via a secured gRPC/TLS connection initiated. Qovery infrastructure and your infrastructure are completely isolated from each other. Qovery has been designed to never impact your infrastructure in case of any outage and security breach.

### Qovery infrastructure services

| Service | Open-source | Optional | Description |
|-------------------------------------------|-------------|----------|-------------------------------------------------------------------------------------------|
| Qovery Control Plane | yes | no | Service to manage user authentication. authorization, and the whole Qovery business logic |
| [Qovery API](https://api-doc.qovery.com/) | no | no | API to programmatically interact with Qovery |
| Qovery Web Interface | soon | yes | Web application to interact with Qovery |

### Services installed on your infrastructure

| Service | Open-source | Optional | Description |
|-----------------------------------------------------------------|-------------|----------|------------------------------------------------------------------------------------------------------------------------------------|
| [Qovery Engine][urls.qovery_engine] | yes | no | Transactional deployment service in charge of maintaining your infrastructure and deploying applications with all the dependencies |
| Qovery Agent | soon | no | Service to forward application logs, services status and real-time metrics to the Qovery Control Plane |
| [Kubernetes](https://github.com/kubernetes/kubernetes) | yes | no | Product to run and scale containers. Qovery runs your application on your cloud managed Kubernetes |
| [External DNS](https://github.com/kubernetes-sigs/external-dns) | yes | no | Tool to configure external DNS for Kubernetes services |
| [Cert Manager](https://github.com/jetstack/cert-manager) | yes | no | Tool to provision and manage TLS certificates on Kubernetes |
| [Loki](https://github.com/grafana/loki) | yes | yes | Tool to aggregate Kubernetes logs. Qovery Agent fetch logs from Loki in real-time |
| [Grafana](https://github.com/grafana/grafana) | yes | yes | Product to visualize metrics and logs from infrastructure and app services |
| [NGINX ingress](https://github.com/kubernetes/ingress-nginx/) | yes | no | NGINX ingress controller for Kubernetes |

[Check out](https://github.com/Qovery/engine/blob/main/lib/helm-freeze.yaml) the list of services installed on your infrastructure.

<!--
### Tools
| [Qovery CLI](https://github.com/Qovery/qovery-cli) | yes | yes | Command Line Interface to interact with Qovery |
| [Helm](https://github.com/helm/helm) | yes | no | Tool to install and manage Kubernetes applications. Qovery dynamically uses Helm to install your applications |
| [Terraform](https://github.com/hashicorp/terraform) | yes | no | Tool to safely and predictably create, change, and improve cloud infrastructure. Qovery dynamically uses Terraform to bootstrap and maintain your infrastructure. |
-->

## Application and database deployment

Here is an example of what happen in details when you deploy a **NodeJS application** with a **PostgreSQL database** in **production** on **AWS** with Qovery.

<p align="center">
<img src="/img/devops/from-build-to-scale-schema.svg" alt="Schema from build to scale with Qovery" />
</p>

| Stage | Step | Qovery service | Description |
|--------|------------------------------|----------------|-----------------------------------------------------------------------------------------------------|
| Auth | Git push received | Control plane | Qovery receives your git commit via Github/Gitlab/Bitbucket webhooks |
| Auth | Check permissions | Control plane | Qovery checks permissions to proceed app deployment or not |
| Build | Build container | Engine | Qovery builds your NodeJS app into container |
| Build | Push container | Engine | Qovery push the container into your container registry |
| Deploy | Deploy PostgreSQL | Engine | Qovery match the PostgreSQL version with AWS RDS PostgreSQL and deploy it on your AWS account |
| Deploy | Configure PostgreSQL network | Engine | Qovery configure the network of your AWS RDS PostgreSQL to make it accessible from your application |
| Deploy | Check PostgreSQL | Engine | Qovery checks your AWS RDS PostgreSQL is well deployed and running |
| Deploy | Deploy container | Engine | Qovery deploys your container on your Kubernetes cluster |
| Deploy | Configure container network | Engine | Qovery configure the network of your container to make it accessible from outside |
| Deploy | Load balancer | Engine | Qovery deploys a load balancer and bind it to your application |
| Deploy | DNS | Engine | Qovery assign a domain to your application |
| Deploy | TLS | Engine | Qovery request a TLS certificate and bind it to your domain and application |
| Deploy | Check container | Engine | Qovery checks your container is well deployed and accessible via internet |
| Run | Run database | Engine | Qovery monitor your AWS RDS PostgreSQL database |
| Run | Run container | Engine | Qovery runs your container on Kubernetes and ensure it has the maximum uptime |
| Run | Metrics | Agent | Qovery watch your application and database metrics and forward them to the Qovery Control Plane |
| Run | Notification | Control plane | Qovery notifies the user on the successful app and db deployment |
| Scale | Scale container | Agent | Qovery scale your containers depending on the CPU and custom metrics |

<Alert type="info">

Suppose something goes wrong while deploying your application. Qovery rollbacks your app to return in a consistent state.

</Alert>

## Integrations

Qovery lets you integrates any tool that you already have or need. There is no limitations as Qovery runs on Kubernetes and your cloud service provider.

## What's next

In the next section we explain how you can manage Qovery via [Terraform][docs.using-qovery.integration.terraform] and our [REST API][docs.using-qovery.interface.rest-api].


[docs.using-qovery.integration.terraform]: /docs/using-qovery/integration/terraform/
[docs.using-qovery.interface.rest-api]: /docs/using-qovery/interface/rest-api/
[guides.cloud-provider.guide-amazon-web-services]: /guides/cloud-provider/guide-amazon-web-services/
[guides.cloud-provider.guide-scaleway]: /guides/cloud-provider/guide-scaleway/
[urls.qovery_engine]: https://engine.qovery.com
Loading

0 comments on commit d451295

Please sign in to comment.