Files
aura-crm/README.md
T

2.4 KiB

Aura CRM Platform

A self-hosted CRM for repair shops / service centers — order tracking (Kanban), clients, cartridge refill batches, inventory, payroll, loyalty, cash register, client notifications (Telegram/MAX/VK/SMS), PDF documents (invoice/act/receipt), and more.

Two services, one platform:

  • core/ — authentication, staff, roles, module registry. No CRM logic of its own; it exists so multiple business apps (production/ is the first one) can share one login and one staff/roles system.
  • production/ — the CRM itself (Go+Fiber backend, React+Vite frontend). Has no login of its own — it verifies JWTs core issues.

Install

Requires Docker and the docker compose v2 plugin.

git clone <this-repo-url> aura-crm
cd aura-crm
./install.sh

The script will:

  1. Ask for your admin account (name/email/password) and business name.
  2. Generate every secret involved (JWT signing key, database passwords, MinIO keys, the module token core and production use to authenticate to each other) — you never type or invent a secret by hand.
  3. Start core, wait for it to come up, and let it bootstrap your admin account automatically.
  4. Register production as a module against core's API, capturing the token that lets the two services talk to each other.
  5. Start production with everything already wired in.

Re-running ./install.sh after a successful install is safe — it detects existing .env files and skips straight to docker compose up for both services (useful after a reboot, or to pick up a rebuild).

When it's done, the CRM is at http://localhost:18092, logged in as the account you just created. See the script's own "Going public" note at the end for what to change if you want a real domain in front of it.

What's optional

Everything in production/.env.example beyond the required Postgres/MinIO/JWT/core-registration block is an optional integration — AI-assisted intake (Gemini), Telegram/MAX/VK/SMS client notifications, IMEI lookup, self-hosted Telegram Bot API, wholesale supplier scraping, and deploy-agent's self-update button. Each one fails soft (disabled, not crash) when its env vars are unset — turn on only what you need, whenever you need it, from the app's own Settings page after install (most of these are editable there without touching .env again).

License

MIT — see LICENSE in each service directory.