Docker
Build and run the Nitro console in a Node container.
Prerequisites
Complete Basics first, with adapters that run in Node. You also need Docker.
Prepare runtime variables
cp .env.example .env.production
chmod 600 .env.productionFill .env.production with the authentication variables and the backend variables your console.config.ts reads. Use plain KEY=value entries without wrapping quotes.
Set BETTER_AUTH_URL to your public HTTPS origin and register its OAuth callback. For local testing, use http://localhost:3000 and a matching callback.
Build the image
Use the repository's included Dockerfile and .dockerignore:
docker build -t hot-updater-console:local .The image builds the Node server and runs the complete .output as a non-root user. Secrets are supplied at startup.
The Dockerfile uses pnpm-lock.yaml. When you install packages, such as your adapters', use the pnpm tab of their installation guide to update that lockfile before building.
Start the container
docker run -d \
--name hot-updater-console \
--restart unless-stopped \
--env-file .env.production \
-p 127.0.0.1:3000:3000 \
hot-updater-console:localOpen http://localhost:3000: you should see the sign-in page.
Connect HTTPS and verify
Point your host's HTTPS reverse proxy at 127.0.0.1:3000, preserving the original host and scheme. Then open the public URL and follow Verify the deployment.
For a managed container service, supply the same variables through its runtime secret settings. The server listens on 0.0.0.0 and accepts the platform's PORT value.
Keep .gitignore in the .dockerignore allowlist: Tailwind uses it to exclude generated files during both client and server builds. Add explicit paths if your config imports other local modules.
Use an attached service identity where available. If Firebase needs a credential JSON file, mount it read-only, allow the container's node user to read it, and set GOOGLE_APPLICATION_CREDENTIALS to its container path.
The same image can run on ECS/Fargate or Cloud Run. Use an ECS task role for AWS credentials or a Cloud Run service identity for Firebase Admin.
Build for the target CPU. Cloud Run requires linux/amd64:
docker build --platform linux/amd64 -t hot-updater-console:local .Push the image to a registry your container service can access.
docker logs --tail 100 hot-updater-consoleIf your proxy runs in Docker, use a shared Docker network to reach the console instead of host loopback.
For updates, build a versioned image and recreate the container with the same runtime settings. Keep the previous image for rollback; restoring it does not restore backend data.
See Nitro's Node guide and Docker's run reference.