I do run a pretty similar setup for some projects, and in general I tend to agree with the author, especially when bootstrapping cloud services can cost quite some bucks for mediocre performance.
There is, however, one big disadvantage one should be aware of, and that is downtime. There will be downtime when you
* push a new version of your project
* install package updates for docker, postgres, ...
* install a new kernel and need to reboot
* need to upgrade the base OS because you can't stay on Ubuntu 16.04 for the next 10 years (this one can take hours)
Of course there are projects which can live with that. If your target audience is 9-5 office workers, some downtime at night might be acceptable. At least if you don't have customers in other timezones.
IMHO, the sweet spot would be to have two identical servers with automatic failover, but I did not find a good solution for that yet. Would be very interested if someone here has a solution for that and is willing to share.
AFAIK all the well-known proxies/load balancer support automatic failure in one way or another - Caddy, Nginx, Traefik, HAProxy.
I prefer Caddy myself, for it's simplicity. On load balancing, it can detect when an upstream server isn't working, and remove it from the list of upstream until it's working again. Sometimes you want control of this, for example for OS updates - Caddy has an admin API you can use to remove a server from upstreams and wait until all connections are drained, then you can perform the updates and add the server back again. Then do the same for other upstream servers.
(I haven't actually used the Caddy admin API in production yet, but plan to soon).
There is, however, one big disadvantage one should be aware of, and that is downtime. There will be downtime when you
* push a new version of your project
* install package updates for docker, postgres, ...
* install a new kernel and need to reboot
* need to upgrade the base OS because you can't stay on Ubuntu 16.04 for the next 10 years (this one can take hours)
Of course there are projects which can live with that. If your target audience is 9-5 office workers, some downtime at night might be acceptable. At least if you don't have customers in other timezones.
IMHO, the sweet spot would be to have two identical servers with automatic failover, but I did not find a good solution for that yet. Would be very interested if someone here has a solution for that and is willing to share.