The number of total users you can host on a server depends on their usage. If they connect every few days at different times, you will be able to handle a lot more total users than if they all come in at the same time for an exam. The type and size of content that you are serving can influence this too - huge courses, or courses with a lot of dynamic content can negatively affect performance.
A more reliable indicator is more the number of concurrent users that an instance can support. And for this you can refer to the following post from @nedbat, which gave rough guidelines on this - the limiting factor is RAM, and you will support on average 75 users per GB of RAM:
An LMS worker will support about 75 simultaneous active users. To be on the safe side, give each LMS worker 1Gb of RAM. When choosing an AWS instance model, RAM will be the bottleneck, not CPU. Use your active simultaneous user estimate to decide how many workers you need. Choose an AWS instance model: m2.2xlarge is a good choice. Divide the number of workers by the amount of RAM (30Gb for m2.2xlarge) to determine the number of instances you need.
For the setup of a proper production instance of Open edX, we had drafted a guide a few releases ago (for Ficus) - it’s a bit rough, and some of the operations might differ on the more recent versions, but that can give you an idea of the steps involved to have a setup that can be scaled (there will be other operations as you ramp up load, but that provides a good base):
We (OpenCraft) can help with this if you want - we manage several large Open edX installations.