Troubleshooting
Common issues and how to fix them: build failures, timeouts, logs, and where to get help.
Build failures#
If a deploy fails during the build step, check the build logs in the dashboard (Deployments → select the failed deploy → Logs). Common causes:
- Wrong build command — Override it in App → Settings → Build & Runtime if detection is wrong.
- Unsupported build shape — Shiprr builds from source with its managed build pipeline. Custom Dockerfiles and prebuilt container images are not supported yet.
- Missing dependencies — Ensure all deps are in your
lockfile (
package-lock.json,yarn.lock,requirements.txt, etc.). - Build timeout — Builds are limited to 25 minutes. Optimize (e.g. cache, smaller installs) or split work.
- Out of memory — Build containers have a fixed memory limit. Reduce parallel jobs or install steps if needed.
App not starting or crashing#
If the app builds but does not stay up, check runtime logs in App → Logs. Verify:
- Start command — We use the detected start command or the
override you saved in App → Settings → Build & Runtime.
It must listen on the port we set in
PORT. - Environment variables — Required env vars (e.g.
DATABASE_URL) must be set in the dashboard. - Health check path — If the app is healthy but still marked unhealthy, review the configured health check path in App → Settings → Build & Runtime.
- Memory — If the process is killed, try increasing RAM in app Resources.
Viewing logs#
Runtime logs are available in the dashboard under App → Logs. Build logs are available from deployment/build history when you open a specific build or deployment. See Logs for more detail.
Runtime logs are a one-shot tail from the current running replica. Build logs are archived when available and otherwise fall back to platform runtime logs, which may expire. Export or forward logs to your own logging service if you need long-term retention.
Access control issues#
If you enabled an IP allowlist or basic auth and can no longer reach the app, check these first:
- Allowlist mismatch — Your current public IP may have changed, or you may be coming through a VPN or office proxy with a different outbound IP than expected.
- Basic auth prompt keeps appearing — Recheck the username and password, and remember that both the allowlist and basic auth must pass if you enabled both together.
- Browser still uses old credentials — Browsers often cache HTTP basic auth credentials. Try a private window or clear the stored auth/session for that site.
- Locked yourself out — Remove or loosen the allowlist, or temporarily disable basic auth in App → Settings → Access control.
Billing and limits#
You are charged for CPU and RAM per hour, egress over 100 GB, and build minutes over 50/month. To reduce cost: scale down replicas or CPU/RAM when traffic is low, fix build scripts so builds finish faster, and review egress (e.g. avoid large responses or unnecessary external calls). See Pricing for details.
Getting help#
If you are stuck, check the rest of the docs, then reach out via the support or community links in the dashboard footer. Include your app name, deploy ID if relevant, and a short description of what you are seeing.