Files
opnform-host-nginx/api/app/Http/Controllers/HealthCheckController.php
Julien Nahum ae21cae8cd Enhance Docker Configuration and Health Checks (#761)
* Enhance Docker Configuration and Health Checks

- Added PHP configuration settings in `docker-compose.dev.yml` and `docker-compose.yml` to improve memory management and execution limits, ensuring better performance for PHP applications.
- Introduced health checks for various services including `api`, `api-worker`, `api-scheduler`, `ui`, `redis`, and `db` to ensure service availability and reliability.
- Updated environment variables in `.env.docker` and `client/.env.docker` to include new keys for H-Captcha and reCAPTCHA, enhancing security features.
- Refactored the PHP-FPM entrypoint script to apply PHP configurations dynamically based on environment variables, improving flexibility in deployment.
- Removed outdated PHP configuration files to streamline the Docker setup.

These changes aim to enhance the overall stability, performance, and security of the application in a Dockerized environment.

* Refactor Dockerfile for Improved Build Process

- Changed the Dockerfile to utilize a multi-stage build approach, separating the build and runtime environments for better efficiency.
- Introduced a builder stage using the PHP CLI image to install dependencies and extensions, optimizing the final image size.
- Removed unnecessary installation steps and combined related commands to streamline the Dockerfile, enhancing readability and maintainability.
- Updated the runtime stage to use the PHP FPM Alpine image, ensuring a smaller and more secure production environment.

These changes aim to improve the build process, reduce image size, and enhance the overall performance of the Dockerized application.
2025-05-20 19:20:44 +02:00

54 lines
1.4 KiB
PHP

<?php
namespace App\Http\Controllers;
// Base controller
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Illuminate\Http\JsonResponse;
use Throwable;
class HealthCheckController extends Controller
{
public function apiCheck(): JsonResponse
{
// This controller action should only be reachable if config('app.self_hosted') is true
// due to the routing configuration.
$checks = [
'database' => false,
'redis' => false,
];
$overallStatus = true;
try {
DB::connection()->getPdo();
$checks['database'] = true;
} catch (Throwable $e) {
Log::error('Health check: Database connection failed', ['exception' => $e->getMessage()]);
$overallStatus = false;
}
try {
Redis::ping();
$checks['redis'] = true;
} catch (Throwable $e) {
Log::error('Health check: Redis connection failed', ['exception' => $e->getMessage()]);
$overallStatus = false;
}
if ($overallStatus) {
return response()->json([
'status' => 'ok',
'dependencies' => $checks,
]);
}
return response()->json([
'status' => 'error',
'dependencies' => $checks,
], 503);
}
}