v1.0.5
Holiaokho
好料庫hó-liāu-khòo

“the good-stuff store”

「the good-stuff store」

A self-hosted artifact repository for 25 package formats — one address, one binary, no paid tier.

自架的套件倉庫,25 種格式、一個位址、一個執行檔,沒有付費版。

Why switch

為什麼換

Switching does not hurt

搬過來不會痛

Repository paths, Docker port connectors and the credential model follow Nexus conventions. A production cut-over ran on the same host and the same ports without changing one line of CI configuration.

repository 路徑、Docker 連接埠、帳號模型都沿用 Nexus 的慣例。實際做過一次正式環境切換:同一台主機、同樣的連接埠,CI 設定一行都沒改。

It is small

它很小

A single Go binary. No JVM, no plugins, no application server. It starts serving in seconds and runs in a few hundred megabytes under real CI load.

單一 Go 執行檔,不需要 JVM、外掛或應用伺服器。幾秒內開始服務,在真實 CI 負載下記憶體用量維持在數百 MB。

Still shipping when upstream is down

上游壞掉時照樣出貨

Cached artefacts keep being served while a public registry is unreachable, so a bad afternoon at Maven Central does not stop your builds.

已快取的內容在公開來源連不上時仍然供應,Maven Central 出狀況的那個下午不會讓你們的建置全部停擺。

Nothing held back for a paid tier

沒有功能被留在付費版

There is no paid tier. Apache 2.0, every feature, no component limits, no request quotas.

因為沒有付費版。Apache 2.0,所有功能,不限元件數,不限請求數。

Running in one command

一行指令跑起來

docker compose -f deploy/docker-compose.yml up -d

Then open http://localhost:8081/ui/. Point your clients at it exactly as you would at Nexus:

然後開啟 http://localhost:8081/ui/。客戶端的設定方式和 Nexus 完全一樣:

Mavensettings.xml
<mirror>
  <id>holiaokho</id>
  <url>http://localhost:8081/repository/maven-public/</url>
  <mirrorOf>*</mirrorOf>
</mirror>
npm.npmrc
npm config set registry http://localhost:8081/repository/npm-group/
Dockerdocker pull
docker pull localhost:8081/docker-hub/alpine:3.19

Configuration

設定

A working configuration is this short. Every key can be given as a HOLIAOKHO_* environment variable instead, which is usually what you want in a container.

一份能跑的設定就這麼短。每個設定都可以改用 HOLIAOKHO_* 環境變數給定,在容器裡通常會這樣做。

server:
  listen: ":8081"
database:
  url: "postgres://holiaokho:PASSWORD@localhost:5432/holiaokho?sslmode=disable"
storage:
  type: fs              # fs | s3
  path: ./data/blobs
auth:
  anonymous_enabled: true
  session_ttl: 30m
log:
  level: info

Full example with every option完整範例(含所有選項)

25 formats

25 種格式

Each one tested against its official client in a Docker container. Every format can be hosted, proxied, or grouped behind one address.

每一種都用官方 client 在 Docker 容器中實測過。每種格式都可以 hosted、proxy,或 group 成一個位址。

  • mvn
  • npm
  • dkr
  • py
  • raw
  • nu
  • helm
  • go
  • apt
  • yum
  • apk
  • gem
  • crg
  • php
  • cnd
  • R
  • p2
  • pod
  • tf
  • pub
  • lfs
  • hf
  • ans
  • con
  • swf

What else it does

它還做了什麼

Access control

存取控制

  • Local accounts (argon2)
  • LDAP
  • OIDC
  • Reverse-proxy header authentication
  • Roles described as subject × action
  • Content selectors narrowing by path
  • User tokens
  • Login rate limiting
  • Password policy
  • 本機帳號(argon2)
  • LDAP
  • OIDC
  • 反向代理標頭認證
  • 角色以「對象 × 動作」描述
  • 內容選擇器依路徑收窄
  • 使用者權杖
  • 登入頻率限制
  • 密碼複雜度政策

Operations

維運

  • Routing rules
  • Cleanup policies, with preview
  • Soft delete and compaction
  • Storage quotas
  • Cron-scheduled tasks
  • Webhooks with HMAC signatures
  • Email notifications
  • Audit log
  • Backup and restore, blobs included
  • Prometheus metrics
  • 路由規則
  • 清理規則(含預覽)
  • 軟刪除與壓實回收
  • 儲存配額
  • cron 排程任務
  • 含 HMAC 簽章的 webhook
  • 電子郵件通知
  • 稽核紀錄
  • 含 blob 的備份還原
  • Prometheus 指標

Storage

儲存

  • Local filesystem or any S3-compatible service
  • Content-addressed
  • Reference-counted deduplication
  • 本機檔案系統或任何 S3 相容服務
  • 內容定址
  • 引用計數去重

Interface

介面

  • 繁體中文 · 简体中文 · English · 日本語 · 한국어
  • Dark mode
  • Keyboard search
  • Responsive layout
  • 繁體中文 · 简体中文 · English · 日本語 · 한국어
  • 深色模式
  • 鍵盤搜尋
  • RWD
good
liāustuff
khòostore

Where the name comes from

名字的由來

In Taiwanese Hokkien, hó-liāu(好料)means good stuff — good ingredients, good material, the kind you bring out when guests arrive. Khòo(庫)is where you keep things. Together: the place the good stuff lives.

The packages your builds depend on, and the artefacts they produce, are exactly that. They deserve somewhere dependable and close to hand.

The mark is a 广 roof with goods stacked beneath it — a storehouse, with the amber line for the light left on.

台語的「好料」(hó-liāu)是好東西、好材料——上等的食材、紮實的用料,家裡有好料,是客人來了值得端出來的那種。「庫」(khòo)是存放的地方。合起來就是:放好東西的地方。

你們建置時倚賴的套件、每次出版產出的成品,正是這樣的東西——值得好好收在一個可靠、隨手拿得到的地方。

Logo 是「广」字的屋頂,底下堆著貨,一座倉房;那道琥珀色的線,是留著的燈。