Can you suggest an architecture for a Node.js application with reverse proxy, MongoDB and static client app?
I need to host a production application for a relatively small number of users (say about 100 initially, but maybe increasing to 1000-5000 over the next years).
At the moment, I am trying to decide between hosting it all on PaaS providers like Google Cloud and mLab, or taking the do-it-yourself approach with Digital Ocean, to save some money.
If I were to host this application myself on Digital Ocean, what architecture would you recommend to use? And how many droplets?
My current thinking is to setup a Nginx web server to host the static client files and to act as a reverse proxy for the Node.js Express app and possibly a load balancer in the future. In addition, I will need a MongoDB database server as well.
There will be no need for a mail server, as I will be using Sendgrid to send emails.
Should I dump this all on one droplet or split it up in multiple? I want to avoid having to pay too much (e.g. have too many droplets) at this initial stage, so can I for example have 1 droplet for the Nginx web server and 1 droplet for the Node.js app + MongoDB database? Or should I run the MongoDB on a separate server?
And as a bonus question: what if I wanted to host a couple of static sites in addition to this application, could I safely do so on the same Nginx droplet? We’re talking minimal traffic for those small sites, and on a separate domain.
What are your thoughts? Are there any other considerations I need to think of?
What about scaling, security, load balancing?
Any feedback would be greatly appreciated!