Hosting Guide

Tours is a Node.js / Next.js 16 application. That single fact decides where it can run: you need a host that can serve a Next.js app (serverless or long-running Node), plus a PostgreSQL database and S3-compatible object storage. This guide compares the hosting options that actually fit Tours and is honest about the constraints of each.

For the exact build / start / env steps once you've picked a host, see the Deployment Guide.

What Every Deployment Must Provide

Regardless of where you deploy, Tours needs:

  • Node.js 20+ to build and run the app.
  • A PostgreSQL database reachable from the app — Neon is recommended, because Tours uses the @neondatabase/serverless driver (HTTP-based, ideal for serverless).
  • S3-compatible object storage (Cloudflare R2 by default) for all uploads.
  • HTTPS on your domain — required for secure cookies and license activation.

Two facts that shape your choices:

  • The app never relies on the local disk for uploads in production — media goes to R2 / S3.
  • There is no migration framework; the schema is created idempotently on first run, so deploys are just "build and start".

Vercel is the natural home for a Next.js app and the lowest-maintenance path. The project ships with a vercel.json that sets the build / install / dev commands, pins a region, and registers the hourly cron — so most of the setup is done for you.

Strengths

  • First-class Next.js support, automatic HTTPS, zero-downtime deploys, and managed scaling.
  • The included vercel.json wires /api/v1/cron to run hourly automatically — no crontab to maintain.

The one constraint to understand

On Vercel the runtime filesystem is read-only. Tours detects this automatically (Vercel sets the VERCEL environment variable). The practical consequences:

  • Uploads must go to R2 / S3. You cannot write files to local disk. Configure storage before going live.
  • The install wizard cannot write .env. Instead it returns the values it would have written (e.g. DATABASE_URL, JWT_SECRET, CRON_SECRET); add them in Project Settings → Environment Variables for Production, Preview, and Development, then redeploy.

Pair Vercel with Neon (database) and Cloudflare R2 (storage) and you have a fully managed, serverless deployment.

Option 2 — Node VPS (Self-Hosted, Full Control)

A VPS gives you a writable filesystem, persistent processes, and predictable pricing. Recommended providers include DigitalOcean, Hetzner, Linode, Vultr, and AWS Lightsail.

Terminal
# On the VPS
npm install
npm run build
npm run start            # serves on port 3000

Run it under a process manager so it restarts on crash and on boot, and put Nginx (or Caddy) in front for HTTPS:

Terminal
pm2 start "npm run start" --name tours && pm2 save

Strengths

  • Writable filesystem — the install wizard can write .env and the .installed lock for you, and local-disk fallbacks work for testing.
  • Full root access; run anything you like alongside the app.

Responsibilities

  • You set up HTTPS yourself (Let's Encrypt via Nginx / Caddy is the usual route).

  • You wire up the hourly cron with a crontab entry (the wizard prints the exact line):

    Terminal
    0 * * * * curl -fsS "https://your-domain.com/api/v1/cron?key=YOUR_CRON_SECRET" >/dev/null 2>&1
    

Even on a VPS, the recommended setup is still managed Neon for the database and R2 for storage, so the box only runs the Node process and you don't manage database backups or file storage on it.

Option 3 — Any Other Node Host

Because Tours is a standard Next.js app, it also runs on other Node-capable platforms — Render, Railway, Fly.io, a Node-enabled cPanel "Node.js app", or a container platform.

When evaluating one of these, check:

Requirement Why it matters
Node.js 20+ Build and runtime.
Persistent process or serverless Next.js support To serve the app.
Writable FS or R2 / S3 storage If the FS is read-only, you must use R2 / S3 for uploads (same as Vercel).
Ability to set environment variables For DATABASE_URL, JWT_SECRET, SECRET_KEY, etc.
Scheduled HTTP request (cron) To call /api/v1/cron hourly.

Shared / static-only hosting is not enough. Tours is a server-rendered Node application, not a bundle of static files and not PHP. A plain static host or a basic PHP shared plan cannot run it. If a host advertises a "Node.js app" feature, confirm it allows persistent processes (or supports Next.js serverless) and lets you set environment variables.

Domain & HTTPS

  • Point your domain at your host (Vercel and managed platforms handle TLS automatically; on a VPS, terminate TLS at Nginx / Caddy with Let's Encrypt).
  • Set NEXT_PUBLIC_SITE_URL to your https:// domain so absolute links and SEO are correct.
  • HTTPS is also required for license activation — the license binds to your live production domain. Local and private-LAN hosts run in dev mode (licensing bypassed); your real domain must be activated. See the License Guide.

The PostgreSQL Choice

Tours uses the Neon serverless driver (@neondatabase/serverless). Neon is recommended because the driver is purpose-built for it and communicates over HTTP, which works cleanly from serverless functions. Any PostgreSQL endpoint that this driver accepts will work; if you self-host PostgreSQL on a VPS, ensure it is reachable by the driver and that your DATABASE_URL includes the correct SSL mode.

Object Storage

All uploads go through a single S3 client, so any S3-compatible provider works — Cloudflare R2 (default), DigitalOcean Spaces, Amazon S3, or Google Cloud Storage. Connect it in Admin → Settings → Integrations → Storage, where the credentials are encrypted in the database. On any read-only host this is mandatory before launch, since local-disk uploads are impossible. See the Deployment Guide for the step-by-step.

Quick Recommendation

Your situation Suggested host
Want the least operational effort Vercel + Neon + Cloudflare R2
Want full control / writable FS Node VPS (PM2 + Nginx) + Neon + R2
Already on Render / Railway / Fly.io Use it — just confirm storage goes to R2 / S3 if the FS is read-only

Whichever you choose, the database is Neon and storage is R2 / S3 — that combination keeps Tours portable and lets you move hosts without touching your data or media.


© CreativeCape Solutions · creative-cape.com · support@creative-cape.com