feat(Production): Complete production deployment infrastructure

- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
This commit is contained in:
2025-10-25 19:18:37 +02:00
parent caa85db796
commit fc3d7e6357
83016 changed files with 378904 additions and 20919 deletions

View File

@@ -9,7 +9,6 @@ use App\Domain\Media\Image;
use App\Domain\Media\ImageRepository;
use App\Domain\Media\ImageResizer;
use App\Domain\Media\ImageVariantRepository;
use App\Domain\Media\SaveImageFile;
use App\Framework\Attributes\Route;
use App\Framework\Auth\Auth;
use App\Framework\Core\PathProvider;
@@ -17,9 +16,8 @@ use App\Framework\Http\Method;
use App\Framework\Http\Request;
use App\Framework\Http\Session\FormIdGenerator;
use App\Framework\Http\UploadedFile;
use App\Framework\Router\Result\ViewResult;
use App\Framework\Router\Result\JsonResult;
use App\Framework\Meta\MetaData;
use App\Framework\Router\Result\ViewResult;
use App\Framework\Ulid\StringConverter;
use App\Framework\Ulid\Ulid;
use App\Framework\View\FormBuilder;
@@ -50,7 +48,7 @@ final readonly class ShowImageUpload
$data = [
'title' => 'Bild-Upload',
'description' => 'Laden Sie neue Bilder in das System hoch.',
'formHtml' => RawHtml::from($formHtml)
'formHtml' => RawHtml::from($formHtml),
];
$finalData = $this->layoutProcessor->processLayoutFromArray($data);
@@ -71,7 +69,7 @@ final readonly class ShowImageUpload
/** @var UploadedFile $file */
$file = $request->files->get('image');
if (!$file || $file->error !== UPLOAD_ERR_OK) {
if (! $file || $file->error !== UPLOAD_ERR_OK) {
return $this->renderUploadError('Keine gültige Datei hochgeladen.');
}
@@ -145,7 +143,7 @@ final readonly class ShowImageUpload
'title' => 'Upload Fehler',
'description' => $message,
'error' => true,
'formHtml' => $this->buildUploadForm()
'formHtml' => $this->buildUploadForm(),
];
$finalData = $this->layoutProcessor->processLayoutFromArray($data);
@@ -163,7 +161,7 @@ final readonly class ShowImageUpload
'title' => $title,
'description' => $message,
'success' => true,
'formHtml' => $this->buildUploadForm()
'formHtml' => $this->buildUploadForm(),
];
$finalData = $this->layoutProcessor->processLayoutFromArray($data);
@@ -183,6 +181,7 @@ final readonly class ShowImageUpload
->addSubmitButton('Upload');
$formHtml = str_replace('<form', '<form enctype="multipart/form-data"', (string) $form);
return RawHtml::from($formHtml);
}
}