Advanced setup
Your PC or a Linux VPS. Same bot and paper/live gates as Railway. Newcomers: start on Easy.
Get a Vultr VPSEasy setupFor AI agentsAPI keys
VPS on Vultr
Spin up Ubuntu, SSH in, then follow PM2. We run production on a small box in this ballpark:
| Minimum | |
|---|---|
| CPU | 2 vCPU |
| RAM | 4 GB |
| Disk | 80 GB NVMe |
| OS | Ubuntu 24.04 LTS |
Deploy verification (npm ci, typecheck, tests, dashboard build) is the RAM spike — day-to-day the farmer + dash + watcher stay light. Pick a region close to your RPC (US West/East is common for Helius). Then git clone, npm install, PM2.
Required API keys
Helius RPC and Jupiter before live. GMGN optional, recommended, free.
| Key | Sign up |
|---|---|
RPC_URL | Helius → Mainnet RPC URL |
JUPITER_API_KEY | developers.jup.ag/portal |
GMGN_API_KEY | gmgn.ai/ai — full steps |
The first-run wizard walks through RPC + Jupiter. GMGN can wait.
Local install (paper)
| Need | Get it | Check |
|---|---|---|
| Node.js 20+ | nodejs.org | node -v |
| Git | git-scm.com | git --version |
1. Clone & install
git clone https://github.com/CryptoGnome/dlmmbot.git
cd dlmmbot
npm installbetter-sqlite3 compiling is normal. Windows may need VS Build Tools.
2. Create .env
cp .env.example .envFARMER_MODE=paper
RPC_URL=https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_KEY
JUPITER_API_KEY=your_jupiter_key3. Force paper in runtime config
First run seeds gitignored data/config.toml from the repo template. Edit that file (or Settings) — not the tracked config.toml.
# data/config.toml
[exec]
mode = "paper"Live needs both this and FARMER_MODE=live. One switch stays paper.
4. Run
npm run run
npm run status
npm run haltCommands
npm run scan | vet | run | status | halt | force-close | test
npm run dash:build && npm run dashLocal dashboard
DASH_TOKEN= # ≥24 random chars — use https://dlmmbot.com/setup/easy Generate/Copy, or a password manager
DASH_PORT=8787
# optional: bind loopback only (default 0.0.0.0)
DASH_HOST=127.0.0.1The dash speaks plain HTTP. Keep it on a trusted LAN or behind HTTPS.
npm run dash:build
npm run dashOpen http://localhost:8787 with that token.
Errors streams runtime failures. Header ON/OFF soft-pauses (positions stay open). Red HALT closes all opens then idles. Changes shows pending updates with risk chips. Wiki is the in-dashboard operator manual.
Keys & going live
Encrypted wallet via the dashboard (recommended) or WALLET_PRIVATE_KEY for advanced installs. Fresh burner only — one bot process per wallet/DB.
# data/.env (seeded from .env on first run)
FARMER_MODE=live
RPC_URL=https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_KEY
JUPITER_API_KEY=your_jupiter_key
WALLET_PRIVATE_KEY=…# data/config.toml
[exec]
mode = "live"PM2 on a VPS
npm install -g pm2
pm2 start deploy/ecosystem.config.cjs --only meteora-farmer
pm2 start deploy/ecosystem.config.cjs --only meteora-dash
pm2 save
pm2 startup
pm2 logs meteora-farmerEcosystem sets FARMER_CONFIG_PATH / FARMER_ENV_PATH / FARMER_DB_PATH under data/ so Settings never dirties git. meteora-deploy is the git pull watcher — start it only if you want updates from main (or develop on staging).
Auto-deploy
pm2 start deploy/ecosystem.config.cjs --only meteora-deploy
pm2 saveAuto-update is on by default. To review first: flip Auto on/off next to the GitHub build pill. When GitHub is ahead, Changes → Approve. Don’t SCP a dirty tree and expect CURRENT — push + pull.
Build pill: auto-detects where you’re hosted. PM2 / VPS — local git checkout vs origin/$DEPLOY_BRANCH. Railway / Vercel / Render / etc. — platform deploy SHA (RAILWAY_GIT_COMMIT_SHA, VERCEL_GIT_COMMIT_SHA, …) vs GitHub branch tip (no local git needed). Hover the pill for the SHA source. GIT? means no SHA resolved yet (redeploy or wait for GitHub tip). Changes on PaaS loads commit lists from the GitHub API (set optional GITHUB_TOKEN / GH_TOKEN if the repo is private). Auto on/off is next to the pill; when GitHub is ahead, use Changes → Approve. Don’t SCP a dirty tree and expect CURRENT — push + pull.
Dashboard from outside
- Tailscale / ZeroTier — private access from your phone
- Cloudflare Tunnel — public HTTPS without opening ports
- Reverse proxy + HTTPS on a VPS with a domain
Don’t expose :8787 raw without a strong DASH_TOKEN and HTTPS.
Troubleshooting
| Symptom | Fix |
|---|---|
better-sqlite3 build fail | VS Build Tools / build-essential |
| Already running / lock | Only if sure: npm run release |
| BEHIND on version pill | Start meteora-deploy, or Approve on Changes, or git pull |
| Want the simple path | Easy setup (Railway) |