Creating a product page with a template file
You should start off with copying the template from the Commerce module /modules/contrib/commerce/modules/product/templates/commerce-product.html.twig:

{#
/**
 * @file
 *
 * Default product template.
 *
 * Available variables:
 * - attributes: HTML attributes for the wrapper.
 * - product: The rendered product fields.
 *   Use 'product' to print them all, or print a subset such as
 *   'product.title'. Use the following code to exclude the
 *   printing of a given field:
 *   @code
 *   {{ product|without('title') }}
 *   @endcode
 * - product_entity: The product entity.
 * - product_url: The product URL.
 *
 * @ingroup themeable
 */
#}
&lt;article{{ attributes }}&gt;
  {{- product|without('variation_attributes') -}}
&lt;/article&gt;


You can then adjust the display according to your custom fields, so something like:

&lt;article{{ attributes.addClass('product') }}&gt;
  {{ product.field_header }}

  &lt;div class="body"&gt;
      {{ product.body }}
  &lt;div&gt;
  {{- product|without('field_header','body') -}}
&lt;/article&gt;