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
# Mezame on Alpine, orchestrated with Docker Compose.
#
# First-run setup (interactive, one-off):
# docker compose run --rm setup
# # inside the container:
# kiro-cli login --use-device-flow # or: export KIRO_API_KEY=ksk_...
# mezame init
# exit
#
# Normal run:
# docker compose up
# # or detached:
# docker compose up -d
#
# The `setup` and `mezame` services share the same image and volumes, so
# credentials and config written during setup persist into the running
# service.
services:
mezame:
build: .
image: mezame:local
container_name: mezame
command:
ports:
- "9510:9510"
volumes:
- kiro-state:/root/.local/share/kiro-cli
- kiro-sessions:/root/.kiro
- mezame-config:/root/.mezame
environment:
# Optional. Alternative to `kiro-cli login --use-device-flow`.
# Uncomment and set, or put KIRO_API_KEY in a .env file next to
# this compose file.
# KIRO_API_KEY: ${KIRO_API_KEY:-}
KIRO_LOG_LEVEL: ${KIRO_LOG_LEVEL:-info}
restart: unless-stopped
# One-shot service for first-run setup. Same image, same volumes, but
# interactive and without publishing the port. Invoked explicitly via
# `docker compose run --rm setup`; never started by `docker compose up`
# thanks to the `setup` profile.
setup:
build: .
image: mezame:local
profiles:
command:
stdin_open: true
tty: true
volumes:
- kiro-state:/root/.local/share/kiro-cli
- kiro-sessions:/root/.kiro
- mezame-config:/root/.mezame
volumes:
kiro-state:
kiro-sessions:
mezame-config: