Guter Punkt mit der Datenbank, das mache ich auch so.
NPM hatte ich mir schon mal angeschaut, ich fand es damals aber etwas unpraktisch, dass ich zusätzlich zu einem docker-compose Stack noch in einer WebUI Dinge für die Erreichbarkeit der Webservices konfigurieren muss. Beim Nginx Proxy mit LE muss ich nur die passenden Umgebungsvariablen in meiner docker-compose.yml haben und alles andere passiert automatisch.
Kenne aber auch Leute, die NPM in der Praxis benutzen und sehr happy damit sind :-).
Dann ist Traefik vielleicht eher was für dich. Bei Traefik kannst du auch alles mit Labels in den jeweiligen Container einrichten.