diff --git a/app/Actions/Server/StartSentinel.php b/app/Actions/Server/StartSentinel.php
index 4b45d0738..a52fb4125 100644
--- a/app/Actions/Server/StartSentinel.php
+++ b/app/Actions/Server/StartSentinel.php
@@ -10,32 +10,48 @@ class StartSentinel
{
use AsAction;
- public function handle(Server $server, $version = 'latest', bool $restart = false)
+ public function handle(Server $server, $version = 'next', bool $restart = false)
{
if ($restart) {
StopSentinel::run($server);
}
- $metrics_history = $server->settings->metrics_history_days;
- $refresh_rate = $server->settings->metrics_refresh_rate_seconds;
+ $metrics_history = $server->settings->sentinel_metrics_history_days;
+ $refresh_rate = $server->settings->sentinel_metrics_refresh_rate_seconds;
$token = $server->settings->sentinel_token;
- $fqdn = InstanceSettings::get()->fqdn;
- if (str($fqdn)->startsWith('http')) {
- throw new \Exception('You should use https to run Sentinel.');
+ $endpoint = InstanceSettings::get()->fqdn;
+ if (isDev()) {
+ $endpoint = 'http://host.docker.internal:8000';
+ } else {
+ if (str($endpoint)->startsWith('http')) {
+ throw new \Exception('You should use https to run Sentinel.');
+ }
+ }
+ if (! $endpoint) {
+ throw new \Exception('You should set FQDN in Instance Settings.');
}
$environments = [
'TOKEN' => $token,
- 'ENDPOINT' => InstanceSettings::get()->fqdn,
+ 'ENDPOINT' => $endpoint,
'COLLECTOR_ENABLED' => 'true',
'COLLECTOR_REFRESH_RATE_SECONDS' => $refresh_rate,
- 'COLLECTOR_RETENTION_PERIOD_DAYS' => $metrics_history
+ 'COLLECTOR_RETENTION_PERIOD_DAYS' => $metrics_history,
];
- $docker_environments = "-e \"" . implode("\" -e \"", array_map(fn($key, $value) => "$key=$value", array_keys($environments), $environments)) . "\"";
- ray($docker_environments);
- return true;
- // instant_remote_process([
- // "docker run --rm --pull always -d $docker_environments --name coolify-sentinel -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify/sentinel:/app/sentinel --pid host --health-cmd \"curl --fail http://127.0.0.1:8888/api/health || exit 1\" --health-interval 10s --health-retries 3 ghcr.io/coollabsio/sentinel:$version",
- // 'chown -R 9999:root /data/coolify/sentinel',
- // 'chmod -R 700 /data/coolify/sentinel',
- // ], $server, true);
+ if (isDev()) {
+ data_set($environments, 'GIN_MODE', 'debug');
+ }
+ $mount_dir = '/data/coolify/sentinel';
+ if (isDev()) {
+ $mount_dir = '/var/lib/docker/volumes/coolify_dev_coolify_data/_data/sentinel';
+ }
+ $docker_environments = '-e "'.implode('" -e "', array_map(fn ($key, $value) => "$key=$value", array_keys($environments), $environments)).'"';
+ $docker_command = "docker run --pull always --rm -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 ghcr.io/coollabsio/sentinel:$version";
+
+ return instant_remote_process([
+ 'docker rm -f coolify-sentinel || true',
+ "mkdir -p $mount_dir",
+ $docker_command,
+ "chown -R 9999:root $mount_dir",
+ "chmod -R 700 $mount_dir",
+ ], $server, true);
}
}
diff --git a/app/Livewire/Server/Form.php b/app/Livewire/Server/Form.php
index 6efff504b..0bb7e4742 100644
--- a/app/Livewire/Server/Form.php
+++ b/app/Livewire/Server/Form.php
@@ -101,7 +101,9 @@ class Form extends Component
$this->server->settings->delete_unused_volumes = $server->settings->delete_unused_volumes;
$this->server->settings->delete_unused_networks = $server->settings->delete_unused_networks;
}
- public function regenerateSentinelToken() {
+
+ public function regenerateSentinelToken()
+ {
try {
$this->server->generateSentinelToken();
$this->server->settings->refresh();
@@ -110,6 +112,7 @@ class Form extends Component
return handleError($e, $this);
}
}
+
public function updated($field)
{
if ($field === 'server.settings.docker_cleanup_frequency') {
@@ -186,25 +189,26 @@ class Form extends Component
public function getPushData()
{
try {
- if (!isDev()) {
+ if (! isDev()) {
throw new \Exception('This feature is only available in dev mode.');
}
$response = Http::withHeaders([
- 'Authorization' => 'Bearer ' . $this->server->settings->sentinel_token,
+ 'Authorization' => 'Bearer '.$this->server->settings->sentinel_token,
])->post('http://host.docker.internal:8888/api/push', [
'data' => 'test',
]);
if ($response->successful()) {
$this->dispatch('success', 'Push data sent.');
+
return;
}
$error = data_get($response->json(), 'error');
throw new \Exception($error);
-
- } catch(\Throwable $e) {
+ } catch (\Throwable $e) {
return handleError($e, $this);
}
}
+
public function restartSentinel()
{
try {
@@ -285,6 +289,7 @@ class Form extends Component
return handleError($e, $this);
}
}
+
public function manualCleanup()
{
try {
@@ -302,4 +307,10 @@ class Form extends Component
$this->server->refresh();
$this->dispatch('success', 'Cloudflare Tunnels enabled.');
}
+
+ public function startSentinel()
+ {
+ StartSentinel::run($this->server);
+ $this->dispatch('success', 'Sentinel started.');
+ }
}
diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php
index ace297712..47b686c1e 100644
--- a/resources/views/livewire/server/form.blade.php
+++ b/resources/views/livewire/server/form.blade.php
@@ -282,11 +282,10 @@
{{-- @endif --}}
@if (isDev())
-