diff --git a/app/Actions/Database/StartMariadb.php b/app/Actions/Database/StartMariadb.php index c6b243381..21fcdb8a5 100644 --- a/app/Actions/Database/StartMariadb.php +++ b/app/Actions/Database/StartMariadb.php @@ -23,7 +23,7 @@ class StartMariadb $this->configuration_dir = database_configuration_dir() . '/' . $container_name; $this->commands = [ - "echo '####### Starting {$database->name}.'", + "echo 'Starting {$database->name}.'", "mkdir -p $this->configuration_dir", ]; @@ -104,7 +104,7 @@ class StartMariadb $this->commands[] = "echo 'Pulling {$database->image} image.'"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d"; - $this->commands[] = "echo '####### {$database->name} started.'"; + $this->commands[] = "echo '{$database->name} started.'"; return remote_process($this->commands, $database->destination->server); } diff --git a/app/Actions/Database/StartMongodb.php b/app/Actions/Database/StartMongodb.php index 9eb884dbe..e0197a7bc 100644 --- a/app/Actions/Database/StartMongodb.php +++ b/app/Actions/Database/StartMongodb.php @@ -25,7 +25,7 @@ class StartMongodb $this->configuration_dir = database_configuration_dir() . '/' . $container_name; $this->commands = [ - "echo '####### Starting {$database->name}.'", + "echo 'Starting {$database->name}.'", "mkdir -p $this->configuration_dir", ]; @@ -120,7 +120,7 @@ class StartMongodb $this->commands[] = "echo 'Pulling {$database->image} image.'"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d"; - $this->commands[] = "echo '####### {$database->name} started.'"; + $this->commands[] = "echo '{$database->name} started.'"; return remote_process($this->commands, $database->destination->server); } diff --git a/app/Actions/Database/StartMysql.php b/app/Actions/Database/StartMysql.php index 761832525..76e8af619 100644 --- a/app/Actions/Database/StartMysql.php +++ b/app/Actions/Database/StartMysql.php @@ -23,7 +23,7 @@ class StartMysql $this->configuration_dir = database_configuration_dir() . '/' . $container_name; $this->commands = [ - "echo '####### Starting {$database->name}.'", + "echo 'Starting {$database->name}.'", "mkdir -p $this->configuration_dir", ]; @@ -104,7 +104,7 @@ class StartMysql $this->commands[] = "echo 'Pulling {$database->image} image.'"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d"; - $this->commands[] = "echo '####### {$database->name} started.'"; + $this->commands[] = "echo '{$database->name} started.'"; return remote_process($this->commands, $database->destination->server); } diff --git a/app/Actions/Database/StartPostgresql.php b/app/Actions/Database/StartPostgresql.php index b88da5e4f..97ae9da0e 100644 --- a/app/Actions/Database/StartPostgresql.php +++ b/app/Actions/Database/StartPostgresql.php @@ -23,7 +23,7 @@ class StartPostgresql $this->configuration_dir = database_configuration_dir() . '/' . $container_name; $this->commands = [ - "echo '####### Starting {$database->name}.'", + "echo 'Starting {$database->name}.'", "mkdir -p $this->configuration_dir", "mkdir -p $this->configuration_dir/docker-entrypoint-initdb.d/" ]; @@ -130,7 +130,7 @@ class StartPostgresql $this->commands[] = "echo 'Pulling {$database->image} image.'"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d"; - $this->commands[] = "echo '####### {$database->name} started.'"; + $this->commands[] = "echo '{$database->name} started.'"; return remote_process($this->commands, $database->destination->server); } diff --git a/app/Actions/Database/StartRedis.php b/app/Actions/Database/StartRedis.php index fab055f20..fcb87b891 100644 --- a/app/Actions/Database/StartRedis.php +++ b/app/Actions/Database/StartRedis.php @@ -26,7 +26,7 @@ class StartRedis $this->configuration_dir = database_configuration_dir() . '/' . $container_name; $this->commands = [ - "echo '####### Starting {$database->name}.'", + "echo 'Starting {$database->name}.'", "mkdir -p $this->configuration_dir", ]; @@ -114,7 +114,7 @@ class StartRedis $this->commands[] = "echo 'Pulling {$database->image} image.'"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml pull"; $this->commands[] = "docker compose -f $this->configuration_dir/docker-compose.yml up -d"; - $this->commands[] = "echo '####### {$database->name} started.'"; + $this->commands[] = "echo '{$database->name} started.'"; return remote_process($this->commands, $database->destination->server); } diff --git a/app/Actions/Server/InstallDocker.php b/app/Actions/Server/InstallDocker.php index a39799d88..01a2f8014 100644 --- a/app/Actions/Server/InstallDocker.php +++ b/app/Actions/Server/InstallDocker.php @@ -9,8 +9,12 @@ use App\Models\StandaloneDocker; class InstallDocker { use AsAction; - public function handle(Server $server, $supported_os_type) + public function handle(Server $server) { + $supported_os_type = $server->validateOS(); + if (!$supported_os_type) { + throw new \Exception('Server OS type is not supported for automated installation. Please install Docker manually before continuing: documentation.'); + } ray('Installing Docker on server: ' . $server->name . ' (' . $server->ip . ')' . ' with OS: ' . $supported_os_type); $dockerVersion = '24.0'; $config = base64_encode('{ diff --git a/app/Actions/Service/StartService.php b/app/Actions/Service/StartService.php index 74bdd81cb..ef473e578 100644 --- a/app/Actions/Service/StartService.php +++ b/app/Actions/Service/StartService.php @@ -14,13 +14,13 @@ class StartService $network = $service->destination->network; $service->saveComposeConfigs(); $commands[] = "cd " . $service->workdir(); - $commands[] = "echo '####### Saved configuration files to {$service->workdir()}.'"; - $commands[] = "echo '####### Creating Docker network.'"; + $commands[] = "echo 'Saved configuration files to {$service->workdir()}.'"; + $commands[] = "echo 'Creating Docker network.'"; $commands[] = "docker network create --attachable '{$service->uuid}' >/dev/null || true"; - $commands[] = "echo '####### Starting service {$service->name} on {$service->server->name}.'"; - $commands[] = "echo '####### Pulling images.'"; + $commands[] = "echo 'Starting service {$service->name} on {$service->server->name}.'"; + $commands[] = "echo 'Pulling images.'"; $commands[] = "docker compose pull"; - $commands[] = "echo '####### Starting containers.'"; + $commands[] = "echo 'Starting containers.'"; $commands[] = "docker compose up -d --remove-orphans --force-recreate"; $commands[] = "docker network connect $service->uuid coolify-proxy || true"; $compose = data_get($service,'docker_compose',[]); diff --git a/app/Http/Livewire/Boarding/Index.php b/app/Http/Livewire/Boarding/Index.php index d710b9e6f..7f53708ad 100644 --- a/app/Http/Livewire/Boarding/Index.php +++ b/app/Http/Livewire/Boarding/Index.php @@ -188,7 +188,6 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== public function validateServer() { try { - $customErrorMessage = "Server is not reachable:"; config()->set('coolify.mux_enabled', false); instant_remote_process(['uptime'], $this->createdServer, true); @@ -198,7 +197,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== ]); } catch (\Throwable $e) { $this->serverReachable = false; - return handleError(error: $e, customErrorMessage: $customErrorMessage, livewire: $this); + return handleError(error: $e, livewire: $this); } try { @@ -206,7 +205,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== $dockerVersion = checkMinimumDockerEngineVersion($dockerVersion); if (is_null($dockerVersion)) { $this->currentState = 'install-docker'; - throw new \Exception('Docker version is not supported or not installed.'); + throw new \Exception('Docker not found or old version is installed.'); } $this->createdServer->settings()->update([ 'is_usable' => true, @@ -214,14 +213,20 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== $this->getProxyType(); } catch (\Throwable $e) { // $this->dockerInstallationStarted = false; - return handleError(error: $e, customErrorMessage: $customErrorMessage, livewire: $this); + return handleError(error: $e, livewire: $this); } } public function installDocker() { - $this->dockerInstallationStarted = true; - $activity = InstallDocker::run($this->createdServer); - $this->emit('newMonitorActivity', $activity->id); + try { + $this->dockerInstallationStarted = true; + $activity = InstallDocker::run($this->createdServer); + $this->emit('installDocker'); + $this->emit('newMonitorActivity', $activity->id); + } catch (\Throwable $e) { + $this->dockerInstallationStarted = false; + return handleError(error: $e, livewire: $this); + } } public function dockerInstalledOrSkipped() { diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index ecf7c80cf..9d39ae4e4 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -53,11 +53,11 @@ class Form extends Component $this->validateServer(); $this->server->settings->save(); } - public function installDocker($supported_os_type) + public function installDocker() { $this->emit('installDocker'); $this->dockerInstallationStarted = true; - $activity = InstallDocker::run($this->server, $supported_os_type); + $activity = InstallDocker::run($this->server); $this->emit('newMonitorActivity', $activity->id); } public function checkLocalhostConnection() @@ -83,21 +83,21 @@ class Form extends Component } $supported_os_type = $this->server->validateOS(); if (!$supported_os_type) { - $install && $this->emit('error', 'Server OS is not supported.
Please use a supported OS.'); + $install && $this->emit('error', 'Server OS type is not supported for automated installation. Please install Docker manually before continuing: documentation.'); return; } $dockerInstalled = $this->server->validateDockerEngine(); if ($dockerInstalled) { $install && $this->emit('success', 'Docker Engine is installed.
Checking version.'); } else { - $install && $this->installDocker($supported_os_type); + $install && $this->installDocker(); return; } $dockerVersion = $this->server->validateDockerEngineVersion(); if ($dockerVersion) { $install && $this->emit('success', 'Docker Engine version is 23+.'); } else { - $install && $this->installDocker($supported_os_type); + $install && $this->installDocker(); return; } } catch (\Throwable $e) { diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 1953f554d..071c252ff 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -106,14 +106,13 @@ function handleError(?Throwable $error = null, ?Livewire\Component $livewire = n $message = null; } if ($customErrorMessage) { - $error->message = $customErrorMessage . ' ' . $message; $message = $customErrorMessage . ' ' . $message; } if (isset($livewire)) { return $livewire->emit('error', $message); } - throw $error; + throw new Exception($message); } function get_route_parameters(): array { diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index 5cd5ce1c5..6f63290ca 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -1,5 +1,6 @@ + @@ -25,6 +26,7 @@ @endif @section('body') + @livewireScripts @@ -120,6 +122,9 @@ Livewire.on('success', (message) => { if (message) Toaster.success(message) }) + Livewire.on('installDocker', () => { + installDocker.showModal(); + }) @show diff --git a/resources/views/livewire/boarding/index.blade.php b/resources/views/livewire/boarding/index.blade.php index 4bac29022..75f2441f0 100644 --- a/resources/views/livewire/boarding/index.blade.php +++ b/resources/views/livewire/boarding/index.blade.php @@ -225,8 +225,7 @@ Could not find Docker Engine on your server. Do you want me to install it for you? - + Let's do it! @if ($dockerInstallationStarted) @@ -235,9 +234,10 @@

This will install the latest Docker Engine on your server, configure a few things to be able - to run optimal.

+ to run optimal.

Minimum Docker Engine version is: 22

To manually install Docker Engine, check this documentation.

+ @endif
diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index e872751f9..4004dd096 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -64,9 +64,4 @@ helper="Disk cleanup job will be executed if disk usage is more than this number." /> @endif -