Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
99 lines (96 loc) · 4.6 KB
/
Copy pathdocker-compose.yml
File metadata and controls
99 lines (96 loc) · 4.6 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
# Example deployment: an Ichoi core behind Caddy (TLS termination for browsers).
#
# docker compose -f deploy/docker-compose.yml up -d
#
# - Caddy terminates HTTPS/WSS for the browser UI and reverse-proxies to ichoi's
# plain-HTTP :4042 (DESIGN Sec.4.2). Edit deploy/Caddyfile with your domain.
# - The CSIL+TLS listener :4043 (native clients + satellites) is published
# directly, NOT through Caddy — it runs its own pinned-fingerprint rustls TLS
# (DESIGN Sec.4.2). Forward :4043 through your NAT/firewall to this host.
# - Point ICHOI_MUSIC_DIR at your library via the ./music bind mount.
services:
ichoi:
image: containers.catalystsquad.com/public/catalystcommunity/ichoi:latest
restart: unless-stopped
environment:
# Core is the default role (DESIGN Sec.9); shown for clarity.
ICHOI_ROLE: core
# Required for a core: where the library (and, by default, the SQLite DB)
# lives inside the container.
ICHOI_MUSIC_DIR: /music
# Optional. When this path is below /music, those files are indexed only as
# audiobooks and are excluded from music artists/albums.
# ICHOI_AUDIOBOOK_DIR: /music/audiobooks
# Disc-like subfolders (CD1, Disc Two, Bonus Disc) are combined into their
# parent album by default. Both settings are optional.
# ICHOI_ALBUM_SUBFOLDER_FLAT: "true"
# ICHOI_ALBUM_SUBFOLDER_WORDS: "cd,disc,disk,bonus disc"
# Writable persistent state: SQLite, DNS-less RP keys, and CSIL/TLS identity.
ICHOI_DB_DIR: /data
# Fail startup if /music is missing or empty. This catches the common
# "forgot to mount my library" case before the server starts.
ICHOI_REQUIRE_MUSIC: "1"
LOG_LEVEL: ${LOG_LEVEL:-warn}
# Guest policy: open (default), lan-guests, or login-required.
# ICHOI_ACCESS_MODE: "login-required"
# Permit guests to create and control ownerless browser jukebox shares.
# This does not grant playlist, progress, media-copy, or admin access.
# ICHOI_ANONYMOUS_JUKEBOX: "true"
# Disable elevated guest permissions on a zero-account public instance.
# ICHOI_ZERO_ACCOUNT_GUEST_ACCESS: "false"
# LAN mode trusts X-Forwarded-For only from these immediate peers. This
# example does not expose :4042 directly, so the private Docker range is
# acceptable; prefer Caddy's exact /32 when it has a stable host address.
# ICHOI_TRUSTED_PROXY_CIDRS: "172.16.0.0/12"
# First-run bootstrap: unlocks admin account creation while zero accounts
# exist, then is consumed (DESIGN Sec.8). Set to a strong secret, then
# remove after bootstrapping.
# ICHOI_ADMIN_TOKEN: change-me-once
# Use 24 hours for a public demonstration server.
# ICHOI_SESSION_LIFETIME_HOURS: "24"
# Optional DNS-less LinkKeys login. Only exact lowercase "true" enables it.
# The RP identity is generated once and stored in ichoi.db with the rest
# of Ichoi's state under /data.
# ICHOI_LINKKEYS_LOCAL_RP: "true"
# ICHOI_LINKKEYS_LOCAL_RP_NAME: "Home Ichoi"
# ICHOI_LINKKEYS_TRUSTED_IDENTITIES: "family.example,alice@friends.example"
# Stable user admission does not depend on a public handle:
# ICHOI_LINKKEYS_TRUSTED_USER_IDS: "user-uuid@family.example"
# Optional regular LinkKeys RP service. This mode and local RP mode are
# mutually exclusive, and only exact lowercase "true" enables either.
# ICHOI_LINKKEYS_RP: "true"
# ICHOI_LINKKEYS_RP_ADDR: "linkkeys.example:4987"
# ICHOI_LINKKEYS_RP_FINGERPRINTS: "fingerprint1,fingerprint2"
# ICHOI_LINKKEYS_RP_API_KEY_FILE: "/run/secrets/linkkeys_rp_api_key"
# ICHOI_LINKKEYS_RP_DOMAIN: "ichoi.example"
# ICHOI_PUBLIC_URL: "https://ichoi.example"
volumes:
- ./music:/music:ro
# For an audiobook collection outside ./music, uncomment this mount and
# set ICHOI_AUDIOBOOK_DIR=/audiobooks above.
# - ./audiobooks:/audiobooks:ro
- ./data:/data
# For regular RP mode, mount an operator-created 0600 API-key file:
# - ./secrets/linkkeys_rp_api_key:/run/secrets/linkkeys_rp_api_key:ro
# :4043 must be reachable directly by native clients and satellites.
ports:
- "4043:4043"
# :4042 is intentionally NOT published to the host — only Caddy reaches it,
# over the internal compose network.
expose:
- "4042"
caddy:
image: caddy:2
restart: unless-stopped
depends_on:
- ichoi
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config: