-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.standalone.example.yml
More file actions
392 lines (381 loc) · 23.9 KB
/
Copy pathdocker-compose.standalone.example.yml
File metadata and controls
392 lines (381 loc) · 23.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
# `.env` を置けず、環境変数も設定できない実行環境向けの単体定義。
# (管理画面に YAML を貼り付けて起動するタイプの環境を想定)
#
# docker-compose.yml との違いは「${...} を使わず、値を YAML に直接書く」点だけ。
# ${...} は `.env` かシェルの環境変数からしか解決できず、どちらも無い環境では
# 既定値のあるものしか効かないため。profile も付けられない前提なので、
# 使うサービスだけをここに並べる(取り込みは管理画面の初期化ボタンから叩く)。
#
# 使い方:
# 1. cp docker-compose.standalone.example.yml docker-compose.standalone.yml
# (コピー先は .gitignore 済み。実値を書くのはコピーした側で、
# 雛形のこのファイルには置き場の絶対パスも接続先の IP も書かない)
# 2. 「ここだけ編集」の置き場を、そのホストの絶対パスに書き換える
# 3. その内容を管理画面に貼り付けて起動する
# 4. http://<ホスト>:7010/ を開く(DB が無い間もソース 0 件で起動する)
#
# ソースプラグインは下のコメントを外すと使える(この環境ではオーバーレイを重ねられないので
# ここに直接書いてある)。
#
# 「答える」層は、chiezo-app に渡す設定だけを載せてコンテナは載せていない。 推論サーバと
# 検索エンジンは別サーバーで動かしているものを指せば済み(chiezo-app は OpenAI 互換の口を
# 叩くだけ)、貼り付けて動かすような小さな実行環境で同居させる前提も無いため。同じホストに
# 立てるなら、上書きを重ねられる環境で docker-compose.llm.yml を使うこと。
#
# 通常の環境では docker-compose.yml を使う(こちらは値の直書きぶん古くなりやすい)。
# ---- ここだけ編集: データの置き場(1つだけ) ----
# 管理画面から登録する環境では相対パス (./data) の基準が分かりにくいので絶対パスで書く。
# 用意するのはこの親だけで、下の3つは chiezo-init が起動時に作る:
# <置き場>/corpus … ダンプから作った .db の置き場(取り込んだ .db はここに入れる)
# <置き場>/notes … 「覚える」層の書き込み先
# <置き場>/state … 管理画面から入れた設定(話す相手の on/off・API キー)。API キーが入る
# 書式は「ホスト側の絶対パス:コンテナ側」。`type: bind` の長い形は使わない ——
# 古い Docker だとホスト側のディレクトリを自動で作らない
x-data-volume: &data-volume "/path/to/chiezo/data:/data"
# corpus だけは app に読み取り専用で重ねる(書くのは取り込み側。取り違えて壊さないため)。
# 上を書き換えたらここも同じ親に揃えること —— YAML のアンカーは文字列の一部に
# 差し込めないので、置き場のパスだけ2行に分かれる
x-corpus-volume: &corpus-volume "/path/to/chiezo/data/corpus:/data/corpus:ro"
# CLI ブリッジ(下のほうで畳んである)が読む設定 DB。読み取り専用で渡す。
# 上と同じ親に揃えること。**コンテナ側は /state のまま** —— ブリッジは
# /state/settings.db を決め打ちで読む(CHIEZO_BRIDGE_STATE_DB の既定)ので、
# app 側の置き場が data/ の下へ移ってもここは変えない
x-state-volume: &state-volume "/path/to/chiezo/data/state:/state:ro"
# ---- ここだけ編集(必要なときだけ): 実行ユーザー ----
# イメージ内の既定は 10001:10001 で、ホストに実在しない番号にしてある
# (万一コンテナから抜け出されても、ホストのユーザーのファイルには届かない)。
# 置き場をホストから直接編集・書き戻ししたいときだけ `id -u`:`id -g` に書き換える
x-run-as: &run-as "10001:10001"
services:
# 置き場の下に corpus/・notes/・state/ を作り、所有者を実行ユーザーに合わせる
# ワンショット。corpus も chown する(取り込み側が書くため。app 側は
# corpus を read-only で重ねてあるので、そちらからは書けない)。
# bind 先がホストに無いと Docker が root 所有で作ってしまい、
# 非 root で動く app がメモも設定も書けずに落ちる。
# app も trigger もこれの完了を待つので、いちばん先に置いてある
chiezo-init:
image: alpine:3.24
container_name: chiezo-init
user: root
entrypoint:
- sh
- -c
- mkdir -p /data/corpus /data/notes /data/state && chown -R "$$0" /data
- *run-as
volumes:
- *data-volume
restart: "no"
# やること(タスク・ルール)を**外へ公開する**ときだけ、以下のコメントを外す。
#
# 立てなくても画面は使える —— 本体(chiezo-app)が /tasks に同じ画面を、
# 認証なしで出す(LAN 内前提の面なので素通し)。このサービスが要るのは、
# 外からログインして使いたいときだけ。**本体(7010)は公開してはいけない** ——
# サーバー側の鍵で AI を叩く口・課金の走る生成の口・取り込みを起こせる管理画面・
# メモを消せる口まで一緒に外へ出るため。だから外向きの面だけを別プロセスに分ける。
# 詳しくは docs/tasks.md。
#chiezo-tasks:
# image: ghcr.io/rtcode337/chiezo-app:latest
# container_name: chiezo-tasks
# # --forwarded-allow-ips には信頼できるプロキシの IP を書く。既定(127.0.0.1)の
# # ままだと別コンテナのプロキシからのヘッダが無視され、レート制限のキーが
# # プロキシ 1 つに潰れる
# command:
# - uvicorn
# - app.tasks_app:app
# - --host
# - "0.0.0.0"
# - --port
# - "7015"
# - --proxy-headers
# - --forwarded-allow-ips
# - "127.0.0.1"
# ports:
# - "7015:7015"
# volumes:
# # notes は本体と同じ実体を見る(WAL なので別プロセスから書ける)。
# # corpus は要らない —— この面は知識ベースを引かない
# - *data-volume
# user: *run-as
# environment:
# CHIEZO_NOTES_DIR: /data/notes
# CHIEZO_STATE_DIR: /data/state
# # ログインを許す Google アカウント 1 件と、その資格情報。
# # **3 つとも埋めるまで /api は 401 を返し続ける**(素通しはしない)。
# # Google Cloud Console の承認済みリダイレクト URI には
# # <公開URL>/login/oauth2/code/google を登録する
# GOOGLE_CLIENT_ID: "xxxxxxxxxxxx.apps.googleusercontent.com"
# GOOGLE_CLIENT_SECRET: "xxxxxxxxxxxxxxxxxxxxxxxx"
# ALLOWED_EMAIL: "you@example.com"
# # 公開 URL。リダイレクト URI をここから組む(最優先)。設定しない場合は
# # 組み立てに使ってよいホストを ALLOWED_REDIRECT_HOSTS で許可リストにする
# PUBLIC_BASE_URL: "https://tasks.example.com"
# #ALLOWED_REDIRECT_HOSTS: "tasks.example.com"
# #LOGIN_RATE_LIMIT_PER_MINUTE: "20" # ログイン試行の上限(IP あたり・毎分)
# # 認証を通さない開発モード。**本番では絶対に有効にしない**
# #CHIEZO_TASKS_DEV: "false"
# depends_on:
# chiezo-init:
# condition: service_completed_successfully
# restart: unless-stopped
# 検索 API・MCP・管理画面。これが本体で、単体で起動する。
chiezo-app:
# 障害時は :latest ではなく :sha-xxxxxxx を指定すれば任意の時点に戻せる
image: ghcr.io/rtcode337/chiezo-app:latest
container_name: chiezo-app
ports:
# host:container。8000 は他のアプリと衝突しやすいので避けている
- "7010:7010"
volumes:
# バインドするホストのディレクトリは1つだけ。下が corpus/(取り込んだ本体)・
# notes/(短期記憶)・state/(管理画面の設定)で、作るのは chiezo-init
- *data-volume
# corpus は配信側から見て読み取り専用。書くのは取り込み側(chiezo-trigger)だけ。
# notes を corpus と同じ場所に置かない —— 1 件書くたびに全ソースの再走査が走る
- *corpus-volume
user: *run-as
environment:
CHIEZO_DATA_DIR: /data/corpus
# 「覚える」層(/v1/notes)。空にすると機能ごと無効になる
CHIEZO_NOTES_DIR: /data/notes
# 管理画面の初期化ボタンから叩く chiezo-trigger の内部 URL(ホストには公開しない)。
# サービス名で引くので、下の chiezo-trigger の名前を変えるならここも合わせる
CHIEZO_TRIGGER_URL: http://chiezo-trigger:8080
# 管理画面から入れた設定(話す相手の on/off・API キー・モデル)の置き場。
# 未設定だと管理画面から相手を増やせない(環境変数で指す相手だけが使える)。
CHIEZO_STATE_DIR: /data/state
# 本体の調整はどれも既定があるため、変えたいときだけ足す(素のままなら書かない)。
#CHIEZO_MCP_ALLOWED_HOSTS: "chiezo.example.com:7010,localhost:*" # /mcp の Host 検証
#CHIEZO_RESCAN_INTERVAL: "5" # data/ の変化を拾う間隔(秒)。低速なディスクでは伸ばす
#CHIEZO_CATALOG_TTL: "300" # ソース一覧(GET /sources)のキャッシュ(秒)
#
# ---- 「答える」層(/v1/ask・/v1/chat・/ai/chat)を使う場合 ----
# 話す相手は管理画面(/admin)の「話す相手」から on/off する。
# 同居の推論サーバも Gemini も OpenRouter も CLI ブリッジも同じ扱いで、URL は
# app/providers.py に決め打ち。入れるのは API キーと on/off とモデルだけで、
# 保存先は上の CHIEZO_STATE_DIR。
#
# ここに書くのは、推論サーバを別マシンで動かしている場合の URL だけ。
# 同居なら書かなくてよい(コンテナ名で辿り着けるので決め打ちが効く)。
#CHIEZO_LLM_URL: http://192.0.2.10:7011/v1 # ← 別マシンの推論サーバ
#
# CLI ブリッジ(Claude Code / Codex CLI)を使うなら、この定義の下のほうにある
# chiezo-bridge-* のコメントも外すこと。
#
# 会話の既定。GPU で 8B 級を動かしていて「Chiezo の知識を持った相手と普通に話す」
# 使い方をしたいなら agent + 0 に倒す(素の既定は rag + 1)。
#CHIEZO_ASK_DEFAULT_MODE: agent
#CHIEZO_ASK_DEFAULT_GROUNDED: "0"
#
# ---- web 検索(agent モードの道具に加える。既定では無効)----
# この 1 行が機能フラグを兼ねる。取り込んだダンプより新しい出来事や、いま現在の
# 状態を聞かれたときだけモデルが使う(本文は取りに行かず、タイトル・要約・URL だけ)。
# 検索エンジン(SearXNG)はこの定義にも入っている(下の searxng)ので、
# 同居のものを指すならサービス名でよい。別ホストのものを指すならその URL を書く。
CHIEZO_WEB_SEARCH_URL: http://searxng:7012/search # 同居のもの(使わないなら空に)
#CHIEZO_WEB_SEARCH_URL: http://192.0.2.20:7012/search # ← 別に立てた SearXNG
#CHIEZO_WEB_SEARCH_PROVIDER: searxng # searxng(既定)/ brave
#CHIEZO_WEB_SEARCH_API_KEY: "" # brave のときだけ
#CHIEZO_WEB_SEARCH_RESULTS: "5" # 1 回に見る件数
#CHIEZO_WEB_SEARCH_TIMEOUT: "10" # 秒
#
# ---- 画像生成(MCP の image_generate)----
# 置き場は既定で CHIEZO_STATE_DIR の下(上でマウント済み)。**GPU は別マシンに
# 置くのが普通**なので、そちらの ComfyUI を指す。指さなければ外部(Gemini)だけが使える
# (鍵は管理画面の「話す相手」に登録したものを流用する)。
#CHIEZO_IMAGE_URL: http://192.0.2.30:7014 # ← GPU マシンの ComfyUI(素の ComfyUI なら 8188)
#CHIEZO_MEDIA_DIR: /data/state/media # 置き場(既定は CHIEZO_STATE_DIR の下)
#CHIEZO_MEDIA_KEEP_DAYS: "14" # 出来た画像を残す日数
#CHIEZO_IMAGE_TIMEOUT: "300" # 1 枚あたりの上限(秒)
#
# ---- 回答・agent の調整(どれも既定があるので、変えたいときだけ)----
# agent に要るコンテキスト長の目安 = MAX_STEPS × TOOL_CHARS(+ 質問と道具の定義で 2〜3k)。
# 相手を待つ時間(秒)。既定は相手で変わる: CLI ブリッジ経由 900 / それ以外 120。
# ブリッジ自身の上限(CHIEZO_BRIDGE_TIMEOUT)より長くすること —— 待つ側が先に
# 切れると、向こうが何秒で諦めたかも分からないまま ReadTimeout だけが残る。
#CHIEZO_ANSWER_TIMEOUT: "900"
#CHIEZO_ANSWER_DOCS: "4" # 根拠として本文を取ってくる文書数
#CHIEZO_ANSWER_MAX_CHARS: "6000" # 抜粋の合計文字数
#CHIEZO_AGENT_MAX_STEPS: "6" # 道具を呼べる回数の上限
#CHIEZO_AGENT_TOOL_CHARS: "3000" # 1 回の道具の結果をモデルに返す上限文字数
#CHIEZO_AGENT_TIMEOUT: "180" # ループ全体の締め切り(秒)
# 「集める」層が 1 回で焼ける素材の大きさ(バイト)。既定は 192 MB。
# 地図辞典から国ぶんの名簿を作るときだけ要る —— 住所・電話・サイトまで運ぶ
# 1 件は 474 バイト(実測)あり、60 万件なら 280 MB を超えて断られる。
# 素材は 1 本の文字列で組むので、上げたぶんはそのままメモリに載る。
#CHIEZO_COLLECT_MAX_MATERIAL_BYTES: "402653184" # 384 MB
depends_on:
# 置き場の用意(chiezo-init)が済んでから起動する
chiezo-init:
condition: service_completed_successfully
chiezo-trigger:
condition: service_started
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:7010/healthz"]
interval: 60s
# agent モードの道具 `web_search` が引く検索エンジン。設定を焼き込んだイメージなので、
# リポジトリが無くてもこれだけで立つ(素の searxng/searxng は settings.yml を要求する)。
# ホストへは公開しない —— 使うのは chiezo-app だけで、外向きの検索の中継になるため。
# 使わないなら、このブロックごと消して上の CHIEZO_WEB_SEARCH_URL も空にする。
searxng:
# 素の SearXNG。設定は下の configs で流し込む(独自イメージもマウントも要らない)。
# 上流のイメージは /etc/searxng を VOLUME 宣言しているので、設定を焼き込んでも
# 匿名ボリュームに隠される。configs はボリュームより深いパスへ置かれるので届く。
image: searxng/searxng:2026.7.31-057a77168
container_name: chiezo-searxng
configs:
- source: chiezo-searxng-settings
target: /etc/searxng/settings.yml
environment:
# 待ち受けを 7012 にする(既定は 8080)。この image は granian で動くので
# 効くのは GRANIAN_PORT(SearXNG の SEARXNG_PORT は設定ファイル側の値)
GRANIAN_PORT: "7012"
restart: unless-stopped
# 既定では畳んである —— この項目を受け付けない実行環境がある
# (NAS のコンテナマネージャー等)。使える環境なら外すと「良き隣人」になる
#cpu_shares: 512
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:7012/healthz"]
interval: 60s
# 管理画面からの「未初期化データの初期化」を受けて ingest を実行する内部専用トリガー。
# ingest イメージを流用し、CMD だけ server:app(FastAPI)起動に上書きする。
# ホストへポート公開せず、chiezo-app からのみ docker 内部ネットワーク経由で到達できる。
chiezo-trigger:
image: ghcr.io/rtcode337/chiezo-ingest:latest
container_name: chiezo-trigger
command: ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]
depends_on:
chiezo-init:
condition: service_completed_successfully
volumes:
# 取り込みは corpus に書き込むので、こちらは読み取り専用で重ねない
- *data-volume
user: *run-as
environment:
CHIEZO_DATA_DIR: /data/corpus
# 固化(短期記憶 → 長期記憶)の素材を取りに行く先。**組み込みのソースなので
# 設定は要らない** —— サービス名で届くこの既定のまま使う。
CHIEZO_APP_URL: http://chiezo-app:7010
# ---- 別コンテナのソースプラグインを使う場合 ----
# 下の chiezo-plugin を有効にしたら、その URL をカンマ区切りで並べる。
# プラグインが提供するソースが管理画面の「未初期化データの初期化」に出る。
# (固化はプラグインではなく組み込みなので、ここに書く必要は無い)
#CHIEZO_PLUGIN_SOURCES: http://chiezo-plugin:8080
restart: unless-stopped
# 「良き隣人」のための相対ウェイト(既定 1024 の半分)。CPU が競合したときだけ
# 他のコンテナへ譲り、空いていれば全力で使える。ハード上限の cpus は使わない ——
# CPU CFS スケジューラのバンド幅制御を無効にしたカーネルでは作成自体が失敗するため。
# 既定では畳んである —— この項目を受け付けない実行環境がある
# (NAS のコンテナマネージャー等)。使える環境なら外してよい(無くても動く)
#cpu_shares: 512
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:8080/healthz"]
interval: 60s
# ---- CLI の AI と話す場合だけ、以下のコメントを外す ----
#
# これらは HTTP ではなく CLI なので、OpenAI 互換の口に見せるブリッジを挟む。
# サブスクの枠で使うためのもので、API キー経路は従量課金になるため使わない。
# イメージは 1 つで、CHIEZO_BRIDGE_CLI で役割を決める(1 回 pull すればディスクは
# 1 つぶんで、コンテナを何個立てても増えるのは書き込み層だけ)。使うものだけ外せばよい。
# 立ち上げたら管理画面(/admin)の「話す相手」で on にできるようになる
# (到達できない間は押せない)。
#
#chiezo-bridge-claude:
# image: ghcr.io/rtcode337/chiezo-bridge:latest
# container_name: chiezo-bridge-claude
# volumes:
# # 認証情報は Chiezo の設定 DB から読む(管理画面から登録する)。読み取り専用
# - *state-volume
# environment:
# CHIEZO_BRIDGE_CLI: claude
# CHIEZO_BRIDGE_MCP_URL: http://chiezo-app:7010/mcp/knowledge/
# restart: unless-stopped
# #cpu_shares: 512
#
#chiezo-bridge-codex:
# image: ghcr.io/rtcode337/chiezo-bridge:latest
# container_name: chiezo-bridge-codex
# volumes:
# - *state-volume
# # Codex は access token が切れると refresh token で更新をかけ、その結果を
# # $CODEX_HOME/auth.json へ書く。相手は更新のたびに refresh token を回転させて
# # 古いほうを無効にするので、ここを永続化しないとコンテナを作り直すたびに
# # 登録時のトークンへ戻り、使用済みのもので更新をかけて失効する
# # (`Your refresh token has already been used ...` でサインインし直しになる)。
# - chiezo-codex-home:/srv/bridge/.codex
# environment:
# CHIEZO_BRIDGE_CLI: codex
# CHIEZO_BRIDGE_MCP_URL: http://chiezo-app:7010/mcp/knowledge/
# restart: unless-stopped
# #cpu_shares: 512
#
# Antigravity だけマウントが違う。API キー方式が無く、コンテナ内で 1 回サインインした
# 結果をホーム配下のキャッシュから読むので、/state(読み取り専用)ではなく
# 書き込み可能なホームを渡して永続化する。立ち上げたら、その環境の
# コンテナ管理画面から `agy` を対話で 1 回実行してサインインすること
# (表示される URL を手元のブラウザで開き、出てきたコードを貼り戻す)。
#
# ホストのディレクトリではなく名前付きボリュームを使う。 ブリッジは非 root(uid 10001)で
# 動くのに、バインド先が無いと Docker は root 所有で作る —— サインインの保存が
# `permission denied` で落ちる(実際に踏んだ)。名前付きボリュームなら
# イメージ側の所有者(uid 10001)がそのまま入る。
# どうしてもホストのパスに置くなら、先に作って `chown -R 10001:10001` してからにすること。
#chiezo-bridge-antigravity:
# image: ghcr.io/rtcode337/chiezo-bridge:latest
# container_name: chiezo-bridge-antigravity
# volumes:
# - type: volume
# source: chiezo-antigravity-home
# target: /srv/bridge/home
# environment:
# CHIEZO_BRIDGE_CLI: antigravity
# CHIEZO_BRIDGE_MCP_URL: http://chiezo-app:7010/mcp/knowledge/
# restart: unless-stopped
# #cpu_shares: 512
# ---- ソースプラグインを使う場合だけ、以下のコメントを外す ----
#
# プラグインは Chiezo とは別のリポジトリ・別のイメージで、取得した文書を NDJSON で
# 配るだけのサービス(DB を焼くのは chiezo-trigger 側)。**この環境ではオーバーレイを
# 重ねられない**ので、プラグイン側の docker-compose.plugin.yml の代わりにここへ直接書く。
#
# 有効にするには (1) 下のブロックのコメントを外し、(2) chiezo-trigger の environment の
# CHIEZO_PLUGIN_SOURCES を有効にする。増やすときはサービスを足し、URL を `,` で並べる。
#
# イメージが非公開なら、先にその環境で GHCR へログインしておくこと
# (`docker login ghcr.io`。管理画面から貼り付ける環境では、その環境の
# レジストリ認証の設定が要る)。
#
# 契約とプラグインの書き方は docs/adding-a-source.md のケース 3 が正。
#
#chiezo-plugin:
# image: ghcr.io/<自分のアカウント>/chiezo-plugin:latest
# container_name: chiezo-plugin
# # ホストへポート公開しない。chiezo-trigger からのみ到達できればよい
# restart: unless-stopped
# #cpu_shares: 512
# healthcheck:
# test: ["CMD", "python", "-c",
# "import urllib.request; urllib.request.urlopen('http://localhost:8080/healthz')"]
# interval: 60s
# サインイン結果の置き場(Antigravity)。ホストのディレクトリにしないのは、
# 無いときに Docker が root 所有で作ってしまい、非 root のブリッジが書けなくなるため。
volumes:
chiezo-antigravity-home:
chiezo-codex-home:
# SearXNG の設定。**イメージにもホストのファイルにも置かない** —— 上流のイメージは
# /etc/searxng を VOLUME 宣言しているので焼き込んでも匿名ボリュームに隠され、
# ホストのファイルを重ねる形はこの環境(YAML を貼るだけ)では使えない。
# 中身は既定値を土台に、Chiezo から API として引くために要る 3 点だけ。
configs:
chiezo-searxng-settings:
content: |
use_default_settings: true
server:
# 秘密の値ではない(LAN 内前提の既定)。Chiezo は JSON の検索しか叩かない
secret_key: "chiezo-lan"
# API として叩くので bot 判定を切る。LAN の外へ出すなら true に戻すこと
limiter: false
image_proxy: false
search:
# SearXNG の既定は html だけ。Chiezo は format=json で引くので足す
formats: [html, json]