-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
78 lines (77 loc) · 4.15 KB
/
Copy pathdocker-compose.yml
File metadata and controls
78 lines (77 loc) · 4.15 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
services:
jack:
# Pre-built image published to GitHub Container Registry on every push to main.
image: ghcr.io/roziscoding/jack:main
container_name: jack
restart: unless-stopped
ports:
- '${JACK_PORT:-5225}:5225'
environment:
# production turns off pino-pretty and structured-logs JSON
ENVIRONMENT: production
LOG_LEVEL: info
PORT: 5225
APP_CONFIG_PATH: /config/config.jsonc
# Enables the management API (on MANAGEMENT_PORT, default 5226) that the
# jack-ui service talks to. The UI injects this same value as its
# X-Management-Key, so both read one variable and always match. To run jack
# headless, drop the jack-ui service below and this line.
MANAGEMENT_KEY: ${JACK_MANAGEMENT_KEY:?set JACK_MANAGEMENT_KEY in a .env file next to this compose (any long random string)}
volumes:
# App config. Drop your config.jsonc in a ./config dir next to this file
# (start from the config.jsonc template in this examples/ folder).
- ./config:/config
# Media library. jack streams files to peers using the absolute path each
# Radarr/Sonarr stores for the file (i.e. the path INSIDE the *arr
# container), so jack must see those files at that SAME path. The
# `/data/media` target below is a placeholder — change it to match your
# *arr's media path(s), and add one mount per path if they use several
# (e.g. /movies and /tv).
- ${MEDIA_PATH:-./data/media}:/data/media
# Completed downloads dir — must match `downloads.completedPath` in
# config.jsonc. IMPORTANT: mount this SAME folder into your Radarr and
# Sonarr containers at the SAME path (e.g. /data/torrents). jack writes
# finished files here and *arr resolves that literal path in its own
# filesystem to import them — if they don't match, *arr can't import.
# (No watch folder: *arr hands grabs to jack over the qBittorrent API.)
- ${TORRENTS_PATH:-./data/torrents}:/data/torrents
# If Radarr / Sonarr are defined in this same compose file, wait for them to
# be healthy before starting jack. Auto-registration only runs at startup, so
# this makes the Torznab indexer + qBittorrent client register on first boot
# instead of needing a jack restart. (Needs `healthcheck` blocks on those
# services — the linuxserver.io images ship with them.)
# depends_on:
# radarr: {condition: service_healthy}
# sonarr: {condition: service_healthy}
# If Radarr / Sonarr run in their own compose network, attach this service
# to it so `jack.internalUrl` / server URLs resolve by container name.
# Otherwise reach them via host IP.
# networks:
# - media
# Management console — a Nuxt BFF that proxies jack's management API. Published
# alongside the backend on every push to main. Open it at http://localhost:3000.
jack-ui:
image: ghcr.io/roziscoding/jack-ui:main
container_name: jack-ui
restart: unless-stopped
depends_on:
- jack
ports:
- '${JACK_UI_PORT:-3000}:3000'
environment:
# The UI reaches jack's management API over the compose network by service
# name. Must match jack's MANAGEMENT_PORT (default 5226). No host port for
# 5226 is published — the UI is the only thing that needs it.
JACK_MANAGEMENT_API_URL: http://jack:5226
# Inject mode: the BFF adds X-Management-Key on every call, so the browser is
# never prompted. Same variable as jack's MANAGEMENT_KEY above, so they match.
JACK_MANAGEMENT_KEY: ${JACK_MANAGEMENT_KEY:?set JACK_MANAGEMENT_KEY in a .env file next to this compose (any long random string)}
# Only used in cookie-prompt mode (when JACK_MANAGEMENT_KEY is unset): seals
# the session cookie and must be >= 32 chars. Left unset here because this
# compose runs in inject mode, where sessions aren't used. If you switch to
# cookie mode (remove JACK_MANAGEMENT_KEY above), uncomment this so a real
# key is required — an empty value would break cookie sealing.
# JACK_SESSION_KEY: ${JACK_SESSION_KEY:?set a >= 32-char random string for cookie mode}
# networks:
# media:
# external: true