Deployment¶
The service runs as a container. Building from a clone needs no registry access and is the quickest way to get an instance up:
git clone https://github.com/AI-team-UoA/RECITALS-cryptography-manager.git
cd RECITALS-cryptography-manager
docker build -t recitals-cryptography-manager .
docker run -p 8000:8000 \
-v "$(pwd)/config.yaml:/app/config.yaml:ro" \
-v crm-audit:/app/audit \
recitals-cryptography-manager
Prebuilt images are published to
ghcr.io/ai-team-uoa/recitals-cryptography-manager on every push to main,
tagged latest, main and sha-<commit>.
The package is currently private. Pulling it requires authenticating to the registry with a personal access token carrying the
read:packagesscope, and membership of the organisation:echo "$GITHUB_TOKEN" | docker login ghcr.io -u YOUR_USERNAME --password-stdin docker pull ghcr.io/ai-team-uoa/recitals-cryptography-manager:latestAn organisation owner can make it public from the package's settings page, after which the pull works anonymously and no login is needed.
The image runs as an unprivileged user, exposes port 8000 and carries a
healthcheck against /health. Audit records and privacy budget state are
written to /app/audit, which is declared as a volume: a privacy budget that
resets when the container is replaced is not a guarantee of anything.
Images are linux/amd64 only, because PyDP publishes x86_64 manylinux wheels
and no aarch64 build.
For local development and integration testing, docker-compose.yml brings the
service up alongside stand-ins for the three downstream services it forwards
audit records to, so that path is genuinely exercised rather than merely
configured. It builds from the working tree, so it needs no registry access
either:
.github/workflows/ci.yml runs the linter, the type checker and the test suite
on Python 3.10, 3.11 and 3.12, then builds the image, smoke-tests it, and
publishes to the registry. Pull requests build the image to prove the
Dockerfile still works but never publish it.