the storage requirements can get pretty beefy over time though, so make sure to set up cheap block storage.
I host my own that I've split into three layers, web front, app and db.
The web front only runs nginx and terminates tls. I tried building assets on it to serve static assets but gave up after a few upgrades and issues.
Web front only has 1G total RAM and right now has 595M available for IO buffering.
The app layer can sometimes run out of RAM when upgrading because of asset compiling. Perhaps this has gotten better with time. It has a total of 6G RAM and at present has 3.4G available for IO buffering. The only reason it has 6G total is likely because of upgrades causing OOM when compiling assets.
I put all media on S3 and that is up to around 35G in size after 1 year of operation and 50 some users. Probably much less active users. The database uses 4.3G.