Get started in 5 minutes
From sign-up to live app. Follow along and you will be deploying before your coffee gets cold.
Quick Start
Six steps to go from zero to a live production app. Let's get you deployed.
Create your account
Head to the sign-up page and create your account. You will get a free trial so you can test everything before committing.
Sign up with email or GitHub. Enable 2FA (required for security).
Add your SSH key
Before creating a Nod, add your SSH public key. DigitalAura injects it during provisioning so you can SSH in immediately — no passwords needed.
Dashboard → SSH Keys → Add Key
# Get your public key
cat ~/.ssh/id_rsa.pub
# If you don't have one yet, generate it:
ssh-keygen -t ed25519 -C "you@example.com"Paste the output (starts with ssh-ed25519 or ssh-rsa) into the dashboard.
Create your first Nod
From the dashboard, click “Create Nod.” Choose your OS, plan, and region. Select the SSH key you just added. Your Nod will be ready in about 30 seconds.
Create a new Nod
Hostname
Standard
₦12,000/mo
Pro
₦22,000/mo
SSH into your Nod
Once your Nod is running, grab the IP from the dashboard and connect via SSH. Your SSH key is injected automatically during setup.
ssh root@102.34.56.78Tip: You can also use the noVNC console in the dashboard if SSH is not available.
Deploy with git push
Install the DigitalAura CLI and link your project. After that, every push to your main branch triggers an automatic deploy.
# Install the CLI
npm install -g @nolbase/cli
# Login to your account
nolbase login
# Link your project
nolbase init
# Deploy (or just push to GitHub — we auto-deploy)
nolbase deployAdd a custom domain
Point your domain's DNS to your Nod IP. DigitalAura provisions a free SSL certificate automatically — usually within 30 seconds.
# Add your domain via CLI
nolbase domains add myapp.com
# Or add a subdomain
nolbase domains add api.myapp.com
# Check SSL status
nolbase domains list
# ┌──────────────┬─────────┬──────────┐
# │ Domain │ SSL │ Status │
# ├──────────────┼─────────┼──────────┤
# │ myapp.com │ Active │ Verified │
# │ api.myapp.com│ Active │ Verified │
# └──────────────┴─────────┴──────────┘Nods
Manage your Nods — create, resize, snapshot, and destroy.
Create a Nod
# Via CLI
nolbase nods create \
--name my-api \
--plan standard \
--os ubuntu-22.04 \
--region ng-lag1 \
--ssh-key ~/.ssh/id_rsa.pubList your Nods
nolbase nods list
# ┌───────────┬─────────┬───────────┬────────────────┐
# │ Name │ Status │ Plan │ IP │
# ├───────────┼─────────┼───────────┼────────────────┤
# │ my-api │ RUNNING │ Standard │ 102.34.56.78 │
# │ staging │ STOPPED │ Starter │ 102.34.56.79 │
# └───────────┴─────────┴───────────┴────────────────┘Take a snapshot
nolbase nods snapshot my-api --name "pre-deploy-backup"
# Snapshot created: snap_abc123 (2.4GB)Deployments
Push your code and DigitalAura handles the rest — build, deploy, health check, rollback.
How auto-deploy works
Connect your GitHub, GitLab, or Bitbucket repo. Every push to your default branch triggers a build. DigitalAura auto-detects your framework and generates the right Dockerfile and config.
# Connect a repo
nolbase projects connect --repo github.com/you/my-app
# Trigger manual deploy
nolbase deploy
# View deploy logs in real-time
nolbase deploy logs --follow
# Rollback to a previous deploy
nolbase deploy rollback --to deploy_abc123Supported frameworks
Databases
Add managed databases to your project. You get a connection string — we handle backups, monitoring, and updates.
# Create a managed PostgreSQL database
nolbase db create --type postgres --name my-db --plan basic
# Get connection string
nolbase db info my-db
# Host: db-my-db.internal.digitalaura.app
# Port: 5432
# User: nolbase_user
# Password: ••••••••
# Database: my_db
# URI: postgresql://nolbase_user:****@db-my-db.internal.digitalaura.app:5432/my_db
# List databases
nolbase db list
# Create a backup
nolbase db backup my-dbDomains
Add custom domains to your projects. SSL certificates are provisioned automatically via Let's Encrypt.
# Add a custom domain
nolbase domains add myapp.com
# Verify DNS records
nolbase domains verify myapp.com
# ✓ A record points to 102.34.56.78
# ✓ SSL certificate provisioned
# ✓ Domain is live
# Remove a domain
nolbase domains remove old-domain.com
# Every project also gets a free subdomain:
# your-project.digitalaura.appFramework Guides
DigitalAura auto-detects your framework and generates the right build config. Here's what happens for each runtime.
Next.js
Detected by: next.config.js or "next" in dependencies. Deployed via PM2 with next start.
# Required env var on your server
PORT=3000 # DigitalAura assigns a port automatically
# Build command (auto-detected)
npm run build
# Start command (auto-detected)
npm run start
# Health check endpoint DigitalAura pings after deploy
# Add this to your app (optional but recommended):
# GET /health → { "status": "ok" }Express / NestJS
Detected by: express or @nestjs/core in dependencies. Deployed via PM2.
# Your app must listen on process.env.PORT
const port = process.env.PORT || 3000;
app.listen(port);
# Build command (auto-detected)
npm run build
# Start command (auto-detected)
node dist/main.js # NestJS
node index.js # ExpressDjango
Detected by: manage.py + requirements.txt. Deployed via Gunicorn (systemd unit).
# requirements.txt must include:
gunicorn
django
# DigitalAura generates a systemd service running:
gunicorn myproject.wsgi:application --bind 0.0.0.0:$PORT --workers 3
# Run migrations — DigitalAura detects and runs automatically on deploy:
python manage.py migrate --no-input
# Static files — add to your deploy hook or settings:
STATIC_ROOT = '/var/www/myapp/static'
python manage.py collectstatic --no-inputFlask
Detected by: flask in requirements.txt. Deployed via Gunicorn.
# requirements.txt:
flask
gunicorn
# Your app entry point (app.py or wsgi.py):
from flask import Flask
app = Flask(__name__)
# DigitalAura runs:
gunicorn app:app --bind 0.0.0.0:$PORTLaravel (PHP)
Detected by: artisan file. Deployed via nginx + PHP-FPM with a per-app pool.
# DigitalAura runs on deploy:
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
# Document root is set to /public automatically
# nginx vhost is generated and reloaded — no manual config neededGo
Detected by: go.mod. Deployed via PM2 (binary execution).
# Build command (auto-detected):
go build -o app .
# Start command:
./app
# Your app must read the port from env:
port := os.Getenv("PORT")
if port == "" { port = "8080" }
http.ListenAndServe(":"+port, nil)Static sites (React, Vue, Vite)
Detected when no server runtime is found. Served via nginx with zero running processes.
# Build command (auto-detected):
npm run build
# Output directory — DigitalAura checks these in order:
dist/ build/ out/ public/
# nginx serves the output directory directly.
# All routes return index.html (SPA mode).
# No PORT needed — static files only.Docker
Detected by: Dockerfile in root. Uses blue/green container swap for zero-downtime deploys.
# DigitalAura runs:
docker build -t app-blue .
docker run -d -p $PORT:$PORT --name app-blue app-blue
# On next deploy — blue/green swap:
docker build -t app-green .
docker run -d -p $NEW_PORT:$PORT --name app-green app-green
# nginx upstream swapped → old container removed
# Your Dockerfile must EXPOSE a port:
EXPOSE 3000
CMD ["node", "server.js"]Teams & RBAC
Invite your team, assign roles, and control who can deploy, scale, or manage billing.
Role permissions
| Action | Owner | Admin | Developer | Viewer |
|---|---|---|---|---|
| View Nods & projects | ✓ | ✓ | ✓ | ✓ |
| Deploy & rollback | ✓ | ✓ | ✓ | — |
| Manage env variables | ✓ | ✓ | ✓ | — |
| Create / destroy Nods | ✓ | ✓ | — | — |
| Manage domains & SSL | ✓ | ✓ | — | — |
| Invite / remove members | ✓ | ✓ | — | — |
| Manage billing & plans | ✓ | — | — | — |
| Delete team | ✓ | — | — | — |
Invite a team member
Go to Dashboard → Teams → [your team] → Members → Invite. Enter their email and choose a role. They receive an email with a join link.
Email address
Role
Role definitions
Full control. Can delete the team, manage billing, and promote/demote any member. One per team.
Can do everything except billing and team deletion. Typically your lead engineers or tech leads.
Can deploy, rollback, manage env vars, and view all resources. Cannot create or destroy Nods.
Read-only. Can see Nods, projects, and logs but cannot take any action. Good for clients or stakeholders.
License Shield
License Shield lets you protect apps you build for clients. Embed a lightweight SDK so you control activation — and get paid automatically via split payments.
How it works
Install the SDK
# TypeScript / Node.js
npm install @nolbase/license-sdk
# Python
pip install nolbase-license
# PHP (Laravel)
composer require nolbase/license-sdkEmbed in your app (Node.js example)
import { LicenseShield } from '@nolbase/license-sdk';
const license = new LicenseShield({
appId: process.env.NOLBASE_APP_ID, // from your developer dashboard
secretKey: process.env.NOLBASE_SECRET,
});
// Check license on app start
await license.verify();
// Throws LicenseInactiveError if the client's payment is overdue
// Gate a premium feature
if (await license.hasFeature('advanced-reports')) {
// render the feature
}License modes
App stops working entirely if license lapses. Use for client-critical tools.
App enters read-only mode — clients can view data but not create or modify.
Specific features are disabled. Core app keeps working.
App runs normally for a configurable grace period (minimum 3 days) before locking.
Set up your referral link
Go to Dashboard → Developer → Referral to get your unique link. When a client signs up via this link, they are permanently linked to your account for automatic split payments.
Your referral link
https://digitalaura.app/register?ref=YOUR_CODEAI Assistant
Every project has its own AI assistant powered by Claude. It reads your logs, understands your stack, and gives you actionable answers — not generic links.
What the AI can do
Diagnose deploy failures
Reads your build and runtime logs, identifies the root cause, and suggests the exact fix.
Analyse app logs
Ask "why is my app slow?" or "show me all 500 errors in the last hour." AI parses logs and summarises.
Detect anomalies
Proactively alerts you to memory leaks, error spikes, and unusual traffic patterns.
Generate code
Ask it to write a Dockerfile, nginx config, or migration — scoped to your project context.
Explain your stack
Ask anything about how your app is configured. The AI has full context: env vars, recent deploys, Nod specs.
Suggest scaling
AI monitors your resource usage and tells you when to upgrade — before you get an OOM crash.
Use from the CLI
# Ask anything about your project
nolbase ai "why did my last deploy fail?"
# Analyse logs
nolbase ai "show me all database errors from the last 24 hours"
# Get a code suggestion
nolbase ai "write a health check endpoint for my Express app"
# The AI has context about your project — no need to explain your stackModel routing by task
| Task | Model | Plans |
|---|---|---|
| Log queries, quick answers | Claude Haiku | All plans |
| Deploy analysis, code gen | Claude Sonnet | Standard and above |
| Deep debugging, architecture | Claude Opus | Pro and above |
AI query quotas
Quota resets on the 1st of each month. Unused queries do not roll over.
Troubleshooting
Common issues and how to fix them. If you're still stuck, open a support ticket from the dashboard.
Deploy failed — build error
Status shows FAILED, build log ends with a non-zero exit code
# View the full build log in the dashboard:
# Projects → [your project] → Deployments → [failed deploy] → View Logs
# Or via CLI:
nol logs --project my-app
# Common causes:
# 1. Missing env variable — add it under Projects → [app] → Environment
# 2. Wrong Node version — add a .nvmrc or set NODE_VERSION env var
# 3. Build command wrong — check Projects → [app] → Settings → Build CommandSSH: Connection refused
"Connection refused" or timeout when running ssh root@IP
# 1. Check Nod status in dashboard — must be RUNNING
# 2. Check firewall rules — SSH (port 22) must be open:
# Nods → [your Nod] → Firewall → Add rule: TCP port 22 from 0.0.0.0/0
# 3. Check your SSH key is added:
# Dashboard → SSH Keys → make sure your public key is listed
# 4. Try the noVNC console as fallback:
# Nods → [your Nod] → ConsoleDomain not resolving / SSL not working
Browser shows "site can't be reached" or SSL certificate error
# 1. Verify DNS — your domain's A record must point to your Nod IP:
# Check: dig A yourdomain.com
# Expected: your Nod IP (e.g. 144.91.64.234)
# 2. DNS propagation takes up to 48 hours — check status:
# Projects → [app] → Domains → [domain] → Verify
# 3. SSL provisioning requires port 80 to be open:
# Nods → [your Nod] → Firewall → ensure TCP 80 is open
# 4. Re-trigger SSL provisioning:
# Projects → [app] → Domains → [domain] → Provision SSLApp crashes immediately after deploy
Health check fails, deploy shows FAILED after build succeeds
# 1. Check the AI Deploy Doctor — it reads your logs and suggests fixes:
# Projects → [app] → Deployments → [deploy] → Diagnose with AI
# 2. Check live logs via CLI:
nol logs --project my-app --tail
# Common causes:
# 1. App not listening on process.env.PORT (must use env var, not hardcode)
# 2. Missing DATABASE_URL or other required env var
# 3. App crashes on startup — check for uncaught exceptions in logs
# 4. Wrong start command — check Projects → [app] → Settings → Start CommandDatabase connection error
"ECONNREFUSED" or "could not connect to server"
# 1. Get the correct connection string:
# Databases → [your database] → Connection String → Copy
# 2. Set it as an env var on your project:
nol env set DATABASE_URL="postgresql://user:pass@host:5432/db"
# 3. If using Prisma, make sure schema.prisma uses env("DATABASE_URL")
# 4. Check if the database is running:
# Databases → [your database] → Status must be RUNNING
# 5. Ensure your Nod and database are in the same VPC for internal access:
# Use the internal hostname (db-mydb.internal.digitalaura.app) for lower latencyAuto-deploy not triggering on git push
Push to GitHub succeeds but no new deploy appears in dashboard
# 1. Check the GitHub webhook is installed:
# Dashboard → Git → GitHub App → [your repo] → Webhook status: Active
# 2. Verify auto-deploy is enabled for your project:
# Projects → [app] → Settings → Auto Deploy → must be ON
# 3. Check the tracked branch matches what you pushed to:
# Projects → [app] → Settings → Branch (default: main)
# 4. Check webhook delivery in GitHub:
# GitHub → [your repo] → Settings → Webhooks → Recent DeliveriesCLI Reference
Install the DigitalAura CLI and manage everything from your terminal.
npm install -g @nolbase/clinolbase loginAuthenticate with your DigitalAura accountnolbase initInitialize a project in the current directorynolbase deployDeploy the current projectnolbase logsStream logs for the current projectnolbase ai "your question"Ask the AI assistant about your projectnolbase env set KEY=valueSet environment variablesnolbase sshSSH into the project Nodnolbase scale --plan proUpgrade your Nod plannolbase rollbackRollback to the previous deploynolbase db create --type postgresCreate a managed databaseAPI Reference
The DigitalAura REST API lets you manage Nods, deployments, databases, and domains programmatically. Authenticate with a bearer token from your dashboard.
# Base URL
https://api.digitalaura.app/v1
# Authentication
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.digitalaura.app/v1/servers
# Create a Nod
curl -X POST https://api.digitalaura.app/v1/servers \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-api",
"plan": "standard",
"os": "ubuntu-22.04",
"region": "ng-lag1"
}'Endpoints
/v1/serversList all Nods/v1/serversCreate a Nod/v1/servers/:idGet Nod details/v1/servers/:idDestroy a Nod/v1/deployTrigger a deployment/v1/databasesList databases/v1/databasesCreate a database/v1/domainsList domains/v1/domainsAdd a domainReady to start building?
Create your free account and deploy your first app in under 5 minutes.
Get started