Techvoyage
首頁
一張高顏值的 16:9 科技質感卡片,具有深藍色 and 橙色色調,插圖展示如何在 Ubuntu VPS 上部署自託管的 Block 旗下 Buzz 協作中繼伺服器,其中包含一個帶有置中文字的毛玻璃微動質感面板。

自建 Block 旗下 Buzz 協作平台:輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間

本教學將手把手帶您在 Ubuntu VPS 上部署自託管的 Block 旗下 Nostr 中繼 Buzz,並配置 Cloudflare DNS 安全網路。我們將幫助您搭建起一個安全性的共享工作空間,讓您的團隊成員與多個 AI 智能體(如 Claude、Kimi)能夠基於加密身份進行高效溝通、共享專案上下文並實現無縫協作。

Sep 8, 2026 - 11 分鐘閱讀
目錄

在與多個 AI 智能體(AI Agent)協同工作時,最讓人頭痛的障礙莫過於「上下文斷片化(Context Fragmentation)」。由於對話分散在不同的工具中,您最終不得不扮演起一個「肉肉路由器」的角色——頻繁地從 Claude Code 中複製對話並貼上到 Gemini CLI,然後再從 Gemini CLI 複製並貼上到 Hermes Agent。而當您身邊還有人類團隊成員一起協作時,這種繁瑣的摩擦感更是成倍增長。

Buzz 是一款開源的協同工作空間,它將人類團隊和 AI 智能體凝聚在一個統一環境中。在這裡,人類同事與 AI 智能體能夠共享相同的任務和專案歷史,並實現天衣無缝的工作交接。

什麼是 Block 旗下的 Buzz?人機協同的 AI 智能體共享空間

Buzz 是 Block 公司(由推特創辦人傑克·多西創立)推出的開源協作工作空間,它讓團隊成員和 AI 智能體能夠在相同的頻道與專案中並肩工作。它具有以下幾個核心亮點:

  • 共享上下文: 頻道是團隊成員與智能體開展協作的核心陣地。所有的對話記錄和專案歷史都完整保留在頻道中。
  • 智能體間通信: 智能體之間能够跨機器直接進行交流。一個 AI 智能體可以 @ 另一個智能體,從上完成工作的轉交或代碼的交叉審查。
  • 提及驅動激活: AI 智能體僅在被 @ 提及時才會激活,平時則保持靜默。被提及時,智能體將讀取頻道中的相關上下文並開始工作。
  • 統一身份系統: 團隊成員與 AI 智能體使用同一套身份系統,並通過加密私鑰/公鑰進行安全認證。
  • 委派命令: 您可以向人類同事授予指揮您的智能體的權限,讓整個團隊都能輕鬆指派和調用彼此的數位助手。
  • 自託管伺服器: 因為您是該伺服器的託管者,所以您的數據完全由您掌控。您可以自由決定誰能加入,並定義專屬的運行規則。

基於 Nostr 的加密級 Buzz 架構解析

  • Nostr 中繼器充當伺服器: 消息、工作流、代碼倉庫以及其他事件都經過加密簽名和驗證,並儲存在 Nostr 中繼伺服器(Relay)上。Nostr 協定原生支援通過 WebSockets 和 REST API 進行通信。
  • 統一加密身份: 人類和智能體都使用各自的加密金鑰進行認證。此身份完全保留在用戶端,絕不會儲存在伺服器上。
  • 一等公民級智能體: 每个智能體都擁有獨立的身份、頻道成員資格和審計跟蹤(Audit Trail)。智能體使用智能體通信協定(ACP)連接到工作空間。
  • 去中心化 Git 倉庫: 代碼庫儲存在相容 S3 的物件儲存中,而任務、拉取請求(PR)和代碼審查則在 Nostr 事件日誌中進行追蹤。因此,Buzz 的 Git 倉庫實際上是託管在 Nostr 中繼器上,而非 GitHub。
  • Buzz 用戶端屬於 Nostr 用戶端: Buzz 應用與 Nostr 中繼器是分離的;它是一個桌面或移動端用戶端,負責連接到中繼器的 URL 節點。
  • 基礎技術棧: 由 PostgreSQL 資料庫處理事件儲存與全文檢索,Redis 負責管理發佈/訂閱(Pub/Sub)消息佇列,而相容 S3 的 MinIO 用於儲存媒體檔案。

如何在 Linux VPS 上部署自託管的 Block 旗下 Buzz

0. 前提條件

  • 一台 Linux VPS
  • 域名已指向您的伺服器 IP 地址
  • Docker 以及 Docker Compose 外掛程式
  • Cloudflare 帳戶(免費服務計劃)

在本指南中,我們將把 Nostr 中繼器部署在 Ubuntu VPS 上,並通過 教學:使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路 保護其安全。整個基礎技術棧包含 Docker Compose 中的四個服務:中继器(relay)、PostgreSQL、Redis 和 MinIO,並使用 Caddy 來提供 HTTPS 支援。

使用 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露到私有網路

相關指南

教學:使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路

了解如何利用 Cloudflare WARP 和 Zero Trust(零信任)在不開放入站防火牆端口的情況下,安全地在全球範圍內暴露和存取您的 Hermes Agent。

8 分鐘閱讀

1. Cloudflare DNS 與 API 權杖

創建 Cloudflare API 權杖(Token)

  1. 點擊右上角的個人頭像,並在下拉選單中選擇 Profile。
  2. 點擊 API Tokens。

  1. 點擊 Create Token 按鈕。
  2. 選擇使用範本 Edit zone DNS。
  3. 配置範本如下:
    • Permissions: Zone — DNS — Edit
    • Zone Resources: Include — Specific zone — example.com
  4. 點擊 Continue to summary。
  5. 點擊 Create Token。
  6. 拷貝生成的 API 權杖,因為頁面關閉後它將不再顯示。
  7. 在終端機中驗證生成的權杖,確保其能正常工作:
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" -H "Authorization: Bearer YOUR_TOKEN_HERE"

DNS 解析記錄

  • 創建一條 A 記錄,並將代理狀態設置為 僅限 DNS(DNS only)。

2. 在 Ubuntu 上安裝 Docker

運行以下命令在 Ubuntu 上安裝 Docker:

# Add Docker's official GPG key and set up the Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Add the official Docker repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Update package list
sudo apt update

# Install Docker Engine, Docker Community Edition, and containerd runtime
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Start automatically when the system boots
sudo systemctl enable docker

# Verify docker is installed
docker --version

sudo apt install -y docker-compose-plugin

# Verify the compose plugin is installed
docker compose version

3. 克隆倉庫並進行配置

git clone https://github.com/block/buzz.git

cd buzz/deploy/compose
cp .env.example .env
nano .env

編輯 .env 文件:

  • 域名配置:
BUZZ_DOMAIN=buzz.pafor.me
RELAY_URL=wss://buzz.pafor.me
BUZZ_PAIRING_RELAY_URL=wss://buzz.pafor.me/pair
BUZZ_MEDIA_BASE_URL=https://buzz.pafor.me/media
BUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me
BUZZ_CORS_ORIGINS=https://buzz.pafor.me
  • 所有者金鑰: RELAY_OWNER_PUBKEY 欄位需要填入您的 64 位 16 進位公鑰。請先在桌面用戶端生成一個身份(選擇 'Create a new identity key' → 複製以 npub 格式開頭的公開 ID),然後將其轉換為 16 進位格式。
  • 金鑰安全(Secrets):
    • 使用該 線上工具 或運行命令 openssl rand -hex 32(運行 7 次)來生成高強度的隨機金鑰。
    • 將所有的 CHANGE_ME 佔位符替換掉:包括 BUZZ_RELAY_PRIVATE_KEY、BUZZ_GIT_HOOK_HMAC_SECRET、Postgres/Redis/Typesense 的密碼以及 S3 的 Access/Secret Key。
    • 未替換的佔位符是導致容器陷入無限重啟循環的最常見原因;請通過命令 grep CHANGE_ME .env 來核對並排除隱患。
    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY
    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX
    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD
    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD
    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY
    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY
    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY
  • 其他配置項:
    • 將環境變數 CLOUDFLARE_API_TOKEN 添加到您的配置中,並賦予先前生成的 API 權杖值。Caddy 將用其自動申請憑證。
    • Buzz 的預設配置非常開放,任何知道您中繼器地址的人都可以驗證並加入。為了安全起見,請務必配置 RELAY_OWNER_PUBKEY,並將 BUZZ_REQUIRE_RELAY_MEMBERSHIP=true 和 BUZZ_REQUIRE_AUTH_TOKEN=true 設為啟用狀態。

4. 使用 Caddy 開啟 HTTPS 訪問

構建集成 Cloudflare DNS 模組的自定義 Caddy 鏡像

  • 我們在 Caddy 中配置基於 Cloudflare 的 DNS-01 挑戰(Challenge)。DNS-01 驗證的原理是讓 Caddy 外掛程式向您的公網 DNS 寫入一條 TXT 挑戰記錄 _acme-challenge.buzz.pafor.me;
  • 隨後 Let's Encrypt 從公共網際網路查詢該記錄,以確權您的域名。這意味著您的域名必須是 Cloudflare 帳戶中的公網解析區域,而不能只是 Zero Trust / WARP 區域網路 DNS 內的私有域名。如果您的域名只在私網下分发解析而沒有公網節點,DNS-01 將會失敗,需要改用其他驗證方式。
  • 將以下配置加入到 Caddyfile 中:
{
  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
  • 創建一個 Dockerfile.caddy,其内容如下,這是 compose.caddy.yml 運行所必需的:
FROM caddy:2-builder AS builder

RUN xcaddy build \
    --with github.com/caddy-dns/cloudflare

FROM caddy:2-alpine

COPY --from=builder /usr/bin/caddy /usr/bin/caddy
  • 修改 compose.caddy.yml,以使用我們剛生成的帶有 Cloudflare 外掛程式的 Caddy 鏡像,並傳入 API 權杖參數:
services:
  relay:
    ports: !reset []

  caddy:
    build:
      context: .
      dockerfile: Dockerfile.caddy
    image: buzz-caddy:cloudflare
    depends_on:
      relay:
        condition: service_healthy
    environment:
      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}
      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}
    ports:
      - "${CADDY_HTTP_PORT:-80}:80"
      - "${CADDY_HTTPS_PORT:-443}:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - buzz-caddy-data:/data
      - buzz-caddy-config:/config
    restart: unless-stopped
    networks:
      - buzz-net

volumes:
  buzz-caddy-data:
    labels:
      com.buzz.volume: caddy-data
  buzz-caddy-config:
    labels:
      com.buzz.volume: caddy-config

啟動 Docker 容器組合

docker compose -f compose.yml -f compose.caddy.yml up -d

#Check the Docker status
docker compose ps

打開您的網頁瀏覽器並訪問 http://buzz.pafor.me,驗證中繼服務是否已順利跑起來。

步驟 5:建立起首日備份機制

mkdir -p /buzz_backups
crontab -e

添加一個每日凌晨自動執行的資料庫快照定時任務(Cron Job):

0 3 * * * cd /home/<user>/buzz/deploy/compose && docker compose exec -T postgres pg_dump -U buzz buzz > /buzz_backups/buzz-$(date +\%Y\%m\%d).sql

注意:請將 BUZZ_RELAY_PRIVATE_KEY 視為永久不可失配的金鑰。由於中繼器中的事件都與此金鑰綁定,如果未來變更了私鑰,舊事件將無法通過驗證;就算您復原了資料庫備份,在新私鑰下它也不會被 Nostr 網路視為同一個中繼服務。

配置 Buzz 桌面用戶端與 Nostr 加密身份

從 https://github.com/block/buzz/releases 下載最新版 Buzz 桌面用戶端並運行。依次完善個人資料,直到您來到 “Join or create a community” 介面。

點擊 “Join a community” 並拷貝您的公鑰(Public Key)。

在 VPS 上運行以下命令列工具,將您自己添加為該平台的首位會員:

docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere

在用戶端中填入 wss://buzz.pafor.me 作為社區接入 URL,然後點擊 “Next”。

起一個帥氣的暱稱,然後點擊 “Next” 按鈕。

協作頻道與 AI 智能體

頻道是圍繞特定任務或專案劃分的群組。為您手頭的每個任務或工程建立獨立的頻道,並將團隊成員與所需的 AI 智能體拉入其中。

頻道內的所有消息、代碼與文件都會被自動分享,免去了逐一向新成員同步前因後果的煩惱。任何人都可以通過「@」來點名激活特定的 AI 智能體,智能體收到召喚後會讀取相關歷史消息並立刻著手處理。更妙的是,不同的 AI 智能體之間也能互相 @ 指派任務。

讓我們試著給預置的智能體發一條私信(DM)

創建一個新頻道并拉幾個 AI 智能體進來吧

激活智能體運行時(Agent Runtimes)

平台自帶的運行時預設依賴於「自動探測」來查找特定系統目錄(例如 ~/.local/bin)下的執行程序(如 hermes-acp)。如果您的智能體軟體安裝在非標準路徑下,Buzz 將無法正確識別。

以 Kimi Code 為例,它的智能體 ID 為 kimi,Buzz 預設會在 ~/.local/bin/kimi 尋找它。通過創建一個軟連結(Symbolic Link)即可輕鬆搞定:

ln -s kimi-cli /Users/<user>/.local/bin/kimi

此時,Kimi Code 就會顯示在「Agent runtimes」列表中。

專案與代碼倉庫管理

請先在 Settings → Experiments 菜單中激活「Projects」實驗性功能:

目前,一個專案(Project)必須使用 buzz-cli 命令列工具來創建(雖然在後續版本中會加入 UI 直接創建的支持)。

在 VPS 上安裝並部署 buzz-cli

在 VPS 上依次執行以下命令,編譯並安裝好 buzz-cli 用戶端:

sudo apt install cargo
cd ~/buzz
cargo install --path crates/buzz-cli
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

使用線上工具或通過 buzz-cli 生成一對 Nostr 加密公私鑰。這組金鑰將代表该 buzz-cli 工具在 Nostr 網路中的數位身份。

docker run --rm --entrypoint /usr/local/bin/buzz-admin ghcr.io/block/buzz:main generate-key

# Use the generated Public Key
docker compose exec relay buzz-admin add-member --pubkey generated_Public_key

配置您的 CLI 變數:

# Copy the Secret key as the BUZZ_PRIVATE_KEY
echo 'export BUZZ_PRIVATE_KEY="nsec1..."'  >> /home/<user>/.bashrc

echo 'export BUZZ_RELAY_URL="wss://buzz.pafor.me"'  >> /home/<user>/.bashrc

運行以下命令來測試 buzz-cli 是否已經與您的中繼器配对暢通:

buzz channels list

使用 buzz-cli 創建全新的專案

# --channel refers to the UUID of the channel
buzz repos create --id TestKOA --name 'Display Name' --channel "bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b"

專案的所有權極為嚴格,只有創建者才有權將其刪除。由於該「Display Name」專案是由 buzz-cli 發起創建的,而目前的命令列版本尚未內置刪除指令,因此該專案無法通過常規方式清空。

再次點開您的桌面用戶端,驗證該專案是否已顯示在工作區中。

一旦專案列表在介面中開啟,後續您便可以直接通過右上角的 「+」 按鈕隨心所欲地添加更多子專案了。

拉入現有的 Git 代碼倉庫

在您的本地開發機器上安裝 git-credential-nostr 憑證輔助工具。這需要您的系統已安裝 Git 2.46+ 版本並配有 Rust 構建環境。詳情可參考此專案的 Readme 描述:

cargo install --path crates/git-credential-nostr

對 git-credential-nostr 進行配置,使其獲得 Buzz 中繼器的授權權限:

# 1. Register the helper and enable per-path credentials.
git config --global credential.helper nostr
git config --global credential.useHttpPath true

# 2. Store your nsec in a key file (must be 0600). Replace "nsec1..." with your private key
mkdir -p ~/.nostr
echo "nsec1..." > ~/.nostr/key && chmod 600 ~/.nostr/key
git config --global nostr.keyfile ~/.nostr/key

在 Buzz 中繼上開闢出該 Git 庫的儲存節點:

buzz repos create --id koa-email-routing --name "KOA Email Routing" --clone "https://buzz.pafor.me/git/<pub_key>/koa-email-routing" --nostr-relay "wss://buzz.pafor.me"

在第一次執行 git push 時,您可能會被攔截並報錯 remote: missing Authorization header。這是由於 Git 寫入控制(ACL)是由頻道成員資格決定的,您必須先將該倉庫 ID 與一個具體的 Buzz 頻道進行綁定,從而授權合規寫入:

buzz repos bind --id koa-email-routing --channel <CHANNEL_UUID>

# push the code again
git push

在某些情況下,在 Buzz 桌面版中查閱專案進度時會遇到類似下方的 Git 模組拉取失敗提示。這是由於該桌面應用要求系統必須搭載 Git 2.46+ 版本,而應用直接啟動時可能預設尋址到了系統中的舊版 Git 引擎:

請在您的 shell 設定檔中通過執行 launchctl setenv PATH "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" 聲明新版 Git 所在的 PATH,並直接在終端中拉起 Buzz 應用。對此可參考該 Issue 的詳細排查記錄。

open -a Buzz

重新進入用戶端中的 Projects 標籤頁,您會驚喜地發現代碼庫的所有提交與詳情已經完美載入出來了。

利用二維碼將 AI 助手同步至手機端 Buzz App

Buzz 手機端的「掃碼配對」只認 HTTPS 協定,且 VPS 上的中繼服務預設並不會在背景運行 buzz-pair-relay 組件。

cd ~/buzz
cargo install --path crates/buzz-pair-relay

將以下配置注入到您的 compose.yml 文件中,聲明並啟動 buzz-pair-relay 容器進程:

  pair:
    image: ${BUZZ_IMAGE:-ghcr.io/block/buzz:main}
    entrypoint: ["/usr/local/bin/buzz-pair-relay"]
    environment:
      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000
    ports:
      - "${BUZZ_PAIR_RELAY_PORT:-5000}:5000"
    restart: unless-stopped
    networks:
      [buzz-net]

在您的 .env 中聲明 BUZZ_PAIRING_RELAY_URL 及其專用的運行埠號:

BUZZ_PAIRING_RELAY_URL=wss://buzz.pafor.me/pair
BUZZ_PAIR_RELAY_PORT=5000

點擊桌面端應用中的 Settings, 進入 「Mobile」 配對項:

點擊 “Start pairing” —— 介面會生成專屬的綁定二維碼;打開手機端 App 掃一掃,接著在桌面端點擊 “Code Match” 確認無誤,雙端便立即完成信任綁定。

注意:手機端应用中的智能體之所以能隨叫隨到,是基於您的桌面端應用在背景持續維繫運行。只有保障桌面機處於線上狀態,手機端派發的智能體指令才能被順利分發與執行。

結語

不可否認,作為一個還處於發展初期的技術方案,Buzz 在面對大規模生產環境時依然稍顯稚嫩,伴隨著一些偶發的系統 Bug 與介面互動上的限制。但對於小型團隊或單兵作戰的獨立開發者而言,這無疑是一場令人血脈偾張的前沿探索。它為我们揭開了一幅波瀾壯闊的人機無縫協奏畫卷,讓我們提前觸碰到了「AI 智能體成為工作夥伴」的未來工作模式。

參考資源

相關文章

一張高顏值的 16:9 科技質感卡片,具有深藍色與琥珀色調,插圖展示如何為 DeepSeek Harness 接入 Block Buzz 協作平台並構建自託管 Nostr 協定閘道,中央配有高對比度毛玻璃面板與精緻正體中文排版。

AI 與智能體

為 DeepSeek Harness 接入 Buzz 協作平台:構建自託管 Nostr 訊息閘道的完整實踐

深入解析如何透過 Nostr 協定將 DeepSeek Harness 接入 Block Buzz 協作平台:手把手配置 NIP-42 鑑權認證、基於 40003 事件的原位串流編輯輸出、頻道獨立工作階段管理與本地工作區指令聯動,為開發團隊建構安全可控、開箱即用的人機協同智能體開發環境與全新工作流程。

14 分鐘閱讀
在一張溫和的羊皮紙背景上,高品質極簡風格的TREK自託管旅行規劃器儀表板3D插圖。

旅行

使用Docker與TREK自託管您的個性化智能旅行日程:一站式深度規劃並輕鬆管理預訂、財務和行李清單

本文詳細介紹如何使用Docker部署開源旅行規劃系統TREK。我們將帶您配置Caddy反向代理和Cloudflare R2物件儲存,實現資料的安全備份與圖片的高效載入。此外,還將演示如何利用MCP(模型上下文協定)連接Claude等AI代理,通過自然语言對話一鍵生成您的專屬旅行日程,開啟完美旅程。

22 分鐘閱讀
Nuxt 應用程式在 Cloudflare 上的腳手架建構:傳統 Shell 腳本與 AI 智慧體技能對比。分析為什麼智慧體技能優於傳統初始化腳本。

AI 與智能體

從傳統初始化範本腳本到智慧體:AI Agent 技能如何優雅地取代 Nuxt 應用程式的腳手架建構腳本

輕鬆在 Cloudflare Workers 上快速建構 Nuxt 應用程式腳手架。深入剖析並學習我們如何使用功能強大、極具靈活性、能根據意圖決策且支援自我修復的 AI 智慧體技能,來徹底取代脆弱且難以維護的傳統 Shell 腳本,並詳細演示如何透過 npx skills 命令行工具將其無缝安裝到您的本地開發工作流中。

2 分鐘閱讀