這款開源的開發工具真有魔力!

Heighliner(/'ha?la?n?r/) 是一個現代的開發工具,可將你的應用程序堆棧作為代碼交付,你可以將低級別的詳細信息編碼成人類可讀的配置文件,可以對其進行版本控制、重用和共享。甚至可以導入現有堆棧以構建更高級的堆棧。

Heighliner 提供并維護官方堆棧,為常見用例提供開箱即用的體驗,你的開發環境可以一鍵啟動,這將幫助你使用最先進的云原生堆棧輕松快速地構建應用程序。
簡介
開發者的時間是十分寶貴的。如果他們不能全身心投入到軟件本身上,而是去反復折騰這些基礎設施工具,那么終將給開發者和企業帶來巨大的資源浪費。
今天,我們打造了一款名為 Heighliner 的開發者工具,它可以將整套 Application Stack 都代碼化 (Stack as Code)。我們嘗試通過 Heighliner 去告訴開發者:“你的云原生技術棧也可以像代碼一樣去管理。你值得擁有一個更好的使用體驗。”我們這么說是因為:
- Heighliner 從開發者視角將整套 Application Stack 定義出來,包括了代碼倉庫、應用框架、CI/CD、容器鏡像、Helm Chart、監控面板、告警規則、云端開發配置等。
- 我們為常見的開發語言提供了官方 stacks,用戶可以一鍵拉起現代化的云原生開發環境。支持語言和框架包括 Go、Spring、Next.js、Vue.js、Remix 等。
- 用戶可以對 stack 的任何一個環節進行定制化。我們很高興 Docker 創始人 Solomon 創立了 Dagger 項目,Dagger 大幅簡化了開發 Heighliner Stack 的體驗。我們支持使用 Dagger 來定制化 stack。除了 Dagger 官方的庫,我們還額外提供了一整套針對云原生技術棧的庫。
有了上面這些,開發者可以持續不斷地享受云原生發展的各種趨勢。這些趨勢將會以開發者最熟悉的方式 -- 以代碼庫的形式來更新,從而幫助開發者持續演進整個應用架構。
架構
在使用 Heighliner 之前,有必要了解整體架構。從高層次來看,Heighliner 包含以下組件:

CLI
Heighliner CLI 命令行工具提供了使用 Heighliner Stacks 的最佳本地體驗,它引導用戶完成使用 Heighliner Stacks 設置其應用程序環境的過程。它還可用于搜索和下載 Stack、管理環境、提供基于 Stack 輸入的用戶交互。
使用 Heighliner CLI,你還可以執行 IaC 風格的 GitOps 工作流。
StackHub
StackHub 存儲 Heighliner Stacks 并提供可搜索的界面來為你的應用程序找到合適的 Stack,它可用于下載安裝以及搜索 Stack。在底層,它可能是某種存儲后端,例如對象存儲,或與 OCI 兼容的倉庫(例如 Harbor)。Heighliner 平臺將識別和索引數據,并為用戶提供搜索結果。
Heighliner 官方提供了一個托管在云上的默認 StackHub,它存儲了默認的 Stacks,當你使用 CLI/UI 時,它將使用默認的。
Service
官方已經建立了必要的 Heighliner 服務來幫助簡化開發工作流程,有在客戶端無法實現的一些必要的服務。例如,當你需要為你的應用程序分配子域時,你可以通過 HTTP API 或 CUE 庫使用 Heighliner 服務來實現。
Dagger
Dagger 是一個 CICD 的便攜式開發工具包,我們用它來編排基礎設施工具和服務,它是 Heighliner Stacks 的執行引擎,Heighliner 官方在為 Dagger 上游貢獻了一些庫的同時,還使用自己的 CUE 模塊對其進行了擴展,以組成云原生工具和基礎架構。
Kubernetes
Kubernetes 是一個開源容器編排引擎,用于自動部署、擴展和管理容器化應用程序,使用它來編排服務部署,這是部署服務并與其他云服務集成的平臺基礎。
Terraform
Terraform 是一種基礎架構即代碼的工具,可讓你定義云和本地資源。我們使用它來配置和管理基礎設施資源。在我們的用例中,Terraform 比 Dagger 低一層:在 Terraform 提供資源后,Dagger 將執行 CUE 模塊與之交互,例如部署服務、設置配置等。
安裝
首先我們需要安裝 Heighliner 的命令行工具,我這里是 Mac 系統,可以直接使用 brew 一鍵安裝:
brew install h8r-dev/tap/heighliner
hln version
其他系統可以使用下面的命令進行安裝:
curl -L https://dl.h8r.io/hln/install.sh | sh
./bin/hln version
sudo mv bin/hln /usr/local/bin/hln
當然也可以直接下載官方的 Release 二進制包進行安裝,地址:https://github.com/h8r-dev/heighliner/releases
接下來需要有一個本地可訪問的 Kubernetes 集群,如果沒有建議使用 Kind 進行本地安裝,推薦的 Docker 資源為4核8G內存。創建如下所示創建 Kubernetes 集群的配置文件 kind.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
然后執行下面的命令創建 Kubernetes 集群和 Ingress 控制器:
kind create cluster --image=kindest/node:v1.23.5 --config=kind.yaml
kubectl apply -f https://raw.githubusercontent.com/h8r-dev/stacks/main/scripts/internal/ingress-nginx/deploy.yaml
集群準備好后執行下面的命令安裝 Heighliner 相關依賴:
hln init
Waiting buildkitd to be ready
buildkitd is ready!
然后創建一個帶有 repo, workflow, write:packages, delete:packages, admin:org, user, delete_repo 權限的 GitHub Token:

將創建的 Token 設置成環境變量:
export GITHUB_TOKEN=<your-fresh-token>
示例
接下來我們以一個 Gin+Vue 的應用為例來說明如何使用 Heighliner。
在開始之前推薦設置如下的環境變量:
export NETWORK_TYPE=china_network # 你懂得
使用命令 hln up gin-hello-world -s gin-vue -i 即可創建一個 Gin+Vue 的應用:

可以使用命令 hln status gin-hello-world 獲取該應用的狀態:
?? Heighliner application gin-hello-world is ready! access URL: http://gin-hello-world.h8r.site
There are 2 services have been deployed:
● gin-hello-world-frontend
● access URL: http://gin-hello-world.h8r.site
● resource code: https://github.com/coding-org03/gin-hello-world-frontend
● gin-hello-world-backend
● access URL: http://gin-hello-world.h8r.site/api
● resource code: https://github.com/coding-org03/gin-hello-world-backend
There are 4 addons have been deployed:
● argocd
● access URL: http://argocd.h8r.site
● credential: [Username: admin Password: bsj1O-Eg9iJM7fCq]
● nocalhost
● access URL: http://nocalhost.h8r.site
● credential: [Username: admin@admin.com Password: 123456]
● prometheus-stack
● access URL: http://grafana.h8r.site
● credential: [Username: admin Password: prom-operator]
● prometheus URL: http://prometheus.h8r.site [Username: admin Password: heighliner123!], alertManager URL: http://alert.h8r.site [Username: admin Password: heighliner123!]
● loki
接下來需要設置下域名,如果你正在使用 h8s.site 則可以忽略這一步,如果你要使用自定義的名稱,則需要將下面的配置加入到 /etc/hosts 中去:
127.0.0.1 gin-hello-world.<your-domain>
127.0.0.1 argocd.<your-domain>
127.0.0.1 nocalhost.<your-domain>
127.0.0.1 grafana.<your-domain>
127.0.0.1 prometheus.<your-domain>
127.0.0.1 alert.<your-domain>
接下來我們就可以通過 gin-hello-world.h8r.site 來訪問我們創建的這個 Vue 應用了。

查看 GitHub 上會有如下幾個倉庫:

要想刪除只需要執行下面的命令即可:
hln down gin-hello-world
此外 Heighliner 還會幫我們生成 Github repos、Helm Chart、CI/CD pipelines、域名路由、監控日志 dashboards、以及告警規則等。




















