Framework guide

Deploy a Next.js app from GitHub

Use Shiprr to deploy a Next.js app from source, set runtime commands, inspect logs, attach domains, and roll back to a previous build.

Before you start

  • Your Next.js app should be in a GitHub or GitLab repository.
  • Commit your lockfile, such as bun.lock, package-lock.json, or pnpm-lock.yaml.
  • Make sure production start uses the port Shiprr provides in PORT.

Shiprr can usually detect a Next.js app from package.json. If you want explicit settings, use these under App → Settings → Build & Runtime.

root directory: ./
install command: bun install
build command: bun run build
start command: bun run start -- -p $PORT
health check path: /

Replace bun with npm or pnpm if that is what your project uses. In a monorepo, set the root directory to the folder that contains the Next.js app.

Package scripts

A typical Next.js app has scripts like this. The start command above passes Shiprr's runtime port through to Next.js.

{
  "scripts": {
    "build": "next build",
    "start": "next start"
  }
}

If your app uses a custom server, use that server's production start command instead, and make sure it listens on PORT.

Environment variables

Add production values in App → Settings → Environment variables. Shiprr applies env var changes by redeploying running apps.

DATABASE_URL=postgres://...
NEXT_PUBLIC_SITE_URL=https://example.com
NODE_ENV=production

Keep secrets out of Git. Variables prefixed with NEXT_PUBLIC_ are intended for client-visible config, so do not put secrets there.

Deploy

  1. Open the dashboard and choose Apps → New app.
  2. Connect GitHub or GitLab if needed.
  3. Select your repository, branch, region, root directory, and deploy trigger.
  4. Confirm build/start commands and environment variables.
  5. Create and deploy the app.

New apps start with 1,000 MHz CPU and 512 MB RAM per replica. Many Next.js SSR apps work better starting at 2,000 MHz and 1 GB RAM, depending on dependencies and request volume.

Verify and debug

  • Open build logs if install or next build fails.
  • Open runtime logs if the app builds but does not start.
  • Check the start command and PORT binding if health checks fail.
  • Increase CPU/RAM if the app is slow, crashes under load, or runs out of memory.

Once the default Shiprr hostname works, add a custom domain from the app's Domains page. Shiprr handles HTTPS automatically after DNS points to the Shiprr target.

Rollback

Roll back from the deployment/build history when a release goes wrong. Shiprr reuses the selected previous successful build, skips a source rebuild, and creates a fresh deployment attempt with the current app runtime settings.

Deploy your Next.js app on Shiprr

New accounts include welcome credit, enough to try a small app before paying.

Create account