Deploy DevLake locally via Docker Compose or to Azure via Bicep.
Downloads the official Apache DevLake Docker Compose files, generates an ENCRYPTION_SECRET, and prepares the directory for docker compose up.
gh devlake deploy local [flags]| Flag | Default | Description |
|---|---|---|
--dir |
. |
Target directory for Docker Compose files |
--version |
latest |
DevLake release version (e.g., v1.0.2) |
- Fetches the latest release tag from GitHub (or uses
--version) - Downloads
docker-compose.ymlandenv.examplefrom the Apache DevLake release - Renames
env.example→.env - Generates and injects a cryptographic
ENCRYPTION_SECRETinto.env - Checks that Docker is available
cd <dir>
docker compose up -dWait ~2–3 minutes for all services to start.
| Service | URL | Default Credentials |
|---|---|---|
| Backend API | http://localhost:8080 | — |
| Config UI | http://localhost:4000 | — |
| Grafana | http://localhost:3002 | admin / admin |
# Deploy to current directory (latest version)
gh devlake deploy local
# Deploy a specific version to ./devlake
gh devlake deploy local --version v1.0.2 --dir ./devlake
# Then start the services
cd devlake
docker compose up -d- If
.envalready exists in the target directory, it is backed up to.env.bakbefore being replaced. docker compose upis NOT run automatically — this lets you inspect or customize.envfirst.- To tear down:
gh devlake cleanup --localordocker compose downfrom the target directory.
Provisions DevLake on Azure using Container Instances, Azure Database for MySQL (Flexible Server), and Key Vault.
gh devlake deploy azure [flags]| Flag | Default | Description |
|---|---|---|
--resource-group |
(prompt if omitted) | Azure Resource Group name |
--location |
(prompt if omitted) | Azure region (e.g., eastus) |
--base-name |
devlake |
Base name prefix for all Azure resources |
--official |
false |
Use official Apache DevLake images from Docker Hub (no ACR required) |
--skip-image-build |
false |
Skip building Docker images (use with existing ACR images) |
--repo-url |
Clone a remote DevLake repository to build custom images from |
- Checks Azure CLI login (runs
az loginif needed) - Creates the resource group (saves partial state immediately for safe cleanup)
- Generates MySQL password and encryption secret via Key Vault
- Optionally builds Docker images and pushes to Azure Container Registry (when
--officialis not set) - Deploys infrastructure via Bicep templates (Container Instances + MySQL + Key Vault)
- Waits for the backend to respond, then triggers DB migration
- Saves
.devlake-azure.jsonstate file with endpoints, resource names, and subscription info
| Mode | Estimated Monthly Cost |
|---|---|
--official (no ACR) |
~$30–50/month |
| Custom images (with ACR) | ~$50–75/month |
# Official Apache images (recommended for getting started)
gh devlake deploy azure --resource-group devlake-rg --location eastus --official
# Custom images (builds from sibling incubator-devlake repo)
gh devlake deploy azure --resource-group devlake-rg --location eastus
# Custom images from a remote fork
gh devlake deploy azure --resource-group devlake-rg --location eastus \
--repo-url https://github.com/my-fork/incubator-devlake
# Interactive — will prompt for missing flags
gh devlake deploy azure- If
--resource-groupor--locationare omitted, the CLI prompts interactively (with a region picker). - A partial state file is written immediately after the Resource Group is created. This ensures
gh devlake cleanup --azurecan clean up even if the Bicep deployment fails mid-flight. - Service endpoints are printed at the end of a successful deployment and saved to
.devlake-azure.json. - The Bicep templates are embedded in the binary — no external template files needed.
gh devlake cleanup --azureSee cleanup.md.
- init.md — guided wizard that includes deployment as Phase 1
- state-files.md — what
.devlake-local.jsonand.devlake-azure.jsoncontain - cleanup.md
- status.md