maestro/docs/operations/initial-setup.html
oss-sync eb35e32f7a
Some checks failed
CI / build-and-test (push) Has been cancelled
sync: update from private repo (c18b98e)
2026-06-10 01:34:52 +00:00

127 lines
8.0 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>初期セットアップ(認証・初回管理者) — MAESTRO</title>
<link rel="stylesheet" href="guide.css">
</head>
<body>
<div class="wrap">
<header class="doc">
<div class="crumbs"><a href="index.html">運用ガイド</a> / 初期セットアップ</div>
<h1>初期セットアップ — 認証と初回管理者アカウント <span class="badge done">完成</span></h1>
<p class="meta">対象: MAESTRO を認証ありで運用し、最初の管理者アカウントを作る人 更新日: 2026-06-10</p>
</header>
<h2>このガイドの範囲</h2>
<p>
MAESTRO は認証なしno-authでも動きますが、複数人で使う・外部に出す場合はログインを有効にします。
その際に最初に詰まるのが「<b>まだ誰もログインできない状態で、どうやって最初の管理者を作るか</b>」です。
本ガイドはローカル認証ID + パスワード)を前提に、その初回ブートストラップ手順をまとめます。
</p>
<div class="note">
<b>setup-wizard とは別です</b><br>
<code>npm run setup</code> のセットアップウィザードは <b>LLM 接続先の設定だけ</b>が対象で、認証・初期管理者は対象外です。
認証まわりは本ガイドで手動設定します。
</div>
<h2>前提</h2>
<ul>
<li><code>config.yaml</code> が存在すること(無ければ <code>config.yaml.example</code> をコピー)。</li>
<li>サーバーをビルド・起動できること(<code>scripts/server.sh start</code> 等)。</li>
</ul>
<h2>ステップ 1 — ローカル認証を有効化し、初回 admin を seed する</h2>
<p>
初回管理者は「セルフ登録」ではなく、<b><code>config.yaml</code> に書いておくと起動時に自動作成seedされる</b>方式です。
<code>auth:</code> ブロックに次を追加します。
</p>
<pre><code>auth:
session_secret: "ランダムな長い文字列" # 未設定だと再起動ごとにセッション失効
local:
enabled: true
allow_signup: false # 後述。true で他ユーザーのセルフ登録を許可
bootstrap_admin: # 起動時に id='local' の管理者を冪等 seed
email: "admin" # ← ログインIDメール形式でなくてOK
password: "強いパスワードを設定" # ← 平文で config に入る。初回ログイン後に変更推奨</code></pre>
<table>
<thead><tr><th>キー</th><th>意味</th></tr></thead>
<tbody>
<tr><td><code>auth.session_secret</code></td><td>セッション署名鍵。未設定だとプロセスごとのランダム値になり、再起動でログインが切れる。安定運用では必ず設定。</td></tr>
<tr><td><code>auth.local.enabled</code></td><td><code>true</code> でローカルID+パスワードログインを有効化。これだけで認証が有効になり、OAuth 無しでも保護される。</td></tr>
<tr><td><code>auth.local.bootstrap_admin.email</code></td><td>初回管理者のログインID。後述の通り<b>メール形式は不要</b></td></tr>
<tr><td><code>auth.local.bootstrap_admin.password</code></td><td>初回管理者のパスワード。<b>config に平文で保存される</b>ため、初回ログイン後に Settings から変更を推奨。</td></tr>
<tr><td><code>auth.local.allow_signup</code></td><td><code>true</code> で 2人目以降のセルフ登録を許可作成されるのは承認待ち状態</td></tr>
</tbody>
</table>
<div class="tip">
<b>no-auth からの移行はそのまま引き継げる</b><br>
seed される管理者は固定 ID <code>local</code> で作られます。これは no-auth 時代にデータの所有者として使われていた ID と同じなので、
認証なしで溜めたタスクやファイルを、そのまま初回 admin が引き継ぎます。
</div>
<h2>ステップ 2 — 再起動してログイン</h2>
<ol class="steps">
<li>サーバーを再起動する。</li>
<li>起動ログに <code>[auth] seeded local system admin id=local email=...</code> が出ることを確認するseed は冪等。再起動のたびに config の値でパスワードが更新される)。</li>
<li>ブラウザで <code>/auth/login</code> を開き、<b>ステップ1で設定した ID とパスワード</b>でログインする。そのまま管理者として入れる。</li>
</ol>
<h2>ログインID について(メール不要)</h2>
<p>
ローカル認証の識別子は内部的に「email」という名前のフィールドですが、<b>メール形式の検証はしていません</b>
<code>admin</code><code>team-taro</code> のような<b>自由な文字列をログインID として使えます</b>
ログイン/登録フォームの入力欄も <code>type="text"</code>・ラベル「ログインID」になっており、
ブラウザのメール形式チェックは外れています。
</p>
<div class="note">
<b>OAuth を併用する場合</b><br>
Google / Gitea OAuth も使う構成では、そちら側はメールアドレスで識別され、管理者自動昇格は <code>auth.admin_emails</code> のメール一致で判定されます。
ローカル認証だけなら自由ID で問題ありません。
</div>
<h2>ステップ 3 — 2人目以降のユーザー</h2>
<p>方法は2通りです。</p>
<ul>
<li><b>セルフ登録を許可する</b>: <code>auth.local.allow_signup: true</code> にすると、ログイン画面に登録フォームが出る。登録されたユーザーは<b>承認待ちpending</b>になり、そのままではアプリを使えない。管理者が <b>Settings → ユーザー管理</b> で承認すると有効化される。</li>
<li><b>管理者が用意する</b>: allow_signup を使わず、管理者がユーザーを作成・有効化する運用も可能。</li>
</ul>
<h2>よくある詰まり</h2>
<table>
<thead><tr><th>症状</th><th>原因 / 対処</th></tr></thead>
<tbody>
<tr>
<td>起動時に <code>Cannot read properties of undefined (reading 'google')</code> で落ちる</td>
<td>古いビルドで <code>auth.providers</code> 未設定だと発生した既知不具合(修正済み)。最新を pull・再ビルドすれば解消。暫定回避は <code>auth:</code> 直下に <code>providers: {}</code> を1行足す。</td>
</tr>
<tr>
<td>再起動のたびにログインが切れる</td>
<td><code>auth.session_secret</code> 未設定。安定した値を設定する。</td>
</tr>
<tr>
<td>初回 admin でログインできない</td>
<td>入力した ID/パスワードが <code>bootstrap_admin</code> の値と一致しているか確認。値を変えて再起動すればパスワードは上書き更新されるseed は冪等)。</td>
</tr>
<tr>
<td>UI 変更が反映されない</td>
<td>サーバー再起動だけでは UI は更新されない。<code>npm run build:ui</code> を実行してから再起動する。</td>
</tr>
</tbody>
</table>
<h2>背景・関連</h2>
<ul>
<li>設定の全項目は <code>config.yaml.example</code><code>auth:</code> ブロックのコメント参照。</li>
<li>LLM 接続先の初期設定はセットアップウィザード(<code>npm run setup</code>)が担当。本ガイドの認証はウィザードの対象外。</li>
<li>関連変更: 自由ログインID 対応PR #448<code>auth.providers</code> 未設定クラッシュ修正PR #447</li>
</ul>
<footer class="doc">MAESTRO — docs/operations/initial-setup.html 完成版2026-06-10</footer>
</div>
</body>
</html>