-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.pipelines.yml
More file actions
134 lines (129 loc) · 4.82 KB
/
Copy pathdocker-compose.pipelines.yml
File metadata and controls
134 lines (129 loc) · 4.82 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
services:
# Restate server — Rust binary, embedded RocksDB.
restate-server:
image: docker.restate.dev/restatedev/restate:latest
container_name: restate-server
restart: unless-stopped
networks: [default]
volumes:
- ./volumes/restate-data:/restate-data
environment:
RESTATE_NODE_NAME: pipeline-restate-node
RESTATE_LOG_FORMAT: pretty
ports:
- "${RESTATE_ADMIN_PORT:-18803}:9070"
- "${RESTATE_INGRESS_PORT:-18883}:8080"
healthcheck:
test: ["CMD", "/restate-cli", "config", "--help"]
interval: 20s
timeout: 5s
retries: 5
start_period: 30s
# Restate SDK app + FastAPI approval sidecar.
pipeline-restate:
image: ankit/pipeline-restate:latest
build:
context: ./pipelines
dockerfile: restate/Dockerfile
additional_contexts:
garmin-fetch: /projects/garmin-fetch
container_name: pipeline-restate
restart: unless-stopped
networks: [default]
env_file:
- ./secrets/pipeline-restate.env
depends_on:
restate-server:
condition: service_started
ports:
- "${PIPELINE_RESTATE_APPROVE_PORT:-18813}:8001"
healthcheck:
test: ["CMD-SHELL", "python -c 'import urllib.request;urllib.request.urlopen(\"http://localhost:8001/healthz\",timeout=2).read()'"]
interval: 15s
timeout: 3s
retries: 5
start_period: 25s
# Dagster pipeline — `dagster dev` + FastAPI approval sidecar.
pipeline-dagster:
image: ankit/pipeline-dagster:latest
build:
context: ./pipelines
dockerfile: dagster/Dockerfile
additional_contexts:
garmin-fetch: /projects/garmin-fetch
container_name: pipeline-dagster
restart: unless-stopped
networks: [default]
env_file:
- ./secrets/pipeline-dagster.env
- path: ./config/pipeline-dagster.local.env
required: false
environment:
# Path inside the container of the bind-mounted landing_zone below.
# Set here (in addition to the .env.tmpl) so a stale rendered .env
# without this key still works.
LANDING_ZONE_DIR: /landing_zone
ports:
- "${PIPELINE_DAGSTER_PORT:-18802}:3000"
- "${PIPELINE_DAGSTER_APPROVE_PORT:-18812}:8001"
volumes:
# Persist Garmin auth tokens across container restarts so the pipeline
# avoids repeated logins (which can trip CAPTCHA).
- dagster-garth:/root/.garth
- dagster-garminconnect:/root/.garminconnect
# Persist Dagster state (run history, schedule on/off, backfill state)
# across image rebuilds. Without this, every `up -d --build` would lose
# in-flight backfills + schedule status.
- dagster-home:/app/dagster/.dagster_home
# File-drop landing zone (clients on other machines mv files in here;
# sensors pick them up). See landing_zone/README.md for the contract.
# NAS degraded mode, 2026-06-27: keep the service startable while
# /mnt/synologydrive is offline. Restore these NAS binds when it returns:
# - /mnt/synologydrive/docs-root/projects/data-dropbox:/landing_zone
# - /mnt/synologydrive/docs-root/gaming-backups/aoe4-replays:/aoe4-replays
- ./volumes/offline-synology/data-dropbox:/landing_zone
- ./volumes/offline-synology/aoe4-replays:/aoe4-replays
# Lets command-cron jobs `docker exec` into sibling containers
# (e.g. birdclaw in app-runner). Grants host container control — consistent
# with the devbox/app-runner setup.
- /var/run/docker.sock:/var/run/docker.sock
# birdclaw's SQLite — mounted as a directory so SQLite can use the WAL
# sidecar files. The import code opens /birdclaw/birdclaw.sqlite with
# mode=ro, but the bind mount must be writable for WAL coordination.
- /home/ankit/hroot/homeserver/volumes/birdclaw:/birdclaw:rw
healthcheck:
test: ["CMD-SHELL", "python -c 'import urllib.request;urllib.request.urlopen(\"http://localhost:3000/server_info\",timeout=2).read()'"]
interval: 20s
timeout: 5s
retries: 8
start_period: 60s
# DBOS pipeline — single container, FastAPI + DBOS workflow runtime.
pipeline-dbos:
image: ankit/pipeline-dbos:latest
build:
context: ./pipelines
dockerfile: dbos/Dockerfile
additional_contexts:
garmin-fetch: /projects/garmin-fetch
args: {}
container_name: pipeline-dbos
restart: unless-stopped
networks: [default]
env_file:
- ./secrets/pipeline-dbos.env
ports:
- "${PIPELINE_DBOS_PORT:-18801}:8000"
healthcheck:
test: ["CMD-SHELL", "python -c 'import urllib.request;urllib.request.urlopen(\"http://localhost:8000/healthz\",timeout=2).read()'"]
interval: 15s
timeout: 3s
retries: 5
start_period: 20s
volumes:
dagster-garth:
dagster-garminconnect:
dagster-home:
networks:
default:
name: mybridge
external: true