若要自行託管 Netstamp,建議先從程式碼儲存庫提供的標準 Compose 部署開始。它會執行三個服務:
| 服務 | 用途 |
|---|---|
postgres | PostgreSQL 16、TimescaleDB,以及保存資料的 named volume |
migrate | 使用相同 Netstamp 映像檔版本執行一次性的資料庫遷移 |
netstamp | 控制器、內嵌 React 應用程式、API,以及 Linux 探測器安裝資源 |
下載並設定
mkdir -p /opt/netstamp
cd /opt/netstamp
curl -fsSLO https://raw.githubusercontent.com/yorukot/netstamp/main/deployments/docker/compose.yaml
curl -fsSLO https://raw.githubusercontent.com/yorukot/netstamp/main/deployments/docker/example.env
cp example.env .env
chmod 600 .env產生五組彼此獨立的密鑰:
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32將不同的隨機值分別填入 .env 下列欄位:
DATABASE_PASSWORD=<random value>
LOG_PSEUDONYM_KEY=<random value>
SYSTEM_SETTINGS_ENCRYPTION_KEY=<random value>
AUTH_SESSION_HASH_KEY=<random value>
AUTH_API_TOKEN_HASH_KEY=<random value>重新啟動或升級時必須沿用這些值。變更 hash key 會讓對應憑證失效;變更系統設定加密金鑰,則可能導致已儲存的 SMTP 憑證無法解密。
啟動服務
docker compose pull
docker compose up -d
docker compose ps
docker compose logs migrate正常狀態如下:
postgres顯示 healthy;migrate以狀態碼 0 結束;netstamp持續執行;- 設定的連接埠可回應
/healthz與/api/v1/healthz。
curl --fail http://127.0.0.1:3000/healthz
curl --fail http://127.0.0.1:3000/api/v1/healthz選擇映像檔與版本
預設值如下:
NETSTAMP_IMAGE=yorukot/netstamp
NETSTAMP_VERSION=latest
TIMESCALEDB_IMAGE=timescale/timescaledb:latest-pg16
NETSTAMP_PORT=3000latest 適合試用。正式或受控環境應將 NETSTAMP_VERSION 與 TIMESCALEDB_IMAGE 固定在已測試、不可變動的 release tag 或 digest。遷移與應用程式服務必須使用相同的 Netstamp 版本。
持久化資料
資料庫存放在 Compose 中邏輯名稱為 netstamp-postgres 的 volume;Docker 通常會在實際名稱前加上 Compose project name。移除 container 不會刪除 volume。除非確定要銷毀所有專案、使用者、探測器、結果、事件與設定,否則不要執行 docker compose down -v。
列出並檢查 volume:
docker volume ls --filter name=netstamp-postgres
docker compose exec postgres psql -U netstamp -d netstamp -c 'select now();'建置自訂映像檔
發布的映像檔包含控制器、遷移工具、網頁應用程式,以及 amd64/arm64 探測器執行檔。若要從 checkout 建置相同映像檔:
docker build -f deployments/docker/Dockerfile -t netstamp:local .
NETSTAMP_IMAGE=netstamp NETSTAMP_VERSION=local docker compose up -d前端的 VITE_NETSTAMP_* 功能旗標會在建置時寫入。製作自訂映像檔時,請透過 Docker 建置參數修改;在已建置完成的容器中新增執行階段環境變數,不會改變前端內容。
接下來
將服務公開到網際網路之前,請完成正式環境部署中的所有項目。