Skip to main content

What you will learn

  • How to deploy ISCL Core for production use
  • Security hardening checklist
  • Docker deployment with proper configuration
  • Monitoring, backup, and maintenance procedures

Deployment architecture

Step 1: Docker setup

Build the image

Docker Compose configuration

Key points:
  • 127.0.0.1:3100:3100 — port is only accessible from localhost on the host
  • 0.0.0.0 inside the container so other containers can reach it on the Docker network
  • Named volumes for persistent keystore and audit data
  • Resource limits prevent runaway memory usage

Step 2: Security hardening

Checklist

Never use ISCL_APPROVAL_MODE=auto in production. Use web or cli.
Set ISCL_TELEGRAM_ALLOWED_CHATS if using the Telegram bot.
Configure a restrictive PolicyConfig with appropriate value limits, token allowlists, and recipient allowlists.
Use a paid RPC provider with authentication. Public endpoints are rate-limited and less reliable.
Do not expose port 3100 to the internet. The API has no authentication by design.
Back up the keystore volume. Keys are encrypted but irreplaceable if lost.
Set appropriate maxTxPerHour to limit blast radius if an adapter is compromised.
Review audit logs regularly. Look for unexpected policy_evaluated events or failed signing attempts.

Policy configuration

Create a production policy file:

Step 3: RPC configuration

Use a paid provider for production. Configure per-chain:

Step 4: Monitoring

Health checks

Poll the health endpoint:

Log monitoring

ISCL Core uses pino for structured JSON logging. Forward logs to your monitoring stack:
Set log level via environment:

Key metrics

Step 5: Backup

Keystore backup

The keystore contains encrypted private keys. Back up the Docker volume:

Audit database backup

When backing up SQLite in WAL mode, copy all three files: audit.sqlite, audit.sqlite-wal, and audit.sqlite-shm. Or use the SQLite .backup command for a consistent copy.

Step 6: Maintenance

Database vacuuming

SQLite does not automatically reclaim space from deleted rate limit entries:
Run during maintenance windows. VACUUM temporarily doubles disk usage.

Log rotation

Docker handles log rotation via the logging driver. Configure in daemon.json:

Verification

ISCL Core starts and passes health checks
Port 3100 is only accessible from localhost
Approval mode is web or cli (not auto)
Policy config has appropriate limits
Keystore backup procedure works and can be restored
Logs are forwarded to your monitoring system

Next steps