Development¶
Managing Requirements¶
adding a new requirement¶
For production requirements add them to requirements.in
, for development requirements
add them to requirements-dev.in
. Then run for production requirements:
uv pip compile --no-annotate requirements.in -o requirements.txt
…and for development requirements
uv pip compile --no-annotate requirements-dev.in -o requirements-dev.txt
This will add the new requirements but will not upgrade all others
upgrading existing requirements¶
To upgrade the existing production requirements run:
uv pip compile --upgrade --no-annotate requirements.in -o requirements.txt
…and the development requirements:
uv pip compile --upgrade --no-annotate requirements-dev.in -o requirements-dev.txt
This also done automatically once a week in a GitHub Actions workflow which creates a PR.
Database¶
Views¶
The database implements its own manually-managed views so incremental refreshes are supported. Only the most recent data is refreshed every five minutes. However, to make the system self-healing, once a day all views are fully refreshed.
A code-generating tool was developed to generate hourly and daily views based on the raw data. A pre-commit hook ensures the everything stays in sync.
Migrations¶
This system uses alembic for database migrations. Make sure you generate/implement a migration for every change made to the database.
Deployment¶
The deployment is implemented in ansible. The repository is private. The full deployments workflow will be adapted upon transfer of the system to a new home.
It currently requires a machine with the following specs
8x CPU
16 GB RAM
32 GB HDD for the OS
3 TB HDD for the data
Debian-based OS (currently Ubuntu 24.04 - noble)
ansible-playbook d2r.yml
you will be prompted for the become (sudo) password
you will be prompted for the vault password.
the vault contains all secrets needed for the deployment
.env.prod
fileSSL-Certificates