Garage のロゴ。この記事では Garage に garage-webui を追加し、ブラウザからクラスタとバケットを管理します

概要

Garage は CLI が本体です。ただしレイアウトを組み、バケットとキーを結びつける作業は、画面で見たほうがずっと速く進みます。

Garage には公式の Web コンソールがなく、サードパーティの UI がいくつかあります。この記事では、その中でもっとも単純な garage-webui を扱います。

Garage がすでに動いている状態で、compose にサービスを 1 つ追加する形で進めます。

Garage 自体のインストールと CLI での構成は、前の記事で扱っています。

インストール

Docker と Docker Compose がインストールされている必要があります。インストールは下の記事で扱っています。

webui サービスの追加

前の記事の compose に webui サービスを 1 つ追加します。完成したファイルはリポジトリにあります。sample/docker/garage-webui

 1# docker-compose.yml
 2
 3services:
 4  garage:
 5    image: dxflrs/garage:v2.4.1
 6    container_name: garage
 7    restart: unless-stopped
 8    ports:
 9      - "3900:3900"     # S3 API, signed requests only
10    # - "3901:3901"     # RPC, only needed to join other nodes
11      - "3902:3902"     # static website hosting, public read
12    # - "3903:3903"     # admin API, reached by webui over the compose network
13    env_file:
14      - .env
15    volumes:
16      - ./garage.toml:/etc/garage.toml:ro
17      - ./meta:/var/lib/garage/meta
18      - ./data:/var/lib/garage/data
19
20  webui:
21    image: khairul169/garage-webui:1.1.0
22    container_name: garage-webui
23    restart: unless-stopped
24    depends_on:
25      - garage
26    ports:
27      - "3909:3909"
28    environment:
29      API_BASE_URL: "http://garage:3903"
30      S3_ENDPOINT_URL: "http://garage:3900"
31      API_ADMIN_KEY: "${GARAGE_ADMIN_TOKEN}"
32      AUTH_USER_PASS: "${AUTH_USER_PASS}"
33    volumes:
34      - ./garage.toml:/etc/garage.toml:ro

ログインの追加

アカウントとパスワードハッシュを生成します。

1# htpasswd -nBC 10 {id}
2htpasswd -nBC 10 admin

プロンプトが 2 回聞いてきて、最後の行に アカウント:ハッシュ の形で出力されます。この行をそのままコピーします。

1New password:
2Re-type new password:
3admin:$2y$10$H9W.......yn6ze54n2

.env に貼り付けます。

1# htpasswd -nBC 10 admin
2AUTH_USER_PASS=admin:$2y$10$H9W.......yn6ze54n2

再起動

環境変数はコンテナの作成時に埋め込まれるため、変更後はコンテナを作り直す必要があります。

1docker compose up -d --force-recreate
2
3[+] Restarting 2/2
4 ✔ Container garage-webui  Started                                                                                                                                                                                                        0.7s
5 ✔ Container garage        Started

WEB UI

アクセス

ex) http://192.168.0.10:3909

ブラウザで garage-webui の 3909 ポートにアクセスした画面

ダッシュボード

webui のダッシュボード。レイアウトを組む前なので Status が Unavailable、Storage Nodes が 0 です

クラスタの作成

Cluster タブのノード一覧。Zone と Capacity が空です

Node Assign

Assign Node ダイアログで zone と capacity を入力します

Node Apply

ステージングされたレイアウト変更を適用する段階

作成完了

レイアウト適用後、ノードがストレージとして認識され Layout version が上がった状態

バケットの作成

Buckets タブで新しいバケットを作成します

バケットへの権限付与

キーの作成

Keys タブでアクセスキーを発行した結果

バケットへの移動

Manage タブへ移動します

バケット詳細の Manage タブを開きます

パーミッションの接続

Permissions の項目で、接続するキーに必要な権限を与えます。

Permissions でアクセスキーに読み取り・書き込み権限を与えます

追加オプション

静的ウェブサイトの許可

バケット設定で Website Access Enabled をオンにします。

バケット設定で Website Access をオンにして静的ウェブサイトを許可します

まとめ

CLI でやっていたことがブラウザに移っただけで、動作は同じです。Assign と Apply が分かれているのも、キーとバケットを別々に作って権限でつなぐのも CLI と変わりません。

webui は admin API をラップした画面なので、Garage 側の概念を知っていれば迷うところはありません。逆に概念を知らずに画面から入ると、Assign だけして Apply を忘れる、といった形で詰まります。

留意点は 2 つです。公式コンソールではなくサードパーティなので、Garage 本体と更新サイクルが異なります。

そして 認証はデフォルトでオフです。 AUTH_USER_PASS を設定しなければ、3909 に到達できる人は誰でも管理者になります。内部ネットワークであっても、開けておく理由はありません。

パスワードを変えるにはハッシュを作り直してコンテナを再作成する必要があります。運用では、認証を前段のリバースプロキシに移すか、そもそもポートを公開せず VPN の中からだけ到達できるようにするほうが楽です。