Skip to main content

Bootstrap Cluster

Before You Change Anything

These steps can change shared cluster state. Double-check the target stack, namespace, and credentials before running mutating commands.

This page walks you through creating a full Crawbl dev environment on DigitalOcean. By the end, you will have a running Kubernetes cluster with ArgoCD managing all your applications.

Use this page only when local development is not enough and you need real infrastructure. If you only need to change backend code, you can usually stop at Run the Backend.

info

This is a one-time setup. Once the cluster exists, CI handles normal deployments automatically. You only need to do this again if you tear down the environment or need a fresh cluster.

Prerequisites

Before you begin, make sure you have:

  • All tools from the Tools & Dependencies page installed
  • Tokens configured in your .env file (see Prerequisites)
  • Your environment sourced: set -a && source .env && set +a
1
Step 1

Prepare the CLI

The crawbl CLI handles infrastructure operations. The backend repo already ships a local launcher, so you do not need a global install.

cd crawbl-backend
make setup

This installs the repo-managed hook, checks your machine, and prepares the local ./crawbl launcher.

2
Step 2

Create the infrastructure

The bootstrap process has three stages: initialize the stack, preview the plan, then apply it.

./crawbl infra init

This sets up the Pulumi state for your environment and only needs to run once.

./crawbl infra plan

Review the output. You will see a list of resources that Pulumi plans to create or reuse. The VPC and DigitalOcean Container Registry are usually reused in the normal setup.

./crawbl infra bootstrap

This starts infrastructure provisioning. Pulumi creates the cloud resources, waits for the cluster to become reachable, saves kubeconfig locally, and then waits for ArgoCD to come up.

Pulumi provisions the following resources:

ResourceWhat it is
DOKS clusterA managed Kubernetes cluster on DigitalOcean
VPCAn isolated network for the cluster
DOCRDigitalOcean Container Registry for storing Docker images
ArgoCDGitOps controller installed via Helm, watches crawbl-argocd-apps Github repository
Cloudflare DNSDNS records pointing to the cluster's load balancer
TLS certificatesHTTPS certificates for all Crawbl domains

The full bootstrap takes a few minutes. After that, ArgoCD pulls the app definitions from crawbl-argocd-apps and applies them to the cluster.

3
Step 3

Get cluster access

Once the infrastructure is up, the tool saves kubeconfig for the new cluster in your local context.

tip

If kubeconfig was not saved to your local context, add it manually with doctl:

doctl kubernetes cluster kubeconfig save crawbl-dev

Verify you can reach it:

kubectl get nodes

You should see one or more nodes in the Ready state.

4
Step 4

Secrets

Secrets in AWS Secrets Manager are populated automatically by the bootstrap flow. In plain language, the cluster pulls the sensitive values it needs from AWS instead of storing them in Git. See Secrets Management for the full list of secret paths and how ESO syncs them into the cluster.


What's next: Verify Deployment — confirm everything is running and healthy.