Dube Box — Where Everything Lives
Dube Box — Where Everything Lives
Section titled “Dube Box — Where Everything Lives”Start here if you just need to find something fast. For the deeper how-to (restart commands, deployment workflows, security config), see the Server Management Guide.
Box: isutech-svr-01, 41.78.233.110, SSH alias dube-tradeport
(ssh -p 33822 isutech-admin@41.78.233.110).
Live apps — 16 apps, DNS flipped, in production
Section titled “Live apps — 16 apps, DNS flipped, in production”| App | Path | Port | Runtime | Domain | Database |
|---|---|---|---|---|---|
| Portfolio | /data/www/nhlanhla-portfolio/ | — | nginx static | nhlanhla.isutech.co.za | — |
| DealVault | /data/www/dealvault/ | 3050 | PM2 dealvault | dealvault.isutech.co.za | dealvault |
| BuildQ API | /data/www/buildq/apps/api/ | 4040 | PM2 buildq-api | buildq.isutech.co.za/api | buildq |
| BuildQ Web | /data/www/buildq/apps/web/ | 3040 | PM2 buildq-web | buildq.isutech.co.za | buildq (shared) |
| Buka | /opt/buka/ | 8000 | systemd buka | buka.isutech.co.za | SQLite buka.db |
| Tumi Backend | /data/www/tumi-backend/ | 8004 | systemd tumi-backend | tumi.isutech.co.za/api | SQLite wedding.db |
| Tumi Frontend | /data/www/tumi-frontend/ | — | nginx static | tumi.isutech.co.za | — |
| ThriveSend | /data/www/thrivesend/ | 3005 | PM2 thrivesend | thrivesend.isutech.co.za | thrivesend_b2b2g |
| ConformEdge | /data/www/conformedge/ | 3020 | PM2 conformedge | conformedge.co.za (external, GoDaddy) | conformedge |
| KopanoWorks API | /data/www/kopanoworks/apps/api/ | 3010 | PM2 kopanoworks | kopanoworks.isutech.co.za | kopanoworks |
| KopanoWorks Admin | /data/www/kopanoworks/apps/web-admin/ | 3011 | PM2 kopanoworks-admin | admin.kopanoworks.isutech.co.za | kopanoworks (shared) |
| ProspectIQ | /data/www/prospect-iq/ | 8002/3002 | systemd ×4 (api, frontend, worker, beat) | prospectiq.isutech.co.za | prospectiq_prod |
| QueueHere | /data/www/queue-here/ | 3000 | systemd queuehere | queuehere.isutech.co.za | queuehere_prod |
| AssessFlow | /data/www/assess-flow/ | 5004/5005/3006 | PM2 ×3 (backend, meims-worker, frontend) | assess-flow.isutech.co.za | assessflow |
| PropertyData Engine | /data/www/propertydata-engine/ | 8001 | systemd propertydata-engine | internal only — called by AssessFlow | propertydata_engine + reads AssessFlow’s DB |
| PoleloDMS | /data/www/polelo-dms/ (Docker Compose) | 8100 | Docker: app, worker, nginx, redis, meilisearch, nextcloud | polelodms.co.za (external, Host-H) | polelo_dms, nextcloud, tenant_demo |
Note on registrars — not all .co.za domains are the same provider.
Most isutech.co.za subdomains are on Afrihost. conformedge.co.za is on
GoDaddy. polelodms.co.za (and thebangers.co.za) is on Host-H.
Check before assuming a DNS change goes through the usual panel.
Not yet migrated — still on Hetzner (production-server-01, 46.224.40.5)
Section titled “Not yet migrated — still on Hetzner (production-server-01, 46.224.40.5)”- isutech.co.za (flagship site) + DocsHub (this site — Astro build +
autheliaauth gate +security-api) - SANSA, SACE, AutoSlip
- Umdoni, MatchMind, and a few others whose live-vs-retired status was never confirmed
⚠️ If a domain above resolves to 41.78.233.110 but nothing in the “Live
apps” table matches it, don’t trust what loads — you’re seeing whichever
app nginx falls back to by default (BuildQ or AssessFlow, depending on
config order), not a real error page. This happened on 2026-08-09 when
several domains were flipped before their apps existed on Dube. Always
check the app is actually deployed here first.
Base infrastructure, shared by everything above
Section titled “Base infrastructure, shared by everything above”| Service | Notes |
|---|---|
nginx | one vhost file per app under /etc/nginx/sites-available/, symlinked into sites-enabled/ — verify it’s actually a symlink, not a stale copy (bit us once on the AssessFlow cutover) |
| PostgreSQL 16 | one role + one database per app, localhost:5432 |
| Redis | shared instance, localhost:6379 — different DB index per app that needs a real datastore (not just cache), e.g. ProspectIQ on index 2 |
pm2-isutech-admin.service | resurrects the saved PM2 process list on reboot — tested working |
| Docker | installed 2026-08-09 for PoleloDMS; wasn’t part of the original base-build |
| certbot | one cert per domain, auto-renewal |
| CrowdSec + auditd + AIDE | security baseline, untouched since the original hardening pass |
Quick commands to check anything yourself
Section titled “Quick commands to check anything yourself”ssh dube-tradeportpm2 list # PM2-managed appssystemctl list-units --type=service --state=running # systemd servicesdocker ps -a # Docker containers (PoleloDMS)ls /etc/nginx/sites-enabled/ # every routed domainsudo -u postgres psql -c '\l' # every databaseThe MOTD (shown on every SSH login) also has a live “Application services” panel reflecting real-time status.