Bootstrap Cluster
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.
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
.envfile (see Prerequisites) - Your environment sourced:
set -a && source .env && set +a
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.
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:
| Resource | What it is |
|---|---|
| DOKS cluster | A managed Kubernetes cluster on DigitalOcean |
| VPC | An isolated network for the cluster |
| DOCR | DigitalOcean Container Registry for storing Docker images |
| ArgoCD | GitOps controller installed via Helm, watches crawbl-argocd-apps Github repository |
| Cloudflare DNS | DNS records pointing to the cluster's load balancer |
| TLS certificates | HTTPS 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.
Get cluster access
Once the infrastructure is up, the tool saves kubeconfig for the new cluster in your local context.
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.
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.