Hello,
yes, each strategy has its strengths and weaknesses, but personally, for production I would pick the first one. I’ll explain why.
By separating each part you make it easier to maintain and scale everything.
Strapi backend
Strapi itself needs to be hosted on a droplet (or maybe they have a Strapi app in their App Platform), there is not much you can do. If you need to scale, you will have a momentary downtime while you switch the droplets, but I think you should be able to use the same volume, so you’ll just change instance type and after restart you should be fine.
Database
For database you’re better of using managed database, they are a bit more expensive but you get automatic scaling, automatic backups and bunch of more stuff. You can then just use database URL that is given to you by DigitalOcean by putting it into .env file in your Strapi project. Ideally, for lowest latency, you would pick same region for your Strapi droplet and managed database.
Storage
DigitalOcean also provides S3-compatible storage, so whether you choose AWS, DigitalOcean, Scaleway or anything else, it doesn’t matter. You will need to install the @strapi/provider-upload-aws-s3 plugin to add support for the S3 storage into Strapi. You’ve probably already done this.
Frontend
Vercel is a great choice since they provide great caching and they deploy your app globally to multiple regions, so you should get great performance. And they of course automatically scale based on your usage.
Disclaimer: I’m a primarily a React Native developer, I’ve been programming for 7 years, but I don’t have any hands-on experience with production deployment of Strapi. I just read and watch a lot of stuff and this is how I would do things if I was building a project. Please if anyone has more experience feel free to correct me, I love to learn!