openculinary/infrastructure

Migrate to infrastructure-as-code deployment process

Opened this issue · 1 comments

Is your feature request related to a problem? Please describe.
Configuring the infrastructure for RecipeRadar is a manual and error-prone process. It could be beneficial for developer onboarding, system refresh/update, and deployment consistency to automate the installation of hosts, dependencies and services.

OpenTofu and NixOS could make sense as components of the infrastructure layer here - the former allows for declarative infrastructure, and the latter is an operating system, and both of them support source-controlled change management.

Switching from Ubuntu to NixOS would be a migration in itself, and that would likely introduce a few questions around compatibility of components and their versions.

Describe the solution you'd like
Ideally, it should be possible to:

  • Deploy the entire functional RecipeRadar server-side stack from a single git commit.
  • Optionally, describe the subset of services to deploy (for development purposes, sites that don't care about indexing additional content, ...).
    • Likely-useful subsets at the moment are:
      • indexing (api, backend, crawler, direction-parser, ingredient-parser, knowledge-graph, quantity-parser)
      • marketing (blog, content)
      • search (api, backend, frontend, image-retrieval, recrawler)
  • Ideally, when deploying from a different commit from the codebase, only deploy/redeploy the relevant changes.

Describe alternatives you've considered
Manual reconfiguration is 'OK-ish'. On a fresh Ubuntu OS jammy (I think that's the version we're using) install, I think it takes me a few hours to follow this guide and get a working system. But I'm fairly practiced at it, so it'd likely take longer for other people.

At this moment if you need to have a support of Terraform as well as OpenTofu (and Terragrunt :) ) in one tool you can use https://github.com/tofuutils/tenv which my team wrote some months ago. A lot of users switched to that tool to unify version management in the world of Terraform.

You're welcome to open any issues or contribute to tenv.