Deployment
How LoanPilot is built and shipped.
Deployment
LoanPilot runs on your own server as a Docker stack — a FastAPI app plus Caddy for TLS — behind app.ippo.one.
The stack
- App — FastAPI (async SQLAlchemy, SQLite by default), the bank-statement parser and the credit engine, plus the built web / admin / landing front-ends served as static assets.
- Caddy — automatic HTTPS and reverse proxy.
Zero-downtime deploys
The deploy script builds the new image while the current one keeps serving, backs up the database, then swaps containers — requests are held, not dropped. Each deploy:
- Backs up the database (kept under the data volume).
- Builds the image (front-ends compiled, back-end packaged).
- Waits for running analyses to finish, then swaps.
- Health-checks the app and verifies HTTPS.
Idempotent migrations
Schema changes are additive, idempotent column migrations that run on startup — a successful health check confirms they applied. Rule changes roll out without a migration: new default rules are surfaced to existing teams on load.
Database
SQLite on the data volume by default (single server). Backups are taken before every deploy; the most recent few are retained.