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

@@ -4,10 +4,9 @@ declare(strict_types=1);
namespace App\Infrastructure\GeoIp;
use PDO;
use RuntimeException;
use App\Framework\Database\ConnectionInterface;
use App\Framework\Database\ValueObjects\SqlQuery;
use RuntimeException;
final class CountryDataService
{

View File

@@ -4,9 +4,9 @@ declare(strict_types=1);
namespace App\Infrastructure\GeoIp;
use App\Framework\Http\IpAddress;
use App\Framework\Database\PdoConnection;
use App\Framework\Core\ValueObjects\CountryCode;
use App\Framework\Database\PdoConnection;
use App\Framework\Http\IpAddress;
use PDO;
final class GeoIp

View File

@@ -4,11 +4,10 @@ declare(strict_types=1);
namespace App\Infrastructure\GeoIp;
use Generator;
use PDO;
use RuntimeException;
use App\Framework\Database\ConnectionInterface;
use App\Framework\Database\ValueObjects\SqlQuery;
use Generator;
use RuntimeException;
final class IpRangeService
{

View File

@@ -24,7 +24,7 @@ final readonly class SpotifyCredentials
throw new \InvalidArgumentException('Spotify Client Secret cannot be empty');
}
if (empty($this->redirectUri) || !filter_var($this->redirectUri, FILTER_VALIDATE_URL)) {
if (empty($this->redirectUri) || ! filter_var($this->redirectUri, FILTER_VALIDATE_URL)) {
throw new \InvalidArgumentException('Spotify Redirect URI must be a valid URL');
}
}