@@ -91,7 +91,7 @@ services:
9191 # Transaction-mode pooler — allows hundreds of app clients with a small PG connection cap.
9292 # Set DATABASE_URL in gittensory to: postgres://gittensory:<pw>@pgbouncer:5432/gittensory
9393 pgbouncer :
94- image : edoburu/pgbouncer:latest
94+ image : edoburu/pgbouncer:v1.25.2-p0
9595 restart : unless-stopped
9696 profiles : ["pgbouncer"]
9797 depends_on :
@@ -138,7 +138,7 @@ services:
138138 # QDRANT_URL=http://qdrant:6333 is set. Scales to millions of vectors with ANN search.
139139 # REST API: http://localhost:6333 gRPC: localhost:6334 Dashboard: http://localhost:6333/dashboard
140140 qdrant :
141- image : qdrant/qdrant:latest
141+ image : qdrant/qdrant:v1.18.2
142142 restart : unless-stopped
143143 profiles : ["qdrant"]
144144 # Ports are bound to LOOPBACK (127.0.0.1), not 0.0.0.0: the app reaches Qdrant over the internal
@@ -172,7 +172,7 @@ services:
172172 # docker compose exec ollama ollama pull llama3.2
173173 # Then set AI_PROVIDER=ollama and AI_BASE_URL=http://ollama:11434/v1 in .env.
174174 ollama :
175- image : ollama/ollama:latest
175+ image : ollama/ollama:0.30.10
176176 restart : unless-stopped
177177 profiles : ["ollama"]
178178 volumes :
@@ -182,7 +182,7 @@ services:
182182 # Continuous WAL backup of the SQLite DB to S3/B2/R2. Copy litestream.yml.example
183183 # → litestream.yml and fill in your bucket. Set LITESTREAM_* secrets in .env.
184184 litestream :
185- image : litestream/litestream:latest
185+ image : litestream/litestream:0.5.12
186186 restart : unless-stopped
187187 profiles : ["litestream"]
188188 command : replicate
@@ -223,7 +223,7 @@ services:
223223 # Prometheus scrapes /metrics; Alertmanager routes alerts; Loki+Promtail collect logs;
224224 # Grafana visualises metrics AND logs. Grafana UI: http://localhost:3000 (admin / $GRAFANA_ADMIN_PASSWORD).
225225 prometheus :
226- image : prom/prometheus:latest
226+ image : prom/prometheus:v3.12.0
227227 restart : unless-stopped
228228 profiles : ["observability"]
229229 volumes :
@@ -238,7 +238,7 @@ services:
238238 # Routes Prometheus alerts to your notification channel. Ships SILENT: alerts go to a
239239 # null receiver until you fill in a receiver in alertmanager/alertmanager.yml.
240240 alertmanager :
241- image : prom/alertmanager:latest
241+ image : prom/alertmanager:v0.33.0
242242 restart : unless-stopped
243243 profiles : ["observability"]
244244 depends_on : [prometheus]
@@ -252,7 +252,7 @@ services:
252252 - " --storage.path=/alertmanager"
253253
254254 grafana :
255- image : grafana/grafana:latest
255+ image : grafana/grafana:13.1.0
256256 restart : unless-stopped
257257 profiles : ["observability"]
258258 depends_on : [prometheus, loki]
@@ -271,7 +271,7 @@ services:
271271 # docker-proxy (NOT a raw socket) and ships their logs to Loki. Browse in Grafana → Explore →
272272 # Loki, e.g. {service="gittensory"} | json | level="error".
273273 loki :
274- image : grafana/loki:latest
274+ image : grafana/loki:3.7.3
275275 restart : unless-stopped
276276 profiles : ["observability"]
277277 command : ["-config.file=/etc/loki/loki-config.yml"]
@@ -306,7 +306,7 @@ services:
306306 networks : [docker-proxy] # isolated — only Promtail joins this network
307307
308308 promtail :
309- image : grafana/promtail:latest
309+ image : grafana/promtail:3.6.11
310310 restart : unless-stopped
311311 profiles : ["observability"]
312312 command : ["-config.file=/etc/promtail/promtail-config.yml"]
@@ -325,6 +325,10 @@ services:
325325 # public ports exposed. Generate an auth key at tailscale.com/settings/keys and
326326 # set TS_AUTHKEY= in .env. The gittensory service is reachable at the tailnet IP on port 8787.
327327 tailscale :
328+ # Kept on the `stable` release channel rather than a version tag: tailscale's ghcr tags use a
329+ # non-obvious scheme and the client is happiest tracking the current stable. For a fully immutable
330+ # pin, resolve a digest once: docker pull ghcr.io/tailscale/tailscale:stable && docker inspect \
331+ # --format='{{index .RepoDigests 0}}' ghcr.io/tailscale/tailscale:stable
328332 image : ghcr.io/tailscale/tailscale:stable
329333 restart : unless-stopped
330334 profiles : ["tailscale"]
0 commit comments