管理
招待、ロール、利用停止、インスタンスの数値の読み方
管理画面は同じアドレスの /admin/ にあり、同じバイナリに組み込まれています。インスタンスの管理とは四つのことです。誰を入れるかを決める、何をしてよいかを決める、何が保存されているかを見る、問題があれば手を出す。それぞれが一つの権限です。
features.admin がオフだと、ここのルートはすべて 404 を返す
403 ではありません。オフにした機能はインスタンスにない機能なので、存在しないパスと同じ答えを返します。

権限とロール
権限は resource:verb 形式の文字列です。自分のもの以外に及ぶ権限には特権の印が付きます。
| 権限 | 及ぶ範囲 |
|---|---|
shares:create、shares:read、shares:delete | 自分の共有 |
tokens:manage | 自分の API トークン |
shares:read:any、shares:delete:any | インスタンスのすべての共有 |
users:read、users:write、users:delete | アカウント |
invites:read、invites:create、invites:delete | 招待コード |
roles:read、roles:write | ロールと、誰がそれを持つか |
stats:read | インスタンスの数値 |
インスタンスには四つのロールが付いています。owner はすべて、admin は users:delete、shares:delete:any、roles:write 以外のすべて、member は自分のことをする四つの権限を持ち、guest は何も持ちません。
guest は、サインインさせてから誰かがロールを移すまで待たせたいインスタンス向けです。auth.default_role をこれにすると、新しいアカウントはロールをもらうまで何もできません。
自分で作る
ロールは、名前、説明、権限の一覧、二つの上限でできています。持っている人たちで合わせて保存できる量と、1 ファイルの大きさです。自分で作り、許可する内容を変え、削除できます。
組み込みのロールは編集も削除もできない
権限を変えようとすると、auth.default_role を案内するメッセージと一緒に 409 が返ります。自分のロールを作り、新しいアカウントをそちらに登録してください。
アカウントが持つロールはちょうど一つです。新しいロールを割り当てると、前のロールと置き換わります。
組み込みの四つは入れ子になっています。guest は何もできず、member は admin のできることから管理の部分を除いたことができ、owner は admin のできることすべてとそれ以上ができます。だから一つで足ります。
招待コード
使われるのは auth.registration が invite のときだけです。open では無視され、closed では誰も登録できません。
コードには使用回数、任意の期限、一覧にしたときに意味がわかるメモがあります。期限がなければ、使い切るか取り消すまで有効です。招待制のインスタンスでコードなしで登録すると、コードが必要だというメッセージで断られます。
コードは一度しか返ってこない
コードそのものは保存されず、照合用の指紋だけが残ります。誰も控えていなかったら、取り消して作り直すしかありません。
一覧には、各コードの使用回数と、まだ使えるかどうかが出ます。取り消しても、そのコードですでに作られたアカウントには何も起きません。
tessera-server invite でコマンドラインからも作れます。-n は使用回数(デフォルト 1)、-d は期限までの日数(省略すると無期限)、--note はメモです。コードは一度だけ表示されます。
tessera-server invite -n 5 -d 7 --note "book club"アカウント
アカウントは利用停止にでき、また戻せます。
- 利用停止にすると、その人はサインインできなくなります。共有は配信され続けます。リンクを持っている人は何も悪いことをしていないからです。
- 中身も止めたいなら、共有そのものを無効にします。
認証アプリをなくした人の 2 段階認証は、ここから無効にできます。ユーザー一覧で、誰が有効にしているかがわかります。
アカウントを削除すると記録は塗りつぶされますが、アップロードしたものには手を付けません。その人の共有を終わらせるのは別の操作で、終わらせた数を報告します。どちらの場合も何が残るかはあなたのデータの置き場所を見てください。
最後の管理者は消せない
ロールを編集する権限を持つ唯一のアカウントを、削除する、降格する、その権限を外すといった操作は断られます。自分自身に対しても同じです。
共有
インスタンスのすべての共有を、新しい順に一覧できます。アップロードした人、送った量、無効になっていればその理由も出ます。理由は管理者か、見つけたものの名前を挙げるスキャナーです。どれでも削除できます。
アップロードした人がもういない共有に届く方法は shares:delete:any だけです。通常の削除は持ち主を確認しますが、削除したアカウントは何も持っていないからです。
設定
すべての設定を、今効いている値と、それを決めた層と一緒に一覧できます。環境変数でしか設定できないものは、変えようとして黙って失敗するのではなく、そう表示されます。
何かを捨てる変更は確認するまで断られます。決める前に、何が消えるかを問い合わせることもできます。
環境変数でしか設定できない設定は設定を見てください。
アクセスログ
share.access_log.enabled はオフです。有効にすると中身を渡すたびに記録され、shares:read:any を持つ人なら共有ごとに読めます。
アップロードした人は読めません。
一行に何が入り、どれだけ残るかはあなたのデータの置き場所を見てください。
ストレージバックエンド
ファイルの保存先はここで管理します。追加、削除、新しいアップロードをどれが受けるかの選択です。それぞれに名前、アドレス、任意の容量上限、読み取り専用の切り替え、ブラウザを直接向かわせてよいかの設定があります。
それぞれ、前回の呼び出しに応答したかと、応答しなかった理由も表示されます。アップロードとダウンロードのたびに更新され、アイドル中のものは 15 分ごと、失敗中のものは 5 分ごとに確認します。応答しなくなったバックエンドは、ほかの見た目は正常なまま、そこにある共有だけが失敗します。
アドレスは保存前に封印され、二度と読み出されません。認証情報が含まれていて、バックエンドの一覧はヘルプのスレッドに貼られがちなものだからです。
ファイルがどの保存先を選ぶかはファイルの保存先を見てください。
インスタンスの名前と見た目
トップページとリンクプレビューに出るタイトルと説明、それにインスタンスの既定の言語はここで設定します。
リンクプレビューはこの言語で書かれます。リンクを取得するチャットアプリは、誰が読むかを何も伝えないからです。ブラウザが英語、日本語、繁体字中国語、簡体字中国語のどれも求めない訪問者にも、サイトはこの言語で開きます。変えるまでは英語です。
あとから変えても、届くのは新しい訪問者だけです。最初の訪問で言語が cookie に保存され、それ以降は cookie が優先されます。
デフォルトの見た目もここです。ライト、ダーク、システムに合わせる、テーマ、アクセントカラー。各自が自分の設定で選ぶこともでき、デフォルトはそれ以外の全員に見える見た目です。
速度テスト
デフォルトはオフです。speed.enabled を有効にすると、訪問者とインスタンスのあいだの回線を測るページが加わります。ディスクには触れない使い捨てのデータを送受信して測ります。
| 設定 | デフォルト | |
|---|---|---|
speed.enabled | オフ | |
speed.anonymous | オフ | サインインした人だけが実行できる |
speed.max_bytes | 25 MiB | 1 回の実行で送受信する最大量 |
同じ送信元が実行できるのは 1 時間に 5 回で、アップロードとダウンロードを合わせて数えます。オフのとき、または匿名の訪問者にオフのとき、その人たちから見ればこの機能は存在しません。
インスタンスの数値
インスタンスは次を報告します。
| 項目 | 内容 |
|---|---|
accounts、administrators | アカウントの数と、そのうち管理者の数 |
shares と live_shares | 持っているすべてと、訪問者がまだ開けるもの |
stored_bytes | 保存先にまだあるアップロードの中身 |
quota_bytes | storage.max_total_bytes の上限。未設定なら null |
live_invites | まだ誰かを入れられるコード |
bytes_served | このサーバーが送った量 |
bytes_redirected | ブラウザをバケットから直接取らせた量 |
stored_bytes、shares、live_shares、bytes_served のスナップショットを 1 日 1 回、1 年分残すので、管理画面でストレージの推移を見られます。サーバーが止まっていた日は 0 ではなくスナップショットなしになり、履歴はこの機能を入れたバージョンから始まります。
shares と live_shares の差が大きいなら、掃除が追いついていないか、保持期間が思ったより長いということです。
quota_bytes が null なのは、誰も決めていないということ
匿名アップロードを受けるインスタンスでは、起動時の警告が指しているのはまさにこの組み合わせです。設定を見てください。