-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompose.yml
More file actions
124 lines (119 loc) · 5.55 KB
/
Copy pathcompose.yml
File metadata and controls
124 lines (119 loc) · 5.55 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
services:
postgres:
image: "postgres:18.4-alpine"
container_name: "mindstock-postgres"
environment:
POSTGRES_DB: "mindstock"
POSTGRES_USER: "mindstock"
POSTGRES_PASSWORD: "mindstock"
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
TZ: "Asia/Tokyo"
ports:
- "5432:5432"
volumes:
# PG 18 moved some paths out of /var/lib/postgresql/data, so mount the
# parent directory to cover everything the image writes.
- "mindstock-pgdata:/var/lib/postgresql"
- "./docker/postgres-init.sh:/docker-entrypoint-initdb.d/01-init.sh:ro"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mindstock -d mindstock"]
interval: "20s"
timeout: "5s"
retries: 3
restart: "unless-stopped"
zitadel:
image: "ghcr.io/zitadel/zitadel:v4.15.0"
container_name: "mindstock-zitadel"
command: 'start-from-init --masterkey "${ZITADEL_MASTERKEY:-MasterkeyNeedsToHave32Characters}" --tlsMode disabled'
environment:
ZITADEL_DATABASE_POSTGRES_HOST: "postgres"
ZITADEL_DATABASE_POSTGRES_PORT: "5432"
ZITADEL_DATABASE_POSTGRES_DATABASE: "zitadel"
ZITADEL_DATABASE_POSTGRES_USER_USERNAME: "zitadel"
ZITADEL_DATABASE_POSTGRES_USER_PASSWORD: "zitadel"
ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE: "disable"
ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME: "mindstock"
ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD: "mindstock"
ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE: "disable"
ZITADEL_EXTERNALSECURE: "false"
ZITADEL_EXTERNALDOMAIN: "localhost"
ZITADEL_EXTERNALPORT: "8081"
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_EMAIL_ADDRESS: "admin@localhost"
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD: "Password1!"
# 初回ログインでのパスワード変更を要求しない(ローカル用)。
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORDCHANGEREQUIRED: "false"
# Zitadel v4 は新しい Login UI v2(別コンテナ)を既定にするが、本 compose は
# zitadel 本体のみなので v2 を無効化し、本体内蔵の Login v1(/ui/login)を使う。
# ※ インスタンス生成時のみ反映されるため、変更時は `docker compose down -v` で再 init する。
ZITADEL_DEFAULTINSTANCE_FEATURES_LOGINV2_REQUIRED: "false"
# 自動セットアップ用のサービスアカウント(IAM_OWNER)+ PAT を init 時に発行し、
# PAT を共有ボリュームへ書き出す。zitadel-init がこれで Management API を叩く。
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_USERNAME: "admin-sa"
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_MACHINE_NAME: "Admin Service Account"
ZITADEL_FIRSTINSTANCE_ORG_MACHINE_PAT_EXPIRATIONDATE: "2099-01-01T00:00:00Z"
ZITADEL_FIRSTINSTANCE_PATPATH: "/machinekey/pat.txt"
ports:
- "8081:8080"
volumes:
# 名前付きボリュームは root 所有で zitadel(非 root)が PAT を書けないため bind mount にする。
- "./docker/machinekey:/machinekey"
depends_on:
postgres:
condition: "service_healthy"
restart: "unless-stopped"
# compose up 時に Zitadel を宣言的にセットアップする(画面操作不要・冪等)。
# Project / API(JWT) / PKCE アプリ(DevMode + AccessToken=JWT + redirect)を作成し、
# 生成された AUTH_* を repo ルートの .env.zitadel に書き出す。
zitadel-init:
image: "alpine:3.24"
container_name: "mindstock-zitadel-init"
depends_on:
# zitadel に healthcheck はないため起動済み(service_started)を明示する。
zitadel:
condition: "service_started"
volumes:
- "./docker/machinekey:/machinekey:ro"
- "./docker/zitadel-init.sh:/zitadel-init.sh:ro"
- "./:/output"
entrypoint: ["sh", "/zitadel-init.sh"]
restart: "no"
# ローカル開発用の S3 互換オブジェクトストレージ(商品画像の保管先)。
garage:
image: "dxflrs/garage:v2.3.0"
container_name: "mindstock-garage"
volumes:
- "./docker/garage.toml:/etc/garage.toml:ro"
- "mindstock-garage-meta:/var/lib/garage/meta"
- "mindstock-garage-data:/var/lib/garage/data"
ports:
# S3 API のみ公開。admin API(3903)は compose ネットワーク内(garage-init)からのみ
# 到達すればよく、固定 admin_token と相まってホスト公開は不要・危険なので公開しない。
- "3900:3900"
# scratch イメージで shell/wget を持たないため、garage バイナリ自身で ready を判定する。
# /garage status は /etc/garage.toml(mount 済)を読みノードへ RPC して状態を返す。
healthcheck:
test: ["CMD", "/garage", "status"]
interval: "10s"
timeout: "5s"
retries: 5
start_period: "10s"
restart: "unless-stopped"
# compose up 時に Garage を宣言的にセットアップする(冪等)。
# layout 設定 / bucket / 固定 dev アクセスキーを作成する。資格情報は固定値で
# application.yaml の external.storage デフォルトと一致するため、ファイル出力は不要。
# dxflrs/garage は scratch イメージで shell を持たないため、alpine で
# admin API(:3903)を curl 越しに叩く(zitadel-init と同じ方式)。
garage-init:
image: "alpine:3.24"
container_name: "mindstock-garage-init"
depends_on:
garage:
condition: "service_healthy"
volumes:
- "./docker/garage-init.sh:/garage-init.sh:ro"
entrypoint: ["sh", "/garage-init.sh"]
restart: "no"
volumes:
mindstock-pgdata:
mindstock-garage-meta:
mindstock-garage-data: