Create broker companies, provision their servers, and hand over API credentials.
When on, the trading terminal shows a maintenance screen and its API is paused - use it while you deploy updates. The back office and broker consoles stay reachable so you can turn it back off.
A code from your authenticator app, required in addition to your password when you sign in to the back office. This account holds the keys to every broker, partner and balance on the platform - a password on its own is a single point of failure.
1. In your authenticator app (1Password, Authy, Google Authenticator…) add an account and enter this setup key:
2. Enter the 6-digit code it shows, to prove it is working:
Save these recovery codes now - this is the only time they are shown.
Each one signs you in once if you lose your authenticator. Keep them somewhere separate from your phone. If you lose both, back office access can only be restored from the server itself.
Two-factor is on for this account.
Operators who sign in to the back office. They also run the eTrader Management console and Integrations from the buttons above - those pages carry no login of their own and run on the operator's session. The bootstrap owner (password sign-in) always exists; create named operators here.
The bank remittance details shown to eTrader Business partners when they choose to pay an invoice by bank transfer. Include the account name, IBAN/account number, SWIFT/BIC and any reference instructions.
Live health of the trading engine - the process that runs prices, fills orders and liquidates accounts. The top row is each engine worker and its heartbeat; the table below lists every trade server and which worker is handling it right now. Normally one worker handles everything - you only add more (ROLE=engine) to spread load across machines, and each then handles a share of the servers.
You almost certainly don't need this. One machine (ROLE=all, the current setup) runs everything and scales a long way - if it gets slow, move to a bigger VPS first. Only split the engine across machines when a single box genuinely can't keep up. There's no separate download: a worker runs this same codebase with ROLE=engine, and workers coordinate only through this database - they never talk to each other.
Before you start
On this box (once)
ROLE=web in .env and redeploy - it keeps serving the app and live quotes but stops running the engine locally. ⚠ Do this only once at least one engine worker is already running, otherwise nothing gets liquidated. (While it's ROLE=all it owns every server, so a worker would sit idle.)On each worker machine
docker build -t etrader ..env with: ROLE=engine · DATABASE_URL=postgres://etrader:PASSWORD@<this-box-private-ip>:5432/etrader · MAX_SERVERS_PER_WORKER=<total servers ÷ number of workers> (this is what splits the servers evenly) · any feed keys your brokers rely on. The production boot check also requires NODE_ENV=production, JWT_SECRET (32+ chars), ADMIN_PASSWORD, CORS_ORIGIN and BACKUP_DIR=/backups - a worker doesn't use them, but it won't start without them.docker run -d --restart always --env-file .env etrader (no port needed - a worker serves no HTTP).The worker registers within a few seconds and appears in the table above, leasing its share. Stop one and its servers are re-claimed by the others within about 20 seconds.
Export the email addresses of trading-account holders as a CSV - every broker, or one, including the eTrader demo accounts. The count updates before you export.
API keys for the outside copytrading platforms we work with. A platform links a trader's account once, with the trader's own broker, server, login and password, then trades that account through the same engine as the terminal. The key and its encryption secret are shown once, when they are issued - hand them over then, because they cannot be read back.