Connect services owned by your business
Self-hosting distributes the ERP and the infrastructure it needs. It does not include NuSaaS subscription billing, the private staff application, paid hosted WhatsApp, managed eTIMS or provider accounts. Use your own accounts and credentials. No payment, device initialization or fiscal transmission is performed by installation.
Release and first-run checks
The public installer currently pins 1.0.11. New queued eTIMS product setup and
fiscal-receipt improvements require a newer published application image. Keep the
installer, image versions and release notes aligned; do not choose an unpublished
tag or assume documentation updates change existing containers.
After registering the owner and completing onboarding:
- Configure company identity, currency, timezone, VAT registration and price/tax treatment in ERP settings. KRA product tax classifications and accepted fiscal snapshots must agree with your actual business treatment; mapping is not a replacement for pricing configuration.
- Add the required ERP modules and staff permissions.
- Check HTTPS API access, outgoing HTTPS, SMTP, database, queue worker, scheduler and persistent storage before enabling an integration.
- Keep provider credentials in their ERP settings; frontend settings are public.
KRA OSCU
Follow KRA eTIMS setup. OSCU contacts KRA's API; it does not require an Evolution container or a VSCU runtime. NuSaaS does not provide managed eTIMS. Start in sandbox with your own registration and device. The installer emits safe production defaults:
ETIMS_PRODUCTION_ENABLED=false
ETIMS_APPROVED_PRODUCTION_TENANTS=
Only after the applicable KRA approval and sandbox checks are complete, the
installation operator may enable production and allow the exact ERP workspace
ID. Obtain the ID from your own installation's administrator; do not copy an
example or another server's IDs. Profile environment, certification, initialized
device and current product registrations remain additional gates. Recreate
runtime containers after changing environment values; docker compose restart
does not import changed Compose environment values.
docker compose up -d --force-recreate api worker cron ws
docker compose exec api php artisan migrate:status --pending
docker compose top worker
In a compatible image, the worker's supervisor must include
queue:work database --queue=compliance. A Redis-only worker cannot process
fiscal/product-setup jobs. Do not start unreviewed duplicate workers, delete
queue records or replay uncertain submissions to clear pending statuses. Inspect
the document and product-setup results first. Check migrations and installed
image version when a documented control is missing.
M-Pesa
Follow M-Pesa setup. Your Safaricom credentials, merchant account and public API callbacks are required. You do not need NuSaaS billing keys, subscription webhooks or a separate payment-service container. Configure and verify each sales channel's payment selection before use.
WhatsApp and optional Cloudflare
Follow your own Evolution gateway for optional WhatsApp. Its Manager key stays with the operator; only a dedicated instance credential enters the ERP. Gateway deployment, licensing and backup are your responsibility.
Cloudflare is an optional ingress/storage choice. Configure your own DNS and Tunnel; do not copy a NuSaaS hostname, tunnel UUID or private key. Authenticated provider callbacks must remain reachable without an interactive Access login. Keep database/search/Redis private, preserve callback validation, and never cache authenticated API responses.