| Posture | Network | Consumes | Install path |
|---|---|---|---|
| A. Connected | Public internet | GHCR + OCI Helm chart | helm install … oci://ghcr.io/… or docker compose up |
| B. Proxied air-gap | Private, with registry mirror | GHCR via Nexus / Harbor / Artifactory | Retarget image.registry to your mirror |
| C. Fully air-gapped | No internet | Offline zip bundle from GitHub Release | ./load-images.sh + helm install ./chart.tgz |
| D. Trial / single-VM | Public internet or offline | GHCR images or bundle | docker compose up |
Prerequisites
All postures
All postures
- Linux x86_64 (v0.1 is single-arch)
- TLS certificate for your API and frontend domains
- Generated secrets:
- Django secret key —
python -c "import secrets; print(secrets.token_urlsafe(50))" - Fernet key —
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
- Django secret key —
Kubernetes postures (A / B / C)
Kubernetes postures (A / B / C)
- Kubernetes 1.24+
- Helm 3.8+ (OCI chart support)
- An ingress controller (nginx-ingress recommended)
Single-VM (D)
Single-VM (D)
- Docker 24+ with Compose v2
External services (or use bundled Bitnami sub-charts for POC)
External services (or use bundled Bitnami sub-charts for POC)
- PostgreSQL 15+
- Redis 6+
- S3-compatible object storage (AWS S3, Cloudflare R2, DO Spaces, MinIO)
Posture A — Connected install (Kubernetes)
Pull the values template
values.yaml and fill in secrets, database URL, S3 credentials, and hostnames.(If packages are private) log Helm in to GHCR
Use a GitHub token with at least
read:packages scope on the owning account:Posture B — Proxied air-gap (Kubernetes with internal registry)
Your internal registry (Nexus / Harbor / Artifactory) must proxy GHCR (ghcr.io) and cache the NodePad images. Point the chart at your mirror via a single value:
values.yaml (excerpt)
Posture C — Fully air-gapped install
Download the bundle on a connected machine
Grab
nodepad-0.1.0.zip from the GitHub Release.Transfer to the air-gapped environment
USB, DMZ, approved file transfer — whatever your policy mandates.
Posture D — Single-VM trial (docker compose)
External vs bundled services
The chart defaults to bring-your-own Postgres / Redis / S3 for production. SetexternalPostgres.url, externalRedis.url, and externalS3.* values.
For self-contained installs (POC, demo, dev), flip the sub-chart flags:
values.yaml (excerpt)
Verification
Next steps
Upgrade & rollback playbook
How to upgrade safely, roll back, and handle migration-incompatible rollbacks.
Air-gapped install details
Bundle contents, offline upgrade flow, and the zero-outbound-telemetry guarantee.