Files uploaded via custom configuration form are eventually lost
The trigger is the 'status' property of the file. It defaults to temporary, and Drupal clears out temporary managed files on a cron run.

To fix, add this to your form's submit method:

$fid = $form_state-&gt;getValue('homepage_image')[0];
$file = \Drupal\file\Entity\File::load($fid);
$file-&gt;setPermanent();
$file-&gt;save();