coolify/app/Actions/Server/StartSentinel.php

58 lines
2.4 KiB
PHP
Raw Normal View History

2024-05-08 12:22:35 +00:00
<?php
namespace App\Actions\Server;
2024-10-14 10:07:37 +00:00
use App\Models\InstanceSettings;
2024-05-08 12:22:35 +00:00
use App\Models\Server;
2024-06-10 20:43:34 +00:00
use Lorisleiva\Actions\Concerns\AsAction;
2024-05-08 12:22:35 +00:00
class StartSentinel
{
use AsAction;
2024-06-10 20:43:34 +00:00
2024-10-14 19:05:33 +00:00
public function handle(Server $server, $version = 'next', bool $restart = false)
2024-05-08 12:22:35 +00:00
{
if ($restart) {
2024-06-18 14:42:42 +00:00
StopSentinel::run($server);
}
$metrics_history = data_get($server, 'settings.sentinel_metrics_history_days');
$refresh_rate = data_get($server, 'settings.sentinel_metrics_refresh_rate_seconds');
$push_interval = data_get($server, 'settings.sentinel_push_interval_seconds');
$token = data_get($server, 'settings.sentinel_token');
$endpoint = data_get($server, 'settings.sentinel_custom_url');
2024-10-15 11:39:19 +00:00
$mount_dir = '/data/coolify/sentinel';
$image = "ghcr.io/coollabsio/sentinel:$version";
if (! $endpoint) {
throw new \Exception('You should set FQDN in Instance Settings.');
2024-10-14 19:05:33 +00:00
}
2024-10-14 10:07:37 +00:00
$environments = [
'TOKEN' => $token,
2024-10-15 11:39:19 +00:00
'PUSH_ENDPOINT' => $endpoint,
'PUSH_INTERVAL_SECONDS' => $push_interval,
'COLLECTOR_ENABLED' => $server->isMetricsEnabled() ? 'true' : 'false',
2024-10-14 10:07:37 +00:00
'COLLECTOR_REFRESH_RATE_SECONDS' => $refresh_rate,
2024-10-14 19:05:33 +00:00
'COLLECTOR_RETENTION_PERIOD_DAYS' => $metrics_history,
2024-10-14 10:07:37 +00:00
];
2024-10-14 19:05:33 +00:00
if (isDev()) {
2024-10-15 11:39:19 +00:00
data_set($environments, 'DEBUG', 'true');
2024-10-14 19:05:33 +00:00
$mount_dir = '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/sentinel';
2024-10-15 11:39:19 +00:00
$image = 'sentinel';
2024-10-14 19:05:33 +00:00
}
2024-10-15 11:39:19 +00:00
$docker_environments = '-e "' . implode('" -e "', array_map(fn($key, $value) => "$key=$value", array_keys($environments), $environments)) . '"';
2024-10-14 19:05:33 +00:00
2024-10-15 11:39:19 +00:00
$docker_command = "docker run -d $docker_environments --name coolify-sentinel -v /var/run/docker.sock:/var/run/docker.sock -v $mount_dir:/app/db --pid host --health-cmd \"curl --fail http://127.0.0.1:8888/api/health || exit 1\" --health-interval 10s --health-retries 3 --add-host=host.docker.internal:host-gateway $image";
instant_remote_process([
2024-10-14 19:05:33 +00:00
'docker rm -f coolify-sentinel || true',
"mkdir -p $mount_dir",
$docker_command,
"chown -R 9999:root $mount_dir",
"chmod -R 700 $mount_dir",
2024-10-15 11:39:19 +00:00
], $server);
$server->settings->is_sentinel_enabled = true;
$server->settings->save();
$server->sentinelHeartbeat();
2024-05-08 12:22:35 +00:00
}
}