Go to file
chrisfu fdc1582bd0 Fix DB image build and k3s registry/CNPG robustness
- update Percona Dockerfiles for compatible extension/tooling install flow\n- add HTTP/HTTPS-aware k3s registry configuration path across scripts/Ansible\n- harden CNPG TLS bootstrap CN handling for long namespaces and add regression test\n- improve namespace reset pod-deletion wait behavior

Co-authored-by: Junie <junie@jetbrains.com>
2026-03-29 19:35:37 -07:00
.idea/runConfigurations Configure Silent Install Test with unique logging and shared run configuration 2026-02-02 16:13:15 -08:00
authority Refactor shell layout; add shellspec + authority 2026-03-13 09:19:56 -07:00
bin Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
conf Add node management workflow and installer config persistence updates 2026-03-29 11:22:33 -07:00
deploy stable: slimmed Supabase + CNPG 3-node healthy build (2026-03-25) 2026-03-25 11:56:40 -07:00
docs Add node management workflow and installer config persistence updates 2026-03-29 11:22:33 -07:00
etc Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
gitea Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
img Installer refactor: k3d cluster lifecycle, kubeconfig handling, UI polish & cleanup - Fix KUBECONFIG not generated for dev/k3d clusters by merging k3d kubeconfig in _script_env_for_namespace() and after cluster creation - Fix Add/Delete button macOS black focus ring with highlightbackground/highlightthickness styling - Refactor milestones, actions, controller, deploy pipeline, and env helpers - Simplify prole.cfg and port-mapping.cfg defaults - Improve archive_garage_backup.py and init_cloudnative_pg.sh - Remove unused img/LOADING_GIF_README.md and img/generate_loading_gif.py - Add qodana.yaml for static analysis configuration 2026-02-20 01:28:52 -08:00
infrastructure Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
k3s Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
k8s Stabilize CNPG reset/update flow and finalize 3-node recovery 2026-03-27 21:54:53 -07:00
knoe Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
knoe-db Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
mock_val Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
modes Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
prole feat: add storage probing and operational service updates 2026-03-26 09:44:23 -07:00
prole-app refactor: modernize installer and monitoring setup 2026-02-19 21:07:39 -08:00
prole-auth Remove legacy secrets, configs, and scripts; introduce prole-auth service and Grafana SSO proxy configuration. 2026-03-20 13:00:36 -07:00
prole-mssql-db Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
prole-net Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
prole-tools-app Refactor project structure and update initialization scripts 2026-02-14 13:44:49 -08:00
scan Add node management workflow and installer config persistence updates 2026-03-29 11:22:33 -07:00
scripts Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
service Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
src Remove prole-db-manager; simplify deployment via prole-authority; fix pg18 downgrade & cluster name 2026-03-01 20:40:44 -08:00
ssl Enable TLS for k3s registry and deploy SSL certs 2026-03-10 00:58:08 -07:00
supabase feat: add storage probing and operational service updates 2026-03-26 09:44:23 -07:00
tests Fix DB image build and k3s registry/CNPG robustness 2026-03-29 19:35:37 -07:00
tmp Stabilize CNPG reset/update flow and finalize 3-node recovery 2026-03-27 21:54:53 -07:00
tools Add node management workflow and installer config persistence updates 2026-03-29 11:22:33 -07:00
vault_backup Summary of recent repairs and infrastructure updates 2026-02-15 17:51:57 -08:00
.coveragerc feat(installer): improve UI and add test coverage for core features 2026-01-08 21:51:30 -08:00
.gitignore Remove generated values.generated.json from git; add to .gitignore 2026-03-24 14:40:02 -07:00
ansible_min.cfg Implement real-time command executor for network scan: added run_streaming_cmd for unbuffered output, integrated with NetworkScreen UI, and added unit tests. 2026-02-28 17:58:58 -08:00
ansible_recovery.log Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
ansible.cfg ansible: add K3s datastore export/import, improve iSCSI handling, and migrate merlin to MariaDB primary 2026-03-06 14:25:13 -08:00
ansible.sh Refactor iSCSI Synology mounts to /synology/d00x 2026-03-21 10:43:06 -07:00
BUILD.md feat: add ncurses interface, build system, and embedded resources 2026-01-19 23:10:37 -08:00
end_time.txt Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
env.sh Remove legacy secrets, configs, and scripts; introduce prole-auth service and Grafana SSO proxy configuration. 2026-03-20 13:00:36 -07:00
Executing Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
install.pid Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
install.py Checkpoint: rename installer to knoe + harden db build context 2026-03-22 01:45:21 -07:00
knoe-db.iml feat: add storage probing and operational service updates 2026-03-26 09:44:23 -07:00
knoe.iml Separate k3s and k3d config defaults; normalize k3s image registry refs 2026-03-23 03:48:58 -07:00
knoe.spec Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
LICENSE Initial commit 2025-07-12 18:02:40 -07:00
Makefile Checkpoint: rename installer to knoe + harden db build context 2026-03-22 01:45:21 -07:00
network_description.txt feat: complete end-to-end installation and storage integration. This commit marks a significant milestone where the end-to-end installation process is now fully functional. Key changes: Integrated Garage storage service (S3-compatible); Implemented Prole DB backup; Enhanced Kerberos integration; Updated default namespace to prole-chrisfu-deadbeef; Streamlined dependencies (removed Ollama); Added installation validation and testing scripts; Improved installer UI and deployment logic. 2026-01-29 22:50:05 -08:00
network_prompt.txt Refactor prole-app and establish temporary release process 2026-01-18 15:04:23 -08:00
pom.xml Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00
prole_requirements.txt Add prole.spec and extend OpenTofu k3s configuration 2026-02-24 21:47:02 -08:00
prole.cfg Align CNPG bootstrap placement with Ansible policy 2026-03-18 22:06:41 -07:00
prole.sh Stabilize CNPG reset/update flow and finalize 3-node recovery 2026-03-27 21:54:53 -07:00
prole.spec Add prole.spec and extend OpenTofu k3s configuration 2026-02-24 21:47:02 -08:00
qodana.yaml Installer refactor: k3d cluster lifecycle, kubeconfig handling, UI polish & cleanup - Fix KUBECONFIG not generated for dev/k3d clusters by merging k3d kubeconfig in _script_env_for_namespace() and after cluster creation - Fix Add/Delete button macOS black focus ring with highlightbackground/highlightthickness styling - Refactor milestones, actions, controller, deploy pipeline, and env helpers - Simplify prole.cfg and port-mapping.cfg defaults - Improve archive_garage_backup.py and init_cloudnative_pg.sh - Remove unused img/LOADING_GIF_README.md and img/generate_loading_gif.py - Add qodana.yaml for static analysis configuration 2026-02-20 01:28:52 -08:00
README.md Harden monitoring init; improve k3s reset cleanup 2026-03-15 16:02:15 -07:00
requirements.txt Update Prole-DB and improve Supabase integration 2026-02-01 23:56:25 -08:00
run_with_coverage.sh checkpoint: improve init scripts, installer flows, and kube context handling 2026-03-14 20:07:54 -07:00
start_time_final.txt Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
start_time.txt Fix Kong OOM crash: increase memory limit to 1Gi, mount ConfigMap to subdirectory 2026-02-22 01:02:00 -08:00
status.py Stage 2: complete CNPG shell-to-Python cutover, remove init_cloudnative_pg.sh 2026-03-23 19:28:04 -07:00
supabase.sh Configure Silent Install Test with unique logging and shared run configuration 2026-02-02 16:13:15 -08:00
test_resolve.sh Rename prole-db to knoe-db, add knoe-auth as cluster-internal KDC 2026-03-22 22:16:21 -07:00

Prole

Prole makes it practical to run a Supabase-style platform in an air-gapped environment.

It packages the core building blocks needed for a modern internal developer platform around PostgreSQL, object storage, secrets, auth, observability, and Kubernetes-native operations — with a bias toward simple deployment, shard-based scale-out, and deterministic ingestion.


Platform badges

Kubernetes K3s Helm Argo CD Docker containerd

PostgreSQL CloudNativePG psql pgvector MariaDB SQLite

Python uv FastAPI Pydantic

Next.js React TypeScript

OpenBao Garage Vector Prometheus Grafana

cert-manager Traefik Kong OIDC Google Workspace Samba AD

Ansible OpenTofu Linux Raspberry%20Pi


What Prole is

Prole is an infrastructure stack for running a Supabase-like data and application platform in constrained environments, including:

  • air-gapped networks
  • edge and small-cluster deployments
  • sovereign or private data environments
  • disconnected labs and field systems
  • internal platforms where cloud dependencies are undesirable

The design goal is not to mimic Supabase branding or every managed feature exactly.

The design goal is to provide the useful substrate people actually want:

  • PostgreSQL as the center of gravity
  • object storage
  • auth integration
  • secret management
  • ingress and service exposure
  • observability
  • reproducible Kubernetes deployment
  • application and worker services around the database
  • ingestion patterns that are safe, resumable, and idempotent

Core idea

Prole can run Supabase-style workloads in an air gap.

That means:

  • PostgreSQL remains the system of record
  • services are deployed on Kubernetes
  • auth can come from local identity systems or cloud OIDC where available
  • object storage stays inside the environment
  • secrets stay inside the environment
  • ingestion does not depend on live internet services
  • the stack can be deployed in shards for locality, resilience, and operational simplicity

Main components

Application layer

  • Next.js app for the user-facing platform
  • prole-agent worker for async and background execution

Data layer

  • CloudNativePG for PostgreSQL lifecycle on Kubernetes
  • PostgreSQL as the primary relational store
  • append-only fact tables for durable ingestion and replay-friendly modeling
  • PostgreSQL COPY for efficient bulk ingest

Storage and secrets

  • Garage for S3-compatible object storage
  • OpenBao for secret storage and secret distribution

Identity

  • Dev auth: Samba AD + IdP
  • Cloud auth: Google Workspace OIDC

Observability

  • Vector for log and event shipping
  • Prometheus / Grafana for metrics and dashboards

Platform operations

  • K3s / Kubernetes
  • Helm
  • Argo CD
  • Ansible
  • OpenTofu

Ingestion model

Prole is designed around deterministic, replayable ingestion.

Key patterns:

  • SQLite delta cartridges as portable input units
  • append-only fact tables for auditability and recovery
  • PostgreSQL COPY for high-throughput loading
  • queue-driven workers using SKIP LOCKED
  • idempotent ingestion so retries are safe
  • shard-based deployment so data movement stays deliberate and bounded

This makes the platform well suited to environments where data may arrive in batches, be transferred physically, or need careful replay and provenance.


Architecture at a glance

flowchart LR
    U["Users / Operators"]
    A["Next.js App"]
    W["prole-agent"]
    PG["CloudNativePG / PostgreSQL"]
    OBJ["Garage Object Store"]
    SEC["OpenBao"]
    AUTH["Auth: Samba AD / Google Workspace OIDC"]
    OBS["Vector / Prometheus / Grafana"]
    K8S["K3s / Kubernetes"]

    U --> A
    A --> PG
    A --> OBJ
    A --> SEC
    A --> AUTH
    W --> PG
    W --> OBJ
    W --> SEC
    K8S --> A
    K8S --> W
    K8S --> PG
    K8S --> OBJ
    K8S --> SEC
    K8S --> OBS

Deployment model

Prole favors simple, understandable deployment over excessive platform ceremony.

Typical characteristics:

  • Kubernetes-native deployment
  • lightweight K3s-friendly footprint
  • HA where it matters
  • shard-oriented layout instead of one giant control surface
  • GitOps-friendly operations
  • support for small clusters, including Pi-based or edge environments

Use cases

Prole is a good fit for teams that need:

  • a PostgreSQL-centered application stack inside a disconnected environment
  • a self-hosted substrate for Supabase-style internal platforms
  • ingestion from offline or intermittently connected sources
  • reproducible deployment on small Kubernetes clusters
  • strong control over secrets, storage, and identity boundaries

Project principles

  • Air-gap first
  • Postgres first
  • Simple over ornate
  • Deterministic ingestion
  • Kubernetes-native
  • Shard-friendly
  • Operationally boring where possible

Repository scope

This repository contains the infrastructure and platform materials used to stand up Prole components, including Kubernetes deployment, database operations, storage, auth, observability, and supporting services.

As the project evolves, this README should stay focused on:

  • what Prole is
  • why it exists
  • the major building blocks
  • the deployment model
  • the operational philosophy

Detailed setup docs, cluster procedures, and host-specific notes should live in dedicated documents under docs/, ops/, k8s/, or role-specific subdirectories rather than expanding this file indefinitely.


Status

Prole is an actively evolving platform stack aimed at practical self-hosted and air-gapped operation.

Expect the architecture to continue being refined toward:

  • cleaner bootstrapping
  • better shard isolation
  • smoother rejoin/reset behavior for cluster nodes
  • clearer service boundaries
  • improved onboarding and operations documentation

License

Add the project license here.