The number of replicas is up to you, there is not a default correct configuration. Having replicas you increase the performance of the queries (not always, but in general), as well as if you temporarily lose an Elasticsearch node, you will keep have all the results from your queries. Without replicas, in a node failure you could get all the results, some of them, or none of them, depending on which node your results come from
Also, if you lose a disk from a node, without replicas you lose the data that was on that disk, with replica, Elastic in most cases would recover everithing HOWEVER, REPLICAS IS NOT A BACKUP SYSTEM, snapshots are.
Having a replica takes exacly double the disk space.
Now that you have the data, it is up to you to decide
The recommended size for a shard (an index is one or more shards) is between 20-40 GB, as you will get 10-20 GB indices (shards) maybe you should create indices every two or three days, or do something to get shards as close to 40 GB as you can. Do not create shards that will get very low on disk, as you will be wasting RAM memory. Yo can also put data from some applications in the same index, not just one index per application.
Using Curator or ILM, there is not a best practice here, ILM is integrated with ILK and it has a graphical interface so it is easier to use, and it also does not depend on external scripts which could fail to be executed, again, it is up to you
VM Size, as I told you before, it depends on your data, the recommended is 1 GB of RAM for every 30 GB of disk space used for hot nodes, and the rule changes to 1 to 100 on warm nodes, HOWEVER, you must test as much as you can with data as close to real world data as you can and then you will see if you need more o less.
Never set more heap for Elasticsearch than half the system RAM.
If in the beginning you will get 3 nodes, use them all as all purpose nodes, master, ingest, etc...
As your cluster grows, you will be able to get hot nodes, warm nodes, master nodes, etc...
If you have not, take a big look at mappings documentation, it is one of the most important part of Elasticsearch.