I would suggest using GMSH, which DOLFINx has an interface to, see for instance
https://docs.fenicsproject.org/dolfinx/main/python/demos/demo_gmsh.html
https://jsdokken.com/dolfinx-tutorial/chapter2/ns_code2.html
http://jsdokken.com/FEniCS23-tutorial/src/mesh_generation.html
https://jsdokken.com/dolfinx-tutorial/chapter3/subdomains.html