Deploy on Hostinger / LiteSpeed
Practical, step-by-step deployment guidance for a beginner-friendly server setup.
Goal
Run two processes:
- Web app (Next.js)
- Worker (pg-boss crawler)
Optionally:
- MCP server (stdio)
Prereqs
- A Postgres database you can connect to
- Node.js 18+ (Node 20+ recommended)
- A way to run long-lived processes (PM2, systemd, Hostinger Node App manager, etc.)
Recommended layout
On the server:
/var/www/myorg-datasets/(repo checkout).envfile with secrets
1) Configure environment
Create .env in the repo root:
DATABASE_URL=postgres://USER:PASS@HOST:5432/DBNAME
EMERGENCY_ADMIN_TOKEN=change-me
TZ=America/Los_Angeles
FILESYSTEM_ALLOWED_ROOTS=/mnt/data
2) Install and build
npm install
npm run db:migrate
npm run db:seed
npm run build
3) Start the web process
Option A: Hostinger Node app manager
- Point the app root to your repo
- Start command:
npm run start - Ensure it sets env vars from your
.env(or Hostinger UI)
Option B: PM2
npm install -g pm2
pm2 start npm --name myorg-datasets-web -- run start
pm2 save
4) Start the worker
The worker must run separately:
pm2 start npm --name myorg-datasets-worker -- run worker
pm2 save
5) Reverse proxy / domain
Expose the web process at your chosen domain/subdomain.
- If you already run another site at
myorg.ai, consider a subdomain likedatasets.myorg.ai.
6) Validate
- Web: open
/and/datasets - Management: open
/appand enter the admin token - Health: open
/api/health
7) Common “it’s down” checklist
pm2 lsshows both processes online/api/healthis reachable- Postgres is reachable from the server
- Migrations are applied (
doctorshows no pending migrations)
Notes
LiteSpeed/Hostinger environments vary. If you can’t keep a worker alive via their UI, use PM2/systemd.