How can you have Composer install the site in the project root not in web/?
If the server you are using uses public_html as document root, and not web as drupal/recommended-project expects, you need to follow what reported in Using Composer to Install Drupal and Manage Dependencies.


  If you want to modify some of the properties of the downloaded composer.json before composer install is executed, use the --no-install flag when running composer create-project. For example, it is possible that you want to rename the subdirectory 'web' to something else.  
  
  To do that:
  
  
  Run composer create-project drupal/recommended-project my_site_name_dir --no-interaction --no-install
  Change directories to my_site_name_dir and edit the composer.json file to suit your needs
  Run composer install to download Drupal 8 and all its dependencies.