Say that I am developing a web application that has the following structure:
- An SPA web frontend (angular in my case)
- Postgresql database with:
- A bunch of initial data in CSV's and JSON's that need to be loaded.
- A bunch of cron-job scripts which periodically fetch data from external sources and feeds it into the database.
- A thin 'middleware' web server which provides a GraphQL API to the database (as well as auth).
Currently, I develop this app with all three parts running separately... I run the frontend using Angular's dev server, I run the middleware as a standalone process (with nodemon), and I have a development database against which I run scripts manually.
This works "ok" as long as I am working solo, but it is quickly become unmanageable as I try to bring on other frontend devs (I will still be the only middleware/database guy). For example, I have put instances of the middleware and database on a development server that's accessible to all. However, this makes it hard for me to make changes (the data model and API are changing rapidly) because it may break whatever the others are working on. I think I need to be able to version the api and database, but I'm not exactly sure how to do that. Also, there may be problems with version skew between the components.
One thing I've thought about is putting the middleware and database (with all data preloaded) into a docker container and having the other frontend devs run it with docker compose or something. However, I'm not sure how well that would work on windows. I don't have the expertise to run something more complicated like kubernetes at the moment. Also, in the long term, I'm not sure I want to deploy in containers because putting a database in docker does not seem 'right' to me for some reason (maybe I'm biased).
Any advice on the correct development workflow and/or project structure and/or products and services that might help?