fix: improve localhost boarding process

This commit is contained in:
Andras Bacsai 2023-09-18 13:01:01 +02:00
parent deece51e83
commit c023be2348
4 changed files with 26 additions and 4 deletions

View File

@ -39,6 +39,10 @@ class Index extends Component
public ?Project $createdProject = null;
public bool $dockerInstallationStarted = false;
public string $localhostPublicKey;
public bool $localhostReachable = true;
public function mount()
{
$this->privateKeyName = generate_random_name();
@ -94,6 +98,7 @@ public function setServerType(string $type)
if (!$this->createdServer) {
return $this->emit('error', 'Localhost server is not found. Something went wrong during installation. Please try to reinstall or contact support.');
}
$this->localhostPublicKey = $this->createdServer->privateKey->publicKey();
return $this->validateServer('localhost');
} elseif ($this->selectedServerType === 'remote') {
$this->privateKeys = PrivateKey::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get();
@ -188,7 +193,7 @@ public function saveServer()
$this->createdServer->save();
$this->validateServer();
}
public function validateServer(?string $type = null)
public function validateServer()
{
try {
$customErrorMessage = "Server is not reachable:";
@ -199,7 +204,12 @@ public function validateServer(?string $type = null)
$this->createdServer->settings->update([
'is_reachable' => true,
]);
} catch (\Throwable $e) {
$this->localhostReachable = false;
return handleError(error: $e, customErrorMessage: $customErrorMessage, livewire: $this);
}
try {
$dockerVersion = instant_remote_process(["docker version|head -2|grep -i version| awk '{print $2}'"], $this->createdServer, true);
$dockerVersion = checkMinimumDockerEngineVersion($dockerVersion);
if (is_null($dockerVersion)) {

View File

@ -89,7 +89,7 @@ public function __construct(int $application_deployment_queue_id)
$this->is_debug_enabled = $this->application->settings->is_debug_enabled;
$this->container_name = generateApplicationContainerName($this->application->uuid, $this->pull_request_id);
addPrivateKeyToSshAgent($this->server);
savePrivateKeyToFs($this->server);
$this->saved_outputs = collect();
// Set preview fqdn

View File

@ -53,7 +53,7 @@ function remote_process(
// }
// // processWithEnv()->run("echo '{$server->privateKey->private_key}' | ssh-add -d -");
// }
function addPrivateKeyToSshAgent(Server $server)
function savePrivateKeyToFs(Server $server)
{
if (data_get($server, 'privateKey.private_key') === null) {
throw new \Exception("Server {$server->name} does not have a private key");
@ -70,7 +70,7 @@ function generateSshCommand(Server $server, string $command, bool $isMux = true)
{
$user = $server->user;
$port = $server->port;
$privateKeyLocation = addPrivateKeyToSshAgent($server);
$privateKeyLocation = savePrivateKeyToFs($server);
$timeout = config('constants.ssh.command_timeout');
$connectionTimeout = config('constants.ssh.connection_timeout');
$serverInterval = config('constants.ssh.server_interval');

View File

@ -46,9 +46,21 @@
<x-forms.button class="justify-center box" wire:target="setServerType('localhost')"
wire:click="setServerType('localhost')">Localhost
</x-forms.button>
<x-forms.button class="justify-center box" wire:target="setServerType('remote')"
wire:click="setServerType('remote')">Remote Server
</x-forms.button>
@if (!$localhostReachable)
Localhost is not reachable with the following public key.
<br /> <br />
Please make sure you have the correct public key in your ~/.ssh/authorized_keys file for user
'root' or skip the boarding process and add a new private key manually to Coolify and to the
server.
<x-forms.input readonly id="localhostPublicKey"></x-forms.input>
<x-forms.button class="box" wire:target="setServerType('localhost')"
wire:click="setServerType('localhost')">Check again
</x-forms.button>
@endif
</x-slot:actions>
<x-slot:explanation>
<p>Servers are the main building blocks, as they will host your applications, databases,