Stefan-Sanger 256b5fdeb1 fix: create prosody_unique_index on upgraded databases
Prosody 13's mod_storage_sql upgrade path only warns when the index is
missing (it is created only on fresh tables). On DBs upgraded from 0.11.6
the table pre-existed, so the index was never created and has_upsert_index
stayed false, disabling ON CONFLICT upserts and degrading write performance.

Add an idempotent CREATE UNIQUE INDEX IF NOT EXISTS to both the migration
and new-deployment scripts.

Part-of: <http://gitlab.vnc.biz/uxf/vnctalk-prosody/-/merge_requests/4>
2026-07-15 19:51:02 +02:00

VNCtalk Prosody

Dockerized Prosody 13.0.6 XMPP server for VNCtalk, built from source against Lua 5.4 on Alpine. The Dockerfile compiles Prosody, applies source patches, and layers on custom Lua modules — producing a single image deployed to Kubernetes via the bundled Helm chart and ArgoCD.

Repository layout

Path Purpose
Dockerfile Multi-stage build: builder applies patches/*.patch to the extracted Prosody source, then ./configure --idn-library=idn --lua-version=5.4 && make install. Final stage copies the built tree + vnctalk/ modules + config/.
patches/ Unified diffs against upstream Prosody core files, applied with patch -p1 --fuzz=0 before configure. Adding/removing a .patch needs no Dockerfile change (glob-based). See patches/README.md for per-patch intent.
vnctalk/ VNCtalk-specific Prosody modules (mod_vnc_*, mod_http_rest, mod_alias, mod_webpresence, …), copied wholesale to /usr/local/lib/prosody/modules/.
config/ Runtime config template (prosody.cfg.lua.template), startup.sh (renders config via envsubst, writes certs, launches Prosody), healthcheck.sh, and startup-sidecar.sh (static-file/redirect sidecar).
helm/prosody/ Helm chart for Kubernetes deployment (Chart.yaml, values.yaml, templates/).
argo/prosody.yaml ArgoCD Application manifest — the canonical deploy config (image tag, ingress, env vars).
db-customization/ PostgreSQL schema/migration SQL for the Prosody 13 database (applied out-of-band, not by the container).
tests/ pytest + slixmpp integration suite (~86 tests) with aiohttp mocks and a compose test harness.

Deployment

The only intended deployment method is the Helm chart in helm/prosody/, synced to the cluster by ArgoCD via argo/prosody.yaml.

argo/prosody.yaml  →  helm/prosody/  →  Docker image (release-13.0.6-vnc)
  • ArgoCD (argo/prosody.yaml) is the source of truth for the live image tag, ingress annotations, TLS, and environment variables. It references the Helm chart and overrides values as needed.
  • Helm chart (helm/prosody/) defines the Deployment, Service, Ingress, HPA, PDB, and ServiceAccount templates.
  • Docker image is built by GitLab CI from the Dockerfile, pushed to eu.gcr.io, and referenced by tag in argo/prosody.yaml.

No other deployment method is supported. The test.sh / docker-compose.yml files are for local testing only.

Build & test

# Build the image
docker build -t vnctalk-prosody .

# Run the compose test harness (postgres + mocks + prosody)
make up
source tests/venv/bin/activate
pip install -r tests/requirements.txt
pytest tests/ -v -c tests/pytest.ini
make down

For full details see AGENTS.md and tests/README.md.

S
Description
VNCtalk Prosody (XMPP server) config
Readme
694 KiB
Languages
Python 43.5%
Lua 41.5%
Shell 6.5%
PLpgSQL 4.8%
PHP 1.3%
Other 2.4%