💾 Storage

5 specialized data engines. The September 2026 application upgrade preserved their installed versions and named volumes, and replaced mutable image references with immutable digest pins.


🐘 PostgreSQL 16

  • Role: primary relational store
  • Data: users, guilds, channels, messages, permissions, relationships
  • Image: postgres@sha256:97ff59a4e30e08d1c11bdcd9455e7832368c0572b576c9092cde2df4ae5552a3 (installed PostgreSQL 16)
  • Volume: postgres-data → /var/lib/postgresql/data
  • Health: pg_isready -U fluxer -d fluxer (10s interval, 5s timeout, 10 retries)
  • Connection: postgres:5432, database fluxer, user fluxer
  • SSL: disabled (internal Docker network only)

Backup (see the mission operations and preservation boundary; private Fluxer operations sources are not part of the public wiki build):

umask 077
sudo -n docker compose exec -T postgres pg_dump -Fc -U fluxer -d fluxer > fluxer.pg_dump

🔑 Valkey 8.1

  • Role: session cache, presence tracking, rate limiter state
  • Image: valkey/valkey@sha256:cfe71288f087704b06be45e270afa7a2abbf820093d6b11a23762081f5ff321d
  • Persistence: disabled (--save "" --appendonly no) — ephemeral by design
  • Connection: redis://valkey:6379/0
  • Health: valkey-cli ping (10s interval)
  • Restart impact: cache entries, ephemeral presence and limiter state are lost. Native auth sessions are also persisted in PostgreSQL; the API reloads an auth session from the datastore when its cache lookup misses or fails. A Valkey restart alone is not equivalent to native logout.

Source: pinned AuthSessionRepository, persistent insertion at lines 129–139 and datastore/cache fallback at lines 200–224.

📦 SeaweedFS 4.34

  • Role: S3-compatible object storage
  • Image: chrislusf/seaweedfs@sha256:6620371e8af8282056685c652d4637265698c9e2c2d59f9594e6ac333ad6c634
  • Command: server -s3 -dir=/data
  • Volume: seaweedfs-data → /data
  • S3 endpoint: http://seaweedfs:8333
  • Master: seaweedfs:9333
  • Region: us-east-1 (path-style access)
  • Buckets (created by seaweedfs-init):
    • fluxer — CDN assets
    • fluxer-uploads — user file uploads
    • fluxer-downloads — processed downloads
    • fluxer-reports — generated reports
    • fluxer-harvests — harvested content

📨 NATS 2.14

  • Role: inter-service message broker, event bus
  • Image: nats@sha256:c11af972c99ae542de8925e6a7d9c533aa1eb039660420d2074beed6089b3bf0
  • JetStream: enabled (-js -sd /data)
  • Monitoring: port 8222
  • Volume: nats-data → /data
  • Connection: nats://nats:4222
  • Used by: API, Gateway, Worker, all microservice routers/shards
  • Pattern: pub/sub for events, request/reply for RPC, JetStream for persistence

🔍 MeiliSearch v1.12

  • Role: full-text search engine
  • Image: getmeili/meilisearch@sha256:c9fac23131cca4db95173d41cc50fd5639121ee381795528fdd7522d7978a7b8
  • Environment: production, analytics disabled
  • Volume: meilisearch-data → /meili_data
  • Connection: http://meilisearch:7700
  • Auth: master key required (set via MEILI_MASTER_KEY in .env)
  • Indexes: messages, users, channels (managed by API)

📊 Volume Summary

VolumeServicePersistent
postgres-dataPostgreSQLYes — critical
nats-dataNATS JetStreamYes — event replay
meilisearch-dataMeiliSearchYes — rebuild from PG if lost
seaweedfs-dataSeaweedFSYes — user uploads
caddy-dataCaddyYes — TLS certs (internal)
caddy-configCaddyYes — config cache