The way I've done this is to use planettiler to generate vector tiles for the whole world and then pack that into a squashfs archive. That way I don't need an additional program to serve them, and I can regenerate the whole archive every couple of months or so (I don't need the latest data).