Your homelab can ship like the cloud.
A no-downtime, multi-tenant Next.js deployment manager for your own hardware. Blue-green deploys, preview branches, and managed Postgres, Redis and MinIO, proxied to the world through Cloudflare tunnels. No cloud bill required.
Watch a deploy happen, without a blink.
Push to main. Port-Au-Next builds the new version, health-checks it, and only then tells nginx to route traffic over. The old version serves the whole time.
Runs on whatever you've got.
No datacenter, no static IP, no credit card on file. You need a machine that runs Docker and a Cloudflare account. The closet PC is the whole point.
Cloudflare tunnels reach your apps through an outbound connection, so nothing on your home network is ever exposed. It works behind CGNAT, with no router config and no port forwarding.
That 2016 desktop, a mini-PC, a spare laptop, a NUC. If it runs Docker, it can run your whole fleet. Give the hardware you already own something useful to do.
A few watts in the closet instead of an invoice that renews every month whether you ship or not. Your projects, your electricity, your rules.
per app, every month, forever. Plus bandwidth, plus build minutes, plus the next price hike.
plus a few watts. The tenth app costs exactly what the ninth did: nothing.
The same platform points at a VPS, a dedicated server, or a rack the day you need more. Start on the closet PC, move when it matters, keep every workflow.
A real deployment platform, on your own metal.
The DX you'd expect from a managed cloud, without the vendor lock-in, the surprise bills, or handing over your data.
Every push spins up a fresh container. Traffic only switches once it's verified healthy. True zero downtime, even on a closet PC.
Every side project on one box. Host as many Next.js apps as your hardware can handle, each isolated with its own database and env.
Ship any feature branch to its own subdomain with an isolated database and per-branch environment variables.
Map any domain or subdomain to a specific app and branch. Cloudflare tunnels keep it reachable without open ports.
Push to a configured branch and it deploys automatically. Or trigger a deploy via the REST API from anywhere.
Switches only happen when the new container is verified. Failed deploys roll traffic back to the last good version.
Set env vars per app, per branch, or per preview. Run dev, staging and prod from one Port-Au-Next instance.
port-schedule gives every app cron-like jobs that call your public routes. No crontab inside containers.
Authenticated admin UI, isolated Docker network, read-only SSH keys, and restricted Docker socket access.
Six steps, fully automated.
From a git push to live traffic, Port-Au-Next runs the whole pipeline so you never babysit a deploy on the closet box.
Triggered by the UI or a GitHub webhook.
Latest code built into a new Docker image.
New container starts, assigned a version.
Verified healthy before any traffic moves.
Nginx routes traffic to the new container.
Previous container gracefully terminated.
Batteries included. Wired in automatically.
Every app gets credentials injected at deploy time, no manual config. Connect to managed services the moment your container boots.
A dedicated database and user per app, with isolated credentials. Optional Prisma support with managed migrations.
Shared cache for sessions, a Next.js cache handler, and anything else you need fast key-value storage for.
On-the-fly image optimization and resizing, ready to plug in as a custom Next.js image loader.
S3-compatible object storage for uploads and assets, with per-app policies and credentials.
Reverse proxy that routes every domain and preview branch, exposed safely through Cloudflare tunnels.
A first-party HTTP cron scheduler. Per-app jobs fire signed webhooks at your public routes on a schedule.
Opt-in privacy-focused analytics with a per-app dashboard login. Enable in settings, add the snippet, redeploy.
One dashboard for the whole fleet.
Add apps, watch deployments roll out, tail logs, and manage env vars, all from an authenticated web console.
Running in three commands.
Point it at a VPS, a cloud box, or that old PC humming in your closet. If it runs Docker, it runs Port-Au-Next.
Good to know before you self-host.
Do I need a cloud account or any paid service?
No. Port-Au-Next runs entirely on infrastructure you own — a VPS, a cloud box, or hardware at home. Cloudflare tunnels are optional but recommended to expose apps safely without opening ports. It's MIT licensed and free forever.
Will it run on a Raspberry Pi or an old laptop?
If it runs Docker and Docker Compose, it runs Port-Au-Next. A spare laptop, a mini-PC, an old desktop, even a Raspberry Pi for lighter workloads. More apps and heavier builds simply want more RAM, so a machine with 8GB or more is a comfortable starting point.
Do I need to open ports or have a static IP?
No. Cloudflare tunnels open an outbound connection from your machine, so your apps are reachable without port forwarding, a static IP, or exposing your home network. It works fine behind CGNAT, which is exactly the situation most home connections are in.
Is it okay to leave running 24/7?
That's the idea. A closet machine sips power compared to a recurring cloud invoice, and blue-green deploys mean you can update apps any time without taking anything down. When you outgrow the box, point the same setup at a VPS or a rack and keep every workflow.
How does the zero-downtime deploy actually work?
It's a true blue/green strategy. A new container is built and started alongside the running one. Only after it passes a health check does nginx switch traffic over, then the old container is gracefully drained. If the new version is unhealthy, traffic never moves.
Can I run more than one app on a single server?
Yes — that's the whole point. Port-Au-Next is multi-tenant. Each app runs in its own isolated container with its own database, credentials, and environment variables, and you map domains and subdomains to each one independently.
What are preview branches?
Deploy any feature branch to its own subdomain (e.g. feature-x.preview.yourdomain.dev) with an isolated database and branch-specific env vars. Point previews at dev services, test in a production-like environment, then clean them up automatically when the branch merges.
Does it auto-deploy from GitHub?
Yes. Push to a configured branch and Port-Au-Next deploys it via GitHub Actions integration. You can also trigger deployments programmatically through the REST API, or kick them off manually from the dashboard.
What is port-schedule?
A first-party HTTP scheduler. Instead of a crontab inside your container, each app registers cron-like jobs via an API, and port-schedule fires signed webhook requests to your app's public routes on schedule. Perfect for nightly syncs, cleanups, and recurring tasks in a stateless deploy model.
What is Umami analytics?
A shared, privacy-focused analytics instance. Opt in per app from the dashboard to get an isolated website, tracking env vars on production deploy, and your own Umami login. You add the Next.js snippet yourself; cookie and consent banners stay your responsibility.
Take back your deploys.
Self-hosting your Next.js apps shouldn't feel scary. Clone the repo and have a zero-downtime platform running on your own hardware tonight.