Here's what I am using:
AWS Instance Setup New EC2 instance
- Ubuntu Server 16.04 LTS (HVM), SSD Volume Type - ami-10547475
- t2.large: 2 vCPUs, 8GB RAM
- 250 GB (currently about 60gb is being used)
- nginx reverse proxy server: for ssl/https access (for my site which is https)
- tmux for persistence
- set up parity as a daemon process
I am using parity instead of geth. Parity syncs more quickly, is usable within a few hours. I was previously using geth, which took days and often had failures during initial sync. Parity, for me, is much more reliable. I have never had a problem setting up a new node/initial sync.
Docker resulted in delays: I also created a docker/parity node but I found that this resulted in delays. There would be a lag in connecting to the node as a web3 provider, which also interfered with event watchers that were connected to the node (i.e. events not caught; if the node fell behind and caught up, then events in the catching up were not caught by event watchers).
So far, my setup has been running pretty well, but my app does not have a massive amount of users. We are scaling within the next few months and so will be testing the limits of how many users can connect to the node fairly soon. If scalability is a problem, then I'm considering setting up multiple nodes and using a load balancer, if that ever becomes required.