Sign inSign up

websvcin/crudapi

By websvcin

•Updated about 1 month ago

Multi-tenant CRUD API platform for MySQL — auto-generated REST endpoints, admin UI, rate limiting.

Image
Integration & delivery
API management
Developer tools
0

1.5K

websvcin/crudapi repository overview

⁠CrudApi

A multi-tenant CRUD platform for MySQL. Register a database once, and every table becomes a REST endpoint (/api/v1/{tenant}/crud/{table}) with authentication, row-level policies, OData-style filtering/joins, CSV bulk import, and audit logging — no per-tenant backend code.

Ships with a built-in admin UI (multi-tenant IAM, API keys, JWT/Basic/API-key auth), a standalone rate-limiting layer (per-credential, per-IP, global, and tenant-wide quotas with daily/monthly/custom auto-reset windows), and a SQLite browser for the admin registry itself.

⁠Quick start

docker pull websvcin/crudapi:latest

Two host directories must be mounted, or you lose all data on the next container recreation.
The image writes to /app/Data (the admin registry — every tenant, database, and credential,
plus the encryption keys protecting stored credentials) and /app/bulk-files (uploaded files).
Neither survives on its own — a container's writable layer is discarded on every redeploy,
host reboot, or image update.

mkdir -p /path/on/host/crudapi-data /path/on/host/crudapi-bulk-files
# the image runs as non-root uid 1000 — host directories must be writable by it
chown -R 1000:1000 /path/on/host/crudapi-data /path/on/host/crudapi-bulk-files

docker run -d \
  --name crudapi \
  --restart unless-stopped \
  -p 8081:80 \
  -e RateLimitAdmin__DataDirectory=/app/Data/RateLimitAdmin \
  -v /path/on/host/crudapi-data:/app/Data \
  -v /path/on/host/crudapi-bulk-files:/app/bulk-files \
  websvcin/crudapi:latest

The RateLimitAdmin__DataDirectory env var matters: the rate-limiting admin's own SQLite store
defaults to a path outside /app/Data, so without it, rate limits/quotas/usage history are
silently lost on every container recreation just like the two folders above.

No shell/chown access on your host panel? Make both directories world-writable instead
(chmod -R 777) so the non-root container user can still write.

First run

Visit http://your-host:8081/setup — there is no default account; the setup wizard creates
the real first admin login. Register your first database from Admin → Databases, then
create an API key under Admin → API Clients bound to it.

Swagger UI is at /docs/index.html (not /swagger/index.html — that path only exists in
local development builds).

What's inside

- CRUD engine: generic per-table REST, OData-style query params, CSV bulk import (direct
  upload, filter-copy, or external API source), row-level policies, audit logging.
- Admin UI: multi-tenant IAM, roles/permissions, API key issuance, JWT/Basic/API-key auth,
  a Tenant Portal for self-service database/key management.
- Rate limiting: per-credential, per-IP, and global-per-database limits, plus tenant-wide
  aggregate quotas (daily/monthly/custom periods) that auto-reset — configurable per database
  from the same admin UI, with live usage tracking.
- SQLite browser: inspect the admin registry's own SQLite database from the same UI.

Tag summary

Content type

Image

Digest

sha256:18eb1f4f4…

Size

120.5 MB

Last updated

about 1 month ago

docker pull websvcin/crudapi