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, orpnpm-lock.yaml. - Make sure production start uses the port Shiprr provides in
PORT.
Recommended Shiprr settings
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
- Open the dashboard and choose Apps → New app.
- Connect GitHub or GitLab if needed.
- Select your repository, branch, region, root directory, and deploy trigger.
- Confirm build/start commands and environment variables.
- 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 buildfails. - Open runtime logs if the app builds but does not start.
- Check the start command and
PORTbinding 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