Files
2026-03-05 13:24:41 +01:00
..
2026-01-30 18:11:45 +01:00
2026-01-30 16:58:02 +01:00
2026-01-30 16:58:02 +01:00
2026-03-01 02:04:15 +01:00
2026-02-11 18:53:27 +01:00
2026-03-05 13:24:41 +01:00
2026-02-28 00:39:20 +01:00
2026-01-30 16:58:02 +01:00
2026-03-05 13:24:41 +01:00
2026-01-30 16:58:02 +01:00
2026-01-30 16:58:02 +01:00
2026-02-25 01:01:28 +03:00
2026-01-30 16:58:02 +01:00
2026-01-30 16:58:02 +01:00
2026-01-30 16:58:02 +01:00
2026-01-30 16:58:02 +01:00
2026-03-01 02:04:15 +01:00

Sendico Development Environment

Docker Compose + Makefile build system for local development.

Architecture

Infrastructure:

  • MongoDB replica set (3 nodes) - credentials in .env.dev
  • NATS with JetStream - credentials in .env.dev
  • Vault (single node) - for application data ONLY (blockchain keys, external API keys)

Services:

  • Discovery, Ledger, Billing Fees, Billing Documents, FX Oracle, Payments Orchestrator
  • Chain Gateway, MNTX Gateway, TGSettle Gateway
  • FX Ingestor, Notification, BFF (Server), Callbacks, Frontend

Quick Start

# 1. Initialize environment (first time)
make init

# 2. Start all services
make up

# 3. Initialize Vault (if services need it for application data)
make vault-init

# 4. View logs
make logs SERVICE=ledger

# 5. Stop everything
make down

Credentials

All in .env.dev (plaintext for dev):

  • MongoDB: dev_root / dev_password_123
  • NATS: dev_nats / nats_password_123
  • Vault: Run make vault-init to get root token

Common Commands

make build                  # Build all images
make up                     # Start environment
make down                   # Stop environment
make logs SERVICE=ledger    # View service logs
make rebuild SERVICE=ledger # Rebuild specific service
make proto                  # Regenerate protobuf
make clean                  # Remove everything
make status                 # Check service status

Vault Usage

Vault is ONLY for application data, not infrastructure secrets!

Examples:

  • Blockchain private keys (Chain Gateway)
  • External API keys (MNTX, TGSettle)
  • Webhook signing secrets (Callbacks)
  • Production-like secrets

Infrastructure (MongoDB, NATS) uses plain .env.dev credentials.

Callbacks, BFF, Chain, and TRON run Vault Agent sidecars with AppRole. Set the corresponding *_VAULT_ROLE_ID and *_VAULT_SECRET_ID values in .env.dev.

Network

All services on sendico-dev network. Vault also on cicd network to connect to infra Vault if needed.

Rebuilding Services

After code changes:

# Rebuild specific service
make rebuild SERVICE=ledger

# Or manually
docker compose -f docker-compose.dev.yml build ledger
docker compose -f docker-compose.dev.yml up -d --force-recreate ledger

Adding New Services

  1. Create Dockerfile: ci/dev/yourservice.dockerfile
  2. Add service to docker-compose.dev.yml
  3. Use environment variables from .env.dev
  4. Connect to sendico-dev network

Troubleshooting

MongoDB replica set not initializing:

make down
make up
# Wait for health checks, then:
docker logs dev-mongo-init

Vault sealed:

make vault-init
# Save the unseal key and root token from vault-keys.txt

Service can't connect to MongoDB:

  • Check replica set: docker exec -it dev-mongo-1 mongosh -u dev_root -p dev_password_123 --eval "rs.status()"
  • Ensure dev-mongo-init completed: docker ps -a | grep init

Proto generation errors:

make proto
# Check output for missing dependencies

Files

  • docker-compose.dev.yml - All services
  • .env.dev - Plaintext credentials
  • Makefile - Build commands
  • ci/dev/*.dockerfile - Service builds
  • ci/dev/mongo.key - MongoDB replica set key
  • ci/dev/vault/config.hcl - Vault config