More or less my approach is if you couldn't build it in a data center with rented hardware, you shouldn't build it in the cloud if you want to avoid vendor lock-in.
This is easier said than done because everyone wants to use all the fancy pre-configured services. Which is fair, it can speed up your development a lot, just at the tradeoff of being locked in.
I could literally copy a folder running my container and be up and running on another provider.
The only other moving parts are nginx on the Ubuntu host proxying to it's own containers.