diff --git a/app/Livewire/Server/Form.php b/app/Livewire/Server/Form.php index 48c7c0ae7..dadf9033d 100644 --- a/app/Livewire/Server/Form.php +++ b/app/Livewire/Server/Form.php @@ -60,6 +60,7 @@ class Form extends Component 'server.settings.sentinel_metrics_history_days' => 'required|integer|min:1', 'server.settings.sentinel_push_interval_seconds' => 'required|integer|min:10', 'wildcard_domain' => 'nullable|url', + 'server.settings.sentinel_custom_url' => 'nullable|url', 'server.settings.is_sentinel_enabled' => 'required|boolean', 'server.settings.server_timezone' => 'required|string|timezone', 'server.settings.force_docker_cleanup' => 'required|boolean', @@ -88,6 +89,7 @@ class Form extends Component 'server.settings.sentinel_metrics_history_days' => 'Metrics History', 'server.settings.sentinel_push_interval_seconds' => 'Push Interval', 'server.settings.is_sentinel_enabled' => 'Server API', + 'server.settings.sentinel_custom_url' => 'Sentinel URL', 'server.settings.server_timezone' => 'Server Timezone', 'server.settings.delete_unused_volumes' => 'Delete Unused Volumes', 'server.settings.delete_unused_networks' => 'Delete Unused Networks', diff --git a/app/Models/Server.php b/app/Models/Server.php index aac3ddddf..5bcd5b9de 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -527,6 +527,22 @@ $schema://$host { Storage::disk('ssh-mux')->delete($this->muxFilename()); } + public function generateSentinelUrl() { + if ($this->isLocalhost()) { + return 'http://host.docker.internal:8888'; + } + $settings = InstanceSettings::get(); + if ($settings->fqdn) { + return $settings->fqdn; + } + if ($settings->ipv4) { + return $settings->ipv4 . ':8888'; + } + if ($settings->ipv6) { + return $settings->ipv6 . ':8888'; + } + return null; + } public function generateSentinelToken() { $data = [ diff --git a/database/migrations/2024_10_14_090416_update_metrics_token_in_server_settings.php b/database/migrations/2024_10_14_090416_update_metrics_token_in_server_settings.php index 051457600..737dfd5ee 100644 --- a/database/migrations/2024_10_14_090416_update_metrics_token_in_server_settings.php +++ b/database/migrations/2024_10_14_090416_update_metrics_token_in_server_settings.php @@ -22,6 +22,7 @@ return new class extends Migration $table->integer('sentinel_metrics_refresh_rate_seconds')->default(10); $table->integer('sentinel_metrics_history_days')->default(7); $table->integer('sentinel_push_interval_seconds')->default(60); + $table->string('sentinel_custom_url')->nullable(); }); Schema::table('servers', function (Blueprint $table) { $table->dateTime('sentinel_updated_at')->default(now()); @@ -39,11 +40,12 @@ return new class extends Migration $table->integer('metrics_history_days')->default(30); $table->boolean('is_server_api_enabled')->default(false); + $table->dropColumn('is_sentinel_enabled'); $table->dropColumn('sentinel_token'); $table->dropColumn('sentinel_metrics_refresh_rate_seconds'); $table->dropColumn('sentinel_metrics_history_days'); $table->dropColumn('sentinel_push_interval_seconds'); - $table->dropColumn('is_sentinel_enabled'); + $table->dropColumn('sentinel_custom_url'); }); Schema::table('servers', function (Blueprint $table) { $table->dropColumn('sentinel_updated_at'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1888f0440..cec05c8fe 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -26,7 +26,7 @@ class DatabaseSeeder extends Seeder S3StorageSeeder::class, StandalonePostgresqlSeeder::class, OauthSettingSeeder::class, - GenerateSentinelTokenSeeder::class, + SentinelSeeder::class, ]); } } diff --git a/database/seeders/ProductionSeeder.php b/database/seeders/ProductionSeeder.php index a1a025e8d..90b9d46ff 100644 --- a/database/seeders/ProductionSeeder.php +++ b/database/seeders/ProductionSeeder.php @@ -186,7 +186,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== $this->call(OauthSettingSeeder::class); $this->call(PopulateSshKeysDirectorySeeder::class); - $this->call(GenerateSentinelTokenSeeder::class); + $this->call(SentinelSeeder::class); } } diff --git a/database/seeders/GenerateSentinelTokenSeeder.php b/database/seeders/SentinelSeeder.php similarity index 56% rename from database/seeders/GenerateSentinelTokenSeeder.php rename to database/seeders/SentinelSeeder.php index d915f7259..3f719cf6e 100644 --- a/database/seeders/GenerateSentinelTokenSeeder.php +++ b/database/seeders/SentinelSeeder.php @@ -5,7 +5,7 @@ namespace Database\Seeders; use App\Models\Server; use Illuminate\Database\Seeder; -class GenerateSentinelTokenSeeder extends Seeder +class SentinelSeeder extends Seeder { public function run() { @@ -15,6 +15,12 @@ class GenerateSentinelTokenSeeder extends Seeder if (str($server->settings->sentinel_token)->isEmpty()) { $server->generateSentinelToken(); } + if (str($server->settings->sentinel_custom_url)->isEmpty()) { + $url = $server->generateSentinelUrl(); + logger()->info("Setting sentinel custom url for server {$server->id} to {$url}"); + $server->settings->sentinel_custom_url = $url; + $server->settings->save(); + } } }); } catch (\Throwable $e) { diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index f05ec0dc4..43d982b6c 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -305,6 +305,9 @@