ODK Central deployment without nginx for deployment in multi-app and kubernetes environments

What high-level problem are you trying to solve?

  • Deploy ODK-Central in multiple server environment, including server that uses multiple apps, hence multiple NGINX reverse proxy and kubernetes

Any ideas on how ODK could help you solve it?

  • Remove the requirement to bind a domain in NGINX to run and use the enketo forms through an HTTPS-only endpoint

Following the ODK Central official deployment usually requires a ODK-only server deployment, because it comes with an inbuilt NGNIX, that binds the domain to the public IP address. For most organizations, this requirement leads to maintaining an exclusive server with at least 4vCPU and 4GB memory server with limited to no option to use it for any other purpose.

To my knowledge the ODK Central comes with the NGNIX in built, because of the Enketo’s requirement to check the same site DNS. Earlier i have removed the same site requirement from Enketo configuration and could show the Enketo web form in a React modal, for example.

However, making this restriction also limits a lot of organizations’ ability to self-host, in their own environment. Possibly an ODK instance can be run using much smaller hardware resources.

I’m looking forward to ODK Web Forms - maybe this will simplify the build step or even allow to use all pre-built images. My use case is to spin up a very ephemeral and disposable Central instance in a devcontainer for development and testing of my R package ruODK. (DevOps: Provide ODK Central in devcontainer and GH actions · Issue #170 · ropensci/ruODK)

Edit: Use images for all services · Issue #677 · getodk/central

@atanu , I just posted a question and @jniles pointed me here. Can you explain to me how your proposal here might work with the use case below:

@Tyler_Depke No, not possible to have project-wise domain in single instance. ODK doen’t support multi-tenancy and it will be too much modification to achieve multi-tenancy - plus this is not a requirement for nonprofit organizations.

Having said that, it should allow deployment of multiple ODK instances in single server - so essentially it will then get one domain per org and within each instance an org can have multiple projects.

What i have done in CAPIBuilder (https://www.capibuilder.com/) is to generate CNAME which then orgs can attach to their domain and get individual domains and route to the respective CAPIBuilder frontend:

ACME Foundation - https://survey.acmefoundation.org
ACME Corp: https://survey.acmecorp.com

And create and assign project manager roles through ODK API for the respective users.

Removing auto-generate NGINX proposal:
Because ODK docker auto-generates the NGINX, a stable practice will be to let the users bring their own NGINX. Enketo can work without HTTPs and guidance on getting HTTPs for production deployment to ensure security for data transmission is adequate.

This approach would require to run multiple instances of ODK in same server. Database server can still be the same.