An open-source cloud-native deployment tool.
Before setting up Nimbus, ensure you have the following installed:
- Kubernetes (either a remote cluster or local installation)
- Docker
- kubectl
- Make
- Go
For local development, we recommend using Minikube to set up a local Kubernetes cluster. Ensure your Kubernetes configuration is available at ~/.kube/config.
To deploy Nimbus on an existing Kubernetes cluster:
- Create the required namespace:
kubectl create namespace nimbus
- Apply the Kubernetes configurations:
kubectl apply -f kubernetes/
In a production environment, the Nimbus server will have elevated admin permissions over your entire Kubernetes cluster. These permissions are specified in the permissions.yaml file through the ServiceAccount configuration. Ensure you review and understand the security implications before deployment.
Additionally, to run Nimbus in production, you must set the environment variable ENVIRONMENT=production. If this variable is not specified, it defaults to development.
For hosting a Nimbus server, you need some kind of NFS persistent volume provisioner installed. The recommended provisioner is:
NFS Subdir External Provisioner
Ensure that your cluster has a properly configured NFS provisioner before deploying Nimbus to prevent storage-related issues.
You also need to set the environment variable NIMBUS_STORAGE_CLASS with the name of the storage class you have configured with the provisioner. By default, this is set to nfs-client.
To restrict deployments to only the main or master branches for a project, add allowBranchPreviews: false to your project's nimbus.yaml. When disabled, deploy requests from any other branch will be rejected.
For local development, you can run Nimbus either directly or using Docker Compose.
This method runs the server with hot-reloading enabled and includes a PostgreSQL database:
- Copy the
.env.examplefiles and set the required variables:cp .env.example .env cp .env.database.example .env.database
- Ensure Kubernetes is running locally (Minikube is recommended):
minikube start
- Start the development environment:
make docker-up
- To stop the development environment:
make docker-down
- To stop and remove volumes:
make docker-down-volumes
You may view the logs of the container as such:
docker logs nimbus-apiAlternatively, you can run the server directly without Docker:
- Copy the
.env.examplefile to.envand set the required environment variables:cp .env.example .env
- Ensure Kubernetes is running locally (Minikube is recommended):
minikube start
- Run the Nimbus server locally:
make server
The following tools are included as development dependencies:
- golangci-lint - Go linter aggregator for running multiple linters
- pg_format - PostgreSQL SQL syntax formatter
- air - Hot-reloading tool for Go applications
These tools are automatically configured in the project's Makefile for linting, formatting, and development tasks.
A nimbus.yaml file needs to be present in your repository to deploy to Nimbus.
This file defines the services that will be deployed, as well as the networking and environment configurations.
There are pre-defined templates for services, such as databases and Redis, to make configuration easier. A sample nimbus.yaml file is available here.
Deployment can be done through our GitHub action, or through the local CLI, which is used for managing project state.
The Nimbus API is documented using the OpenAPI 3.0.1 specification, available in docs/api.yaml. This documentation provides detailed information about all available endpoints, request/response schemas, and authentication requirements.
A Swagger UI server is included in both the Docker Compose and Kubernetes configurations for interactive API exploration:
- Docker Compose: When running
make docker-up, Swagger UI is automatically available athttp://localhost:8080/docs/ - Kubernetes: The Swagger UI is deployed as part of the Kubernetes manifests in
kubernetes/and can be accessed through the configured ingress or service
The Swagger UI provides an interactive interface to explore the API, view schemas, and test endpoints directly from your browser.
Install the Nimbus CLI locally with:
sudo make installThis command builds the nimbus binary and copies it to /usr/local/bin,
allowing you to run nimbus from any directory.
After installing the CLI, you can deploy your application easily:
nimbus deployFlags:
-H,--host– Nimbus server address. Defaults to theNIMBUS_HOSTenvironment variable orhttp://localhost:8080.-f,--file– Path to thenimbus.yamlfile. Defaults to./nimbus.yaml.-a,--apikey– API key used for authentication. Defaults to theNIMBUS_API_KEYenvironment variable.
The client CLI exposes several subcommands:
nimbus deploy– deploy a project using animbus.yamlfile.nimbus projects– manage projects (create,list,delete).nimbus services– inspect services (list,get,logs).nimbus secrets– manage project secrets (list,edit).nimbus branch delete– remove a branch and its resources.
Running nimbus server will start the server locally.
We welcome contributions! Feel free to submit issues and pull requests to improve Nimbus.