From 56981d134c4bc12395d63a9ce354871ea73d8695 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Sat, 9 Sep 2023 15:30:46 +0200 Subject: [PATCH] fix: improve startProxy action fix: improve installDocker action and process feat: add noSubmit prop to custom modal --- app/Actions/Proxy/StartProxy.php | 12 ++--- app/Actions/Server/InstallDocker.php | 46 +++++++++--------- app/Http/Livewire/PrivateKey/Create.php | 2 +- app/Http/Livewire/Server/Form.php | 10 ++-- app/Http/Livewire/Server/ShowPrivateKey.php | 35 +++++++++----- app/View/Components/Modal.php | 1 + bootstrap/helpers/remoteProcess.php | 18 ++++--- resources/views/components/modal.blade.php | 4 +- .../views/livewire/server/form.blade.php | 47 +++++-------------- .../server/show-private-key.blade.php | 10 ++-- .../views/livewire/server/show.blade.php | 10 ++++ 11 files changed, 104 insertions(+), 91 deletions(-) diff --git a/app/Actions/Proxy/StartProxy.php b/app/Actions/Proxy/StartProxy.php index f0cfea98f..70dcbdab3 100644 --- a/app/Actions/Proxy/StartProxy.php +++ b/app/Actions/Proxy/StartProxy.php @@ -30,19 +30,19 @@ public function __invoke(Server $server): Activity $server->save(); $activity = remote_process([ - "echo 'Creating required Docker networks...'", + "echo '####### Creating required Docker networks...'", ...$create_networks_command, "cd $proxy_path", - "echo 'Creating Docker Compose file...'", - "echo 'Pulling docker image...'", + "echo '####### Creating Docker Compose file...'", + "echo '####### Pulling docker image...'", 'docker compose pull', - "echo 'Stopping existing proxy...'", + "echo '####### Stopping existing proxy...'", 'docker compose down -v --remove-orphans', "lsof -nt -i:80 | xargs -r kill -9", "lsof -nt -i:443 | xargs -r kill -9", - "echo 'Starting proxy...'", + "echo '####### Starting proxy...'", 'docker compose up -d --remove-orphans', - "echo 'Proxy installed successfully...'" + "echo '####### Proxy installed successfully...'" ], $server); return $activity; diff --git a/app/Actions/Server/InstallDocker.php b/app/Actions/Server/InstallDocker.php index 78254cc4c..49ea85c6b 100644 --- a/app/Actions/Server/InstallDocker.php +++ b/app/Actions/Server/InstallDocker.php @@ -18,42 +18,42 @@ public function __invoke(Server $server, Team $team) "max-file": "3" } }'); + $found = StandaloneDocker::where('server_id', $server->id); + if ($found->count() == 0) { + StandaloneDocker::create([ + 'name' => 'coolify', + 'network' => 'coolify', + 'server_id' => $server->id, + ]); + } if (isDev()) { - $activity = remote_process([ - "echo ####### Installing Prerequisites...", - "echo ####### Installing/updating Docker Engine...", - "echo ####### Configuring Docker Engine (merging existing configuration with the required)...", - "echo ####### Restarting Docker Engine...", + return remote_process([ + "echo '####### Installing Prerequisites...'", + "sleep 1", + "echo '####### Installing/updating Docker Engine...'", + "echo '####### Configuring Docker Engine (merging existing configuration with the required)...'", + "sleep 4", + "echo '####### Restarting Docker Engine...'", + "ls -l /tmp" ], $server); } else { - $activity = remote_process([ - "echo ####### Installing Prerequisites...", + return remote_process([ + "echo '####### Installing Prerequisites...'", "command -v jq >/dev/null || apt-get update", "command -v jq >/dev/null || apt install -y jq", - "echo ####### Installing/updating Docker Engine...", + "echo '####### Installing/updating Docker Engine...'", "curl https://releases.rancher.com/install-docker/{$dockerVersion}.sh | sh", - "echo ####### Configuring Docker Engine (merging existing configuration with the required)...", + "echo '####### Configuring Docker Engine (merging existing configuration with the required)...'", "test -s /etc/docker/daemon.json && cp /etc/docker/daemon.json \"/etc/docker/daemon.json.original-`date +\"%Y%m%d-%H%M%S\"`\" || echo '{$config}' | base64 -d > /etc/docker/daemon.json", "echo '{$config}' | base64 -d > /etc/docker/daemon.json.coolify", "cat <<< $(jq . /etc/docker/daemon.json.coolify) > /etc/docker/daemon.json.coolify", "cat <<< $(jq -s '.[0] * .[1]' /etc/docker/daemon.json /etc/docker/daemon.json.coolify) > /etc/docker/daemon.json", - "echo ####### Restarting Docker Engine...", + "echo '####### Restarting Docker Engine...'", "systemctl restart docker", - "echo ####### Creating default network...", + "echo '####### Creating default Docker network (coolify)...'", "docker network create --attachable coolify >/dev/null 2>&1 || true", - "echo ####### Done!" + "echo '####### Done!'" ], $server); - $found = StandaloneDocker::where('server_id', $server->id); - if ($found->count() == 0) { - StandaloneDocker::create([ - 'name' => 'coolify', - 'network' => 'coolify', - 'server_id' => $server->id, - ]); - } } - - - return $activity; } } diff --git a/app/Http/Livewire/PrivateKey/Create.php b/app/Http/Livewire/PrivateKey/Create.php index d8d3cc41a..eac749399 100644 --- a/app/Http/Livewire/PrivateKey/Create.php +++ b/app/Http/Livewire/PrivateKey/Create.php @@ -37,7 +37,7 @@ public function createPrivateKey() if ($this->from === 'server') { return redirect()->route('server.create'); } - return redirect()->route('private-key.show', ['private_key_uuid' => $private_key->uuid]); + return redirect()->route('security.private-key.show', ['private_key_uuid' => $private_key->uuid]); } catch (\Exception $e) { return general_error_handler(err: $e, that: $this); } diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index 0546c0007..76dbb1a06 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -54,13 +54,19 @@ public function validateServer() ['uptime' => $uptime, 'dockerVersion' => $dockerVersion] = validateServer($this->server); if ($uptime) { $this->uptime = $uptime; + $this->emit('success', 'Server is reachable!'); + } else { + throw new \Exception('Server is not rachable'); } if ($dockerVersion) { $this->dockerVersion = $dockerVersion; $this->emit('proxyStatusUpdated'); + $this->emit('success', 'Docker Engine 23+ is installed!'); + } else { + throw new \Exception('Old Docker version detected (lower than 23).'); } } catch (\Exception $e) { - return general_error_handler(customErrorMessage: "Server is not reachable. Reason: {$e->getMessage()}", that: $this); + return general_error_handler($e, that: $this); } } @@ -77,8 +83,6 @@ public function delete() } catch (\Exception $e) { return general_error_handler(err: $e, that: $this); } - - } public function submit() { diff --git a/app/Http/Livewire/Server/ShowPrivateKey.php b/app/Http/Livewire/Server/ShowPrivateKey.php index 4f77014cb..fe75d8cfd 100644 --- a/app/Http/Livewire/Server/ShowPrivateKey.php +++ b/app/Http/Livewire/Server/ShowPrivateKey.php @@ -4,7 +4,6 @@ use App\Models\Server; use Livewire\Component; -use Masmerise\Toaster\Toaster; class ShowPrivateKey extends Component { @@ -12,14 +11,24 @@ class ShowPrivateKey extends Component public $privateKeys; public $parameters; - public function setPrivateKey($private_key_id) + public function setPrivateKey($newPrivateKeyId) { - $this->server->update([ - 'private_key_id' => $private_key_id - ]); - refresh_server_connection($this->server->privateKey); - $this->server->refresh(); - $this->checkConnection(); + try { + $oldPrivateKeyId = $this->server->private_key_id; + $this->server->update([ + 'private_key_id' => $newPrivateKeyId + ]); + $this->server->refresh(); + refresh_server_connection($this->server->privateKey); + $this->checkConnection(); + } catch (\Exception $e) { + $this->server->update([ + 'private_key_id' => $oldPrivateKeyId + ]); + $this->server->refresh(); + refresh_server_connection($this->server->privateKey); + return general_error_handler($e, that: $this); + } } public function checkConnection() @@ -27,13 +36,17 @@ public function checkConnection() try { ['uptime' => $uptime, 'dockerVersion' => $dockerVersion] = validateServer($this->server); if ($uptime) { - Toaster::success('Server is reachable with this private key.'); + $this->emit('success', 'Server is reachable with this private key.'); + } else { + throw new \Exception('Server is not reachable with this private key.'); } if ($dockerVersion) { - Toaster::success('Server is usable for Coolify.'); + $this->emit('success', 'Server is usable for Coolify.'); + } else { + throw new \Exception('Old Docker version detected (lower than 23).'); } } catch (\Exception $e) { - return general_error_handler(customErrorMessage: "Server is not reachable. Reason: {$e->getMessage()}", that: $this); + throw new \Exception($e->getMessage()); } } diff --git a/app/View/Components/Modal.php b/app/View/Components/Modal.php index 3ef89fb1d..d37e10dca 100644 --- a/app/View/Components/Modal.php +++ b/app/View/Components/Modal.php @@ -16,6 +16,7 @@ public function __construct( public string|null $modalTitle = null, public string|null $modalBody = null, public string|null $modalSubmit = null, + public bool $noSubmit = false, public bool $yesOrNo = false, public string $action = 'delete' ) { diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php index 5b7965461..673c9801f 100644 --- a/bootstrap/helpers/remoteProcess.php +++ b/bootstrap/helpers/remoteProcess.php @@ -164,9 +164,9 @@ function refresh_server_connection(PrivateKey $private_key) // Delete the old ssh mux file to force a new one to be created Storage::disk('ssh-mux')->delete($server->muxFilename()); // check if user is authenticated - if (currentTeam()->id) { - currentTeam()->privateKeys = PrivateKey::where('team_id', currentTeam()->id)->get(); - } + // if (currentTeam()->id) { + // currentTeam()->privateKeys = PrivateKey::where('team_id', currentTeam()->id)->get(); + // } } } @@ -184,7 +184,7 @@ function validateServer(Server $server) } $server->settings->is_reachable = true; - $dockerVersion = instant_remote_process(['docker version|head -2|grep -i version'], $server, false); + $dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $server, false); if (!$dockerVersion) { $dockerVersion = null; return [ @@ -192,7 +192,13 @@ function validateServer(Server $server) "dockerVersion" => null, ]; } - $server->settings->is_usable = true; + $majorDockerVersion = Str::of($dockerVersion)->before('.')->value(); + if ($majorDockerVersion <= 22) { + $dockerVersion = null; + $server->settings->is_usable = false; + } else { + $server->settings->is_usable = true; + } return [ "uptime" => $uptime, "dockerVersion" => $dockerVersion, @@ -202,7 +208,7 @@ function validateServer(Server $server) $server->settings->is_usable = false; throw $e; } finally { - $server->settings->save(); + if(data_get($server,'settings')) $server->settings->save(); } } diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php index d31dc542a..650903c44 100644 --- a/resources/views/components/modal.blade.php +++ b/resources/views/components/modal.blade.php @@ -1,6 +1,6 @@ @if ($yesOrNo) - -

Danger Zone

+

Danger Zone

Woah. I hope you know what are you doing.

Delete Server

This will remove this server from Coolify. Beware! There is no coming diff --git a/resources/views/livewire/server/show-private-key.blade.php b/resources/views/livewire/server/show-private-key.blade.php index 613369b5e..498129f00 100644 --- a/resources/views/livewire/server/show-private-key.blade.php +++ b/resources/views/livewire/server/show-private-key.blade.php @@ -22,11 +22,13 @@ @endif
-

Select a different Private Key

-
+

Choose another Key

+
@forelse ($privateKeys as $private_key) -
{{ $private_key->name }} -
+ +
{{ $private_key->name }}
+
{{ $private_key->description }}
+
@empty
No private keys found. diff --git a/resources/views/livewire/server/show.blade.php b/resources/views/livewire/server/show.blade.php index 59f6868a4..4c41de6a4 100644 --- a/resources/views/livewire/server/show.blade.php +++ b/resources/views/livewire/server/show.blade.php @@ -1,4 +1,14 @@
+ + + + + + + Close + + +