From edb06fa2332aba7abf52019fa1f068ff013a3595 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Sep 2023 10:06:35 +0200 Subject: [PATCH 1/9] version++ --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index bc82840f5..ad788a56e 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.40', + 'release' => '4.0.0-beta.41', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index 5e04a22e3..9d505bcb9 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Mon, 18 Sep 2023 10:41:06 +0200 Subject: [PATCH 2/9] fix: do not remove localhost in boarding --- app/Http/Livewire/Boarding/Index.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/app/Http/Livewire/Boarding/Index.php b/app/Http/Livewire/Boarding/Index.php index dace2eb94..024d1cf44 100644 --- a/app/Http/Livewire/Boarding/Index.php +++ b/app/Http/Livewire/Boarding/Index.php @@ -15,6 +15,7 @@ class Index extends Component { public string $currentState = 'welcome'; + public ?string $selectedServerType = null; public ?Collection $privateKeys = null; public ?int $selectedExistingPrivateKey = null; public ?string $privateKeyType = null; @@ -64,11 +65,13 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== public function restartBoarding() { - if ($this->createdServer) { - $this->createdServer->delete(); - } - if ($this->createdPrivateKey) { - $this->createdPrivateKey->delete(); + if ($this->selectedServerType !== 'localhost') { + if ($this->createdServer) { + $this->createdServer->delete(); + } + if ($this->createdPrivateKey) { + $this->createdPrivateKey->delete(); + } } return redirect()->route('boarding'); } @@ -84,13 +87,14 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== public function setServerType(string $type) { - if ($type === 'localhost') { + $this->selectedServerType = $type; + if ($this->selectedServerType === 'localhost') { $this->createdServer = Server::find(0); if (!$this->createdServer) { return $this->emit('error', 'Localhost server is not found. Something went wrong during installation. Please try to reinstall or contact support.'); } return $this->validateServer('localhost'); - } elseif ($type === 'remote') { + } elseif ($this->selectedServerType === 'remote') { $this->privateKeys = PrivateKey::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get(); if ($this->privateKeys->count() > 0) { $this->selectedExistingPrivateKey = $this->privateKeys->first()->id; @@ -156,7 +160,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== { $this->validate([ 'remoteServerName' => 'required', - 'remoteServerHost' => 'required|ip', + 'remoteServerHost' => 'required', 'remoteServerPort' => 'required|integer', 'remoteServerUser' => 'required', ]); From a386a1bde5448e07afa3032a2caa4edd9bbb1bd6 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Sep 2023 10:41:19 +0200 Subject: [PATCH 3/9] fix: allow non ip address (DNS) --- app/Http/Livewire/Server/New/ByIp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Livewire/Server/New/ByIp.php b/app/Http/Livewire/Server/New/ByIp.php index f08b2ddb8..7814aef8f 100644 --- a/app/Http/Livewire/Server/New/ByIp.php +++ b/app/Http/Livewire/Server/New/ByIp.php @@ -26,7 +26,7 @@ class ByIp extends Component protected $rules = [ 'name' => 'required|string', 'description' => 'nullable|string', - 'ip' => 'required|ip', + 'ip' => 'required', 'user' => 'required|string', 'port' => 'required|integer', ]; From efa7cab3e29a6c3ff761908f1b19dd08e02ba5a2 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Sep 2023 10:44:32 +0200 Subject: [PATCH 4/9] fix: installDocker id not found --- app/Actions/Server/InstallDocker.php | 4 ++-- app/Http/Livewire/Boarding/Index.php | 2 +- app/Http/Livewire/Server/Form.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Actions/Server/InstallDocker.php b/app/Actions/Server/InstallDocker.php index 49ea85c6b..2ddda94a8 100644 --- a/app/Actions/Server/InstallDocker.php +++ b/app/Actions/Server/InstallDocker.php @@ -8,7 +8,7 @@ use App\Models\Team; class InstallDocker { - public function __invoke(Server $server, Team $team) + public function __invoke(Server $server) { $dockerVersion = '24.0'; $config = base64_encode('{ @@ -19,7 +19,7 @@ class InstallDocker } }'); $found = StandaloneDocker::where('server_id', $server->id); - if ($found->count() == 0) { + if ($found->count() == 0 && $server->id) { StandaloneDocker::create([ 'name' => 'coolify', 'network' => 'coolify', diff --git a/app/Http/Livewire/Boarding/Index.php b/app/Http/Livewire/Boarding/Index.php index 024d1cf44..dcf7623d0 100644 --- a/app/Http/Livewire/Boarding/Index.php +++ b/app/Http/Livewire/Boarding/Index.php @@ -232,7 +232,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== } public function installDocker() { - $activity = resolve(InstallDocker::class)($this->createdServer, currentTeam()); + $activity = resolve(InstallDocker::class)($this->createdServer); $this->emit('newMonitorActivity', $activity->id); $this->currentState = 'select-proxy'; } diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index 56cec63da..cdb00c0a2 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -44,7 +44,7 @@ class Form extends Component public function installDocker() { - $activity = resolve(InstallDocker::class)($this->server, currentTeam()); + $activity = resolve(InstallDocker::class)($this->server); $this->emit('newMonitorActivity', $activity->id); } From df433efe6210b6f30284ff08a5100e479ed34ffa Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Sep 2023 11:21:10 +0200 Subject: [PATCH 5/9] fix: boarding --- app/Actions/Server/InstallDocker.php | 18 ++-- app/Http/Livewire/Boarding/Index.php | 100 ++++++++---------- resources/views/layouts/boarding.blade.php | 22 ++-- .../views/livewire/boarding/index.blade.php | 26 ++--- 4 files changed, 82 insertions(+), 84 deletions(-) diff --git a/app/Actions/Server/InstallDocker.php b/app/Actions/Server/InstallDocker.php index 2ddda94a8..39d0718db 100644 --- a/app/Actions/Server/InstallDocker.php +++ b/app/Actions/Server/InstallDocker.php @@ -4,11 +4,10 @@ namespace App\Actions\Server; use App\Models\Server; use App\Models\StandaloneDocker; -use App\Models\Team; class InstallDocker { - public function __invoke(Server $server) + public function __invoke(Server $server, bool $instant = false) { $dockerVersion = '24.0'; $config = base64_encode('{ @@ -26,8 +25,9 @@ class InstallDocker 'server_id' => $server->id, ]); } - if (isDev()) { - return remote_process([ + + if (isDev() && $server->id === 0) { + $command = [ "echo '####### Installing Prerequisites...'", "sleep 1", "echo '####### Installing/updating Docker Engine...'", @@ -35,9 +35,9 @@ class InstallDocker "sleep 4", "echo '####### Restarting Docker Engine...'", "ls -l /tmp" - ], $server); + ]; } else { - return remote_process([ + $command = [ "echo '####### Installing Prerequisites...'", "command -v jq >/dev/null || apt-get update", "command -v jq >/dev/null || apt install -y jq", @@ -53,7 +53,11 @@ class InstallDocker "echo '####### Creating default Docker network (coolify)...'", "docker network create --attachable coolify >/dev/null 2>&1 || true", "echo '####### Done!'" - ], $server); + ]; } + if ($instant) { + return instant_remote_process($command, $server); + } + return remote_process($command, $server); } } diff --git a/app/Http/Livewire/Boarding/Index.php b/app/Http/Livewire/Boarding/Index.php index dcf7623d0..bc15c5579 100644 --- a/app/Http/Livewire/Boarding/Index.php +++ b/app/Http/Livewire/Boarding/Index.php @@ -38,6 +38,7 @@ class Index extends Component public ?int $selectedExistingProject = null; public ?Project $createdProject = null; + public bool $dockerInstallationStarted = false; public function mount() { $this->privateKeyName = generate_random_name(); @@ -65,14 +66,14 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== public function restartBoarding() { - if ($this->selectedServerType !== 'localhost') { - if ($this->createdServer) { - $this->createdServer->delete(); - } - if ($this->createdPrivateKey) { - $this->createdPrivateKey->delete(); - } - } + // if ($this->selectedServerType !== 'localhost') { + // if ($this->createdServer) { + // $this->createdServer->delete(); + // } + // if ($this->createdPrivateKey) { + // $this->createdPrivateKey->delete(); + // } + // } return redirect()->route('boarding'); } public function skipBoarding() @@ -118,8 +119,6 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== } $this->selectedExistingPrivateKey = $this->createdServer->privateKey->id; $this->validateServer(); - $this->getProxyType(); - $this->getProjects(); } public function getProxyType() { @@ -132,6 +131,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== } public function selectExistingPrivateKey() { + $this->createdPrivateKey = PrivateKey::find($this->selectedExistingPrivateKey); $this->currentState = 'create-server'; } public function createNewServer() @@ -154,6 +154,13 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== 'privateKeyName' => 'required', 'privateKey' => 'required', ]); + $this->createdPrivateKey = PrivateKey::create([ + 'name' => $this->privateKeyName, + 'description' => $this->privateKeyDescription, + 'private_key' => $this->privateKey, + 'team_id' => currentTeam()->id + ]); + $this->createdPrivateKey->save(); $this->currentState = 'create-server'; } public function saveServer() @@ -165,28 +172,20 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== 'remoteServerUser' => 'required', ]); $this->privateKey = formatPrivateKey($this->privateKey); - $this->createdPrivateKey = new PrivateKey(); - $this->createdPrivateKey->private_key = $this->privateKey; - $this->createdPrivateKey->name = $this->privateKeyName; - $this->createdPrivateKey->description = $this->privateKeyDescription; - $this->createdPrivateKey->team_id = currentTeam()->id; $foundServer = Server::whereIp($this->remoteServerHost)->first(); if ($foundServer) { return $this->emit('error', 'IP address is already in use by another team.'); } - $this->createdServer = new Server(); - $this->createdServer->uuid = (string)new Cuid2(7); - $this->createdServer->name = $this->remoteServerName; - $this->createdServer->ip = $this->remoteServerHost; - $this->createdServer->port = $this->remoteServerPort; - $this->createdServer->user = $this->remoteServerUser; - $this->createdServer->description = $this->remoteServerDescription; - $this->createdServer->privateKey = $this->createdPrivateKey; - $this->createdServer->team_id = currentTeam()->id; - - ray($this->createdServer); - - + $this->createdServer = Server::create([ + 'name' => $this->remoteServerName, + 'ip' => $this->remoteServerHost, + 'port' => $this->remoteServerPort, + 'user' => $this->remoteServerUser, + 'description' => $this->remoteServerDescription, + 'private_key_id' => $this->createdPrivateKey->id, + 'team_id' => currentTeam()->id, + ]); + $this->createdServer->save(); $this->validateServer(); } public function validateServer(?string $type = null) @@ -194,47 +193,36 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== try { $customErrorMessage = "Server is not reachable:"; config()->set('coolify.mux_enabled', false); + instant_remote_process(['uptime'], $this->createdServer, true); + + $this->createdServer->settings->update([ + 'is_reachable' => true, + ]); + $dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $this->createdServer, true); $dockerVersion = checkMinimumDockerEngineVersion($dockerVersion); if (is_null($dockerVersion)) { - throw new \Exception('No Docker Engine or older than 23 version installed.'); + $this->currentState = 'install-docker'; + throw new \Exception('Docker version is not supported or not installed.'); } - $customErrorMessage = "Cannot create Server or Private Key. Please try again."; - if ($type !== 'localhost') { - $createdPrivateKey = PrivateKey::create([ - 'name' => $this->privateKeyName, - 'description' => $this->privateKeyDescription, - 'private_key' => $this->privateKey, - 'team_id' => currentTeam()->id - ]); - $server = Server::create([ - 'name' => $this->remoteServerName, - 'ip' => $this->remoteServerHost, - 'port' => $this->remoteServerPort, - 'user' => $this->remoteServerUser, - 'description' => $this->remoteServerDescription, - 'private_key_id' => $createdPrivateKey->id, - 'team_id' => currentTeam()->id, - ]); - $server->settings->is_reachable = true; - $server->settings->is_usable = true; - $server->settings->save(); - } else { - $this->createdServer->settings->update([ - 'is_reachable' => true, - ]); - } - $this->getProxyType(); + $this->dockerInstalledOrSkipped(); } catch (\Throwable $e) { return handleError(error: $e, customErrorMessage: $customErrorMessage, livewire: $this); } } public function installDocker() { + $this->dockerInstallationStarted = true; $activity = resolve(InstallDocker::class)($this->createdServer); $this->emit('newMonitorActivity', $activity->id); - $this->currentState = 'select-proxy'; + } + public function dockerInstalledOrSkipped() + { + $this->createdServer->settings->update([ + 'is_usable' => true, + ]); + $this->getProxyType(); } public function selectProxy(string|null $proxyType = null) { diff --git a/resources/views/layouts/boarding.blade.php b/resources/views/layouts/boarding.blade.php index a63d26a41..39b1ae252 100644 --- a/resources/views/layouts/boarding.blade.php +++ b/resources/views/layouts/boarding.blade.php @@ -1,9 +1,19 @@ @extends('layouts.base') @section('body') -
-
- {{ $slot }} -
-
-@parent +
+
+ + + + + + + Close + + + + {{ $slot }} +
+
+ @parent @endsection diff --git a/resources/views/livewire/boarding/index.blade.php b/resources/views/livewire/boarding/index.blade.php index 45a11c4bd..8cd3034eb 100644 --- a/resources/views/livewire/boarding/index.blade.php +++ b/resources/views/livewire/boarding/index.blade.php @@ -23,9 +23,12 @@ -

You do not to manage your servers too much. Coolify do it for you.

-

All configurations are stored on your server, so everything works without Coolify (except integrations and automations).

-

You will get notified on your favourite platform (Discord, Telegram, Email, etc.) when something goes wrong, or an action needed from your side.

+

You do not to manage your servers too much. Coolify do + it for you.

+

All configurations are stored on your server, so + everything works without Coolify (except integrations and automations).

+

You will get notified on your favourite platform (Discord, + Telegram, Email, etc.) when something goes wrong, or an action needed from your side.

Next @@ -194,16 +197,6 @@
@if ($currentState === 'install-docker') - - - - - - - Close - - - Could not find Docker Engine on your server. Do you want me to install it for you? @@ -211,8 +204,11 @@ - Let's do - it! + Let's do it! + @if ($dockerInstallationStarted) + + Next + @endif

This will install the latest Docker Engine on your server, configure a few things to be able From 96469691075078243da20df0476053fdfb3e4669 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Sep 2023 11:49:26 +0200 Subject: [PATCH 6/9] fix: errors --- app/Http/Livewire/Server/Form.php | 5 ++++ app/Http/Livewire/Server/Proxy/Status.php | 5 ++-- app/Http/Livewire/Server/ShowPrivateKey.php | 13 ++++++++++ app/Jobs/ContainerStatusJob.php | 6 ++++- bootstrap/helpers/remoteProcess.php | 25 +++++++++++++++---- .../views/components/server/navbar.blade.php | 2 +- .../views/livewire/server/form.blade.php | 14 ++++++++--- .../livewire/server/proxy/status.blade.php | 4 +-- 8 files changed, 58 insertions(+), 16 deletions(-) diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index cdb00c0a2..9794610fe 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -15,6 +15,7 @@ class Form extends Component public $dockerVersion; public string|null $wildcard_domain = null; public int $cleanup_after_percentage; + public bool $dockerInstallationStarted = false; protected $rules = [ 'server.name' => 'required|min:6', @@ -44,6 +45,7 @@ class Form extends Component public function installDocker() { + $this->dockerInstallationStarted = true; $activity = resolve(InstallDocker::class)($this->server); $this->emit('newMonitorActivity', $activity->id); } @@ -56,7 +58,10 @@ class Form extends Component $this->uptime = $uptime; $this->emit('success', 'Server is reachable.'); } else { + ray($this->uptime); + $this->emit('error', 'Server is not reachable.'); + return; } if ($dockerVersion) { diff --git a/app/Http/Livewire/Server/Proxy/Status.php b/app/Http/Livewire/Server/Proxy/Status.php index f808fdb81..061728049 100644 --- a/app/Http/Livewire/Server/Proxy/Status.php +++ b/app/Http/Livewire/Server/Proxy/Status.php @@ -2,6 +2,7 @@ namespace App\Http\Livewire\Server\Proxy; +use App\Jobs\ContainerStatusJob; use App\Models\Server; use Livewire\Component; @@ -18,9 +19,7 @@ class Status extends Component { try { if ($this->server->isFunctional()) { - $container = getContainerStatus(server: $this->server, container_id: 'coolify-proxy'); - $this->server->proxy->status = $container; - $this->server->save(); + dispatch_sync(new ContainerStatusJob($this->server)); $this->emit('proxyStatusUpdated'); } } catch (\Throwable $e) { diff --git a/app/Http/Livewire/Server/ShowPrivateKey.php b/app/Http/Livewire/Server/ShowPrivateKey.php index c9054f7df..a0aa6e1e2 100644 --- a/app/Http/Livewire/Server/ShowPrivateKey.php +++ b/app/Http/Livewire/Server/ShowPrivateKey.php @@ -37,14 +37,27 @@ class ShowPrivateKey extends Component try { ['uptime' => $uptime, 'dockerVersion' => $dockerVersion] = validateServer($this->server, true); if ($uptime) { + $this->server->settings->update([ + 'is_reachable' => true + ]); $this->emit('success', 'Server is reachable with this private key.'); } else { + $this->server->settings->update([ + 'is_reachable' => false, + 'is_usable' => false + ]); $this->emit('error', 'Server is not reachable with this private key.'); return; } if ($dockerVersion) { + $this->server->settings->update([ + 'is_usable' => true + ]); $this->emit('success', 'Server is usable for Coolify.'); } else { + $this->server->settings->update([ + 'is_usable' => false + ]); $this->emit('error', 'Old (lower than 23) or no Docker version detected. Install Docker Engine on the General tab.'); } } catch (\Throwable $e) { diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index 6d5feb5ce..1cfcdd18a 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -51,7 +51,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted try { // ray()->clearAll(); $serverUptimeCheckNumber = 0; - $serverUptimeCheckNumberMax = 5; + $serverUptimeCheckNumberMax = 3; while (true) { if ($serverUptimeCheckNumber >= $serverUptimeCheckNumberMax) { $this->server->settings()->update(['is_reachable' => false]); @@ -65,6 +65,10 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted $serverUptimeCheckNumber++; sleep(5); } + $containers = instant_remote_process(["docker container ls -q"], $this->server); + if (!$containers) { + return; + } $containers = instant_remote_process(["docker container inspect $(docker container ls -q) --format '{{json .}}'"], $this->server); $containers = format_docker_command_output_to_json($containers); $applications = $this->server->applications(); diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php index ae16c7bc0..7017ead10 100644 --- a/bootstrap/helpers/remoteProcess.php +++ b/bootstrap/helpers/remoteProcess.php @@ -7,15 +7,13 @@ use App\Models\Application; use App\Models\ApplicationDeploymentQueue; use App\Models\PrivateKey; use App\Models\Server; -use App\Notifications\Server\NotReachable; use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Process; use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Sleep; -use Spatie\Activitylog\Models\Activity; use Illuminate\Support\Str; +use Spatie\Activitylog\Contracts\Activity; function remote_process( array $command, @@ -110,11 +108,28 @@ function instant_remote_process(array $command, Server $server, $throwError = tr if (!$throwError) { return null; } - throw new \RuntimeException($process->errorOutput(), $exitCode); + return excludeCertainErrors($process->errorOutput(), $exitCode); } return $output; } - +function excludeCertainErrors(string $errorOutput, ?int $exitCode = null) { + $ignoredErrors = collect([ + 'Permission denied (publickey', + 'Could not resolve hostname', + ]); + $ignored = false; + foreach ($ignoredErrors as $ignoredError) { + if (Str::contains($errorOutput, $ignoredError)) { + $ignored = true; + break; + } + } + if ($ignored) { + // TODO: Create new exception and disable in sentry + throw new \RuntimeException($errorOutput, $exitCode); + } + throw new \RuntimeException($errorOutput, $exitCode); +} function decode_remote_command_output(?ApplicationDeploymentQueue $application_deployment_queue = null): Collection { $application = Application::find(data_get($application_deployment_queue, 'application_id')); diff --git a/resources/views/components/server/navbar.blade.php b/resources/views/components/server/navbar.blade.php index 5aaafead1..baac76ea4 100644 --- a/resources/views/components/server/navbar.blade.php +++ b/resources/views/components/server/navbar.blade.php @@ -1,5 +1,5 @@

- +

Server

@if ($server->settings->is_reachable) diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index ebb40f78f..4f3df85c2 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -48,10 +48,16 @@ @endif @if ($server->settings->is_reachable && !$server->settings->is_usable && $server->id !== 0) - - Install Docker Engine 24.0 - + @if ($dockerInstallationStarted) + + Validate Server + + @else + + Install Docker Engine 24.0 + + @endif @endif @if ($server->isFunctional())

Settings

diff --git a/resources/views/livewire/server/proxy/status.blade.php b/resources/views/livewire/server/proxy/status.blade.php index db496f561..a8eca1a2b 100644 --- a/resources/views/livewire/server/proxy/status.blade.php +++ b/resources/views/livewire/server/proxy/status.blade.php @@ -1,4 +1,3 @@ -
@if ($server->proxy->status === 'running') @@ -7,7 +6,8 @@ @else @endif -