Nanocl

[![Stars](https://img.shields.io/github/stars/nxthat/nanocl?label=%E2%AD%90%20stars%20%E2%AD%90)](https://github.com/nxthat/nanocl) [![Build With](https://img.shields.io/badge/built_with-Rust-dca282.svg?style=flat)](https://github.com/nxthat/nanocl) [![Chat on Discord](https://img.shields.io/discord/1011267493114949693?label=chat&logo=discord&style=flat)](https://discord.gg/WV4Aac8uZg)

[![Tests](https://github.com/nxthat/nanocl/actions/workflows/tests.yml/badge.svg)](https://github.com/nxthat/nanocl/actions/workflows/tests.yml) [![Clippy](https://github.com/nxthat/nanocl/actions/workflows/clippy.yml/badge.svg)](https://github.com/nxthat/nanocl/actions/workflows/clippy.yml)

[![codecov](https://codecov.io/gh/nxthat/nanocl/branch/nightly/graph/badge.svg?token=4I60HOW6HM)](https://codecov.io/gh/nxthat/nanocl)

Test, Deploy, Scale, Monitor, Orchestrate

❓ What is Nanocl ?

Nanocl is a distributed system that simplifies the management of containers and virtual machines across multiple hosts also called nodes. With Nanocl, you can efficiently share resources and deploy applications, services, and databases publicly, privately, or under a VPN. Whether you're running a home lab setup or a large enterprise, Nanocl's cutting-edge technology, crafted with precision using Rust, provides unparalleled performance and a small footprint.

📙 Table of Contents

🚀 Key Benefits

🧿 Architecture

Nanocl is designed in a micro services architecture several component are required and they are running as container included the Nanocl Daemon itself. The following components will be installed during nanocl setup and are required to ensure Nanocl functionnality:

Simplified version of our architecture for a single node:

📚 Documentation

To learn more about Nanocl, you can take a look at the following resources:

📋 Requirements

To work properly Nanocl must have theses dependencies installed on the system:

💾 Installation

To install Nanocl, please refer to our online installation guide.

🔧 Usage

Nanocl is designed to be easy to operate by mostly using state files.
State Files are yaml files that define the state you want.
There is an example used to deploy our documentation:

```yaml ApiVersion: v0.5 Type: Deployment

Namespace: nexthat

See all options:

https://docs.next-hat.com/references/nanocl/cargo

Cargoes: - Name: doc Container: Image: nexthat-doc:0.4.1

See all options:

https://docs.next-hat.com/references/nanocl/resource

Resources: - Name: docs.next-hat.com Kind: ProxyRule Version: v0.1 Config: Watch: - doc.nexthat Rule: Http: Domain: docs.next-hat.com Network: Public Ssl: Certificate: /etc/letsencrypt/live/docs.next-hat.com/fullchain.pem CertificateKey: /etc/letsencrypt/live/docs.next-hat.com/privkey.pem Dhparam: /etc/letsencrypt/ssl-dhparams.pem Includes: - /etc/letsencrypt/options-ssl-nginx.conf Locations: - Path: / Target: Cargo: Key: doc.nexthat Port: 80 ```

To apply a state we can do it easily bu running nanocl state apply -f path|url
We can also revert a state by calling nanocl state revert -f path|url

👨‍💻 Contributing

Every contribution is very welcome.

But to be abble to do so you need a dev environnement right ?
You can learn more about it on the contribution guide.
Also don't hesitate to join the discord if you have any question!