Deploy NOFX, the AI trading terminal, on Render with official GHCR backend and frontend images plus SQLite on a persistent disk.
This repo packages NOFX's official GHCR images as a one-click Render Blueprint. No Go/source build on Render.
| Piece | Role |
|---|---|
| NOFX | AI trading terminal (multi-exchange + LLM) |
| nofx-backend | Private API image + SQLite disk |
| nofx-frontend | Public UI (nginx proxies /api/ to backend) |
| Render Private Service | nofx API on the private network |
| Render Web Service | nofx-web public UI |
| Render Disk | SQLite at /app/data |
flowchart LR
browser["Browser"] --> web["nofx-web<br/>frontend image"]
web -->|"/api/ private"| api["nofx<br/>backend image"]
api --> disk[("/app/data SQLite")]
- Click Deploy to Render. Render forks this template and applies
render.yaml. - Render pulls
nofx-backendandnofx-frontendfrom GHCR. - Open the
nofx-webURL (not the private backend). - Sign in / configure exchanges and LLM providers in the UI.
- Data persists on the backend disk across deploys.
| Resource | Type | Plan | Notes |
|---|---|---|---|
nofx |
Private (runtime: image) |
starter | Must stay named nofx (frontend proxies to http://nofx:8080) |
nofx-web |
Web (runtime: image) |
starter | Health /health; public URL |
nofx-data |
Disk (5 GB) | Mounted on backend at /app/data |
Default region: oregon. Previews are off. Pin image tags in render.yaml for production (Blueprint currently uses :latest).
- A Render account
- Exchange / LLM credentials configured in the NOFX UI after deploy
- Click Deploy to Render above and fork into your GitHub account.
- On Apply, confirm
nofx(private) andnofx-web(public). - Wait until services are Live (~3–8 minutes).
- Open the
nofx-webURL and finish setup. - Configure API keys in the product UI.
Health check:
curl -sS -o /dev/null -w "%{http_code}\n" https://<your-nofx-web>.onrender.com/health| Feature | Description |
|---|---|
| Official images | GHCR backend + frontend; no source build |
| Private API | Backend not on the public internet |
| Persistent SQLite | 5 GB disk on the backend |
| Generated secrets | JWT_SECRET, DATA_ENCRYPTION_KEY |
| One-click Blueprint | projects / environments wrapper |
| Variable | Source | Description |
|---|---|---|
DB_TYPE / DB_PATH |
Wired | SQLite at /app/data/data.db |
TZ |
Wired | UTC |
TRANSPORT_ENCRYPTION |
Wired | false (template default) |
AI_MAX_TOKENS |
Wired | 8000 |
JWT_SECRET |
Auto-generated | Auth signing |
DATA_ENCRYPTION_KEY |
Auto-generated | Data at rest in app |
Exchange and LLM credentials are set in the NOFX UI after deploy.
image:
url: ghcr.io/nofxaios/nofx/nofx-backend:<tag>autoDeployTrigger: off so floating tags do not redeploy until Manual Deploy.
| Resource | Approx. monthly |
|---|---|
nofx private (Starter) |
~$7 |
nofx-web (Starter) |
~$7 |
| Disk (5 GB) | ~$1.25 |
| Total | ~$15–16 |
Exchange/LLM fees are separate. Keep both services in the same region and do not rename nofx.
| Problem | Solution |
|---|---|
| UI loads but API fails | Backend service must be named nofx; check private network / logs. |
| Health check fails on web | Confirm nofx-web image pull; retry Manual Deploy. |
| Data lost after redeploy | Disk must remain on nofx at /app/data. |
| Image pull failures | Confirm GHCR package visibility / tag exists; retry deploy. |
render.yaml Render Blueprint (images + disk)
README.md This file
LICENSE MIT (template wrapper)
.env.example Optional notes
assets/ Hero
Render:
NOFX:
MIT for this template wrapper.
Upstream NOFX license: see upstream repo. Star that project if this helped.
