diff --git a/app/Http/Livewire/PrivateKey/Change.php b/app/Http/Livewire/PrivateKey/Change.php new file mode 100644 index 000000000..a070e600b --- /dev/null +++ b/app/Http/Livewire/PrivateKey/Change.php @@ -0,0 +1,41 @@ + 'required|string', + 'private_key.description' => 'nullable|string', + 'private_key.private_key' => 'required|string' + ]; + public function mount() + { + $this->private_key = PrivateKey::where('uuid', $this->private_key_uuid)->first(); + } + public function delete($private_key_uuid) + { + PrivateKey::where('uuid', $private_key_uuid)->delete(); + session('currentTeam')->privateKeys = PrivateKey::where('team_id', session('currentTeam')->id)->get(); + redirect()->route('dashboard'); + } + public function changePrivateKey() + { + try { + $this->private_key->private_key = trim($this->private_key->private_key); + if (!str_ends_with($this->private_key->private_key, "\n")) { + $this->private_key->private_key .= "\n"; + } + $this->private_key->save(); + session('currentTeam')->privateKeys = PrivateKey::where('team_id', session('currentTeam')->id)->get(); + } catch (\Exception $e) { + $this->addError('private_key_value', $e->getMessage()); + } + } +} diff --git a/app/Http/Livewire/PrivateKey/Create.php b/app/Http/Livewire/PrivateKey/Create.php new file mode 100644 index 000000000..ee73827ea --- /dev/null +++ b/app/Http/Livewire/PrivateKey/Create.php @@ -0,0 +1,28 @@ +private_key_value = trim($this->private_key_value); + if (!str_ends_with($this->private_key_value, "\n")) { + $this->private_key_value .= "\n"; + } + $new_private_key = PrivateKey::create([ + 'name' => $this->private_key_name, + 'description' => $this->private_key_description, + 'private_key' => $this->private_key_value, + 'team_id' => session('currentTeam')->id + ]); + session('currentTeam')->privateKeys = PrivateKey::where('team_id', session('currentTeam')->id)->get(); + redirect()->route('private-key.show', $new_private_key->uuid); + } +} diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php index b676b463c..bd7f18a41 100644 --- a/app/Http/Livewire/Project/New/PublicGitRepository.php +++ b/app/Http/Livewire/Project/New/PublicGitRepository.php @@ -45,11 +45,11 @@ public function mount() $this->parameters = Route::current()->parameters(); $this->servers = session('currentTeam')->load(['servers'])->servers; } - public function chooseServer($server_id) + public function chooseServer($server) { - $this->chosenServer = $server_id; - $this->standalone_docker = StandaloneDocker::where('server_id', $server_id)->get(); - $this->swarm_docker = SwarmDocker::where('server_id', $server_id)->get(); + $this->chosenServer = $server; + $this->standalone_docker = StandaloneDocker::where('server_id', $server['id'])->get(); + $this->swarm_docker = SwarmDocker::where('server_id', $server['id'])->get(); } public function setDestination($destination_uuid, $destination_type) { diff --git a/app/Http/Livewire/Server/New/ByIp.php b/app/Http/Livewire/Server/New/ByIp.php index e5fdafa98..baf638a2f 100644 --- a/app/Http/Livewire/Server/New/ByIp.php +++ b/app/Http/Livewire/Server/New/ByIp.php @@ -15,7 +15,7 @@ class ByIp extends Component public $new_private_key_value; public string $name; - public string $description; + public string|null $description = null; public string $ip; public string $user = 'root'; public int $port = 22; @@ -29,20 +29,6 @@ public function setPrivateKey($private_key_id) { $this->private_key_id = $private_key_id; } - public function addPrivateKey() - { - $this->new_private_key_value = trim($this->new_private_key_value); - if (!str_ends_with($this->new_private_key_value, "\n")) { - $this->new_private_key_value .= "\n"; - } - PrivateKey::create([ - 'name' => $this->new_private_key_name, - 'description' => $this->new_private_key_description, - 'private_key' => $this->new_private_key_value, - 'team_id' => session('currentTeam')->id - ]); - session('currentTeam')->privateKeys = $this->private_keys = PrivateKey::where('team_id', session('currentTeam')->id)->get(); - } public function submit() { if (!$this->private_key_id) { diff --git a/app/Http/Livewire/Server/PrivateKey.php b/app/Http/Livewire/Server/PrivateKey.php new file mode 100644 index 000000000..6e57f4ad2 --- /dev/null +++ b/app/Http/Livewire/Server/PrivateKey.php @@ -0,0 +1,26 @@ +parameters['server_uuid'])->update([ + 'private_key_id' => $private_key_id + ]); + return redirect()->route('server.show', $this->parameters['server_uuid']); + } + public function mount() + { + $this->parameters = Route::current()->parameters(); + $this->private_keys = ModelsPrivateKey::where('team_id', session('currentTeam')->id)->get(); + } +} diff --git a/app/Jobs/DeployApplicationJob.php b/app/Jobs/DeployApplicationJob.php index 501f45039..5eb1f5f75 100644 --- a/app/Jobs/DeployApplicationJob.php +++ b/app/Jobs/DeployApplicationJob.php @@ -222,10 +222,10 @@ public function handle(): void Storage::disk('deployments')->put(Str::kebab($this->application->name) . '/docker-compose.yml', $this->docker_compose); } catch (\Exception $e) { $this->executeNow([ - "echo 'Oops something is not okay, are you okay? 😢'", + "echo '\nOops something is not okay, are you okay? 😢'", "echo '\n\n{$e->getMessage()}'", ]); - throw new \Exception('Deployment finished'); + $this->fail($e->getMessage()); } finally { $this->executeNow(["docker rm -f {$this->deployment_uuid} >/dev/null 2>&1"], hideFromOutput: true); dispatch(new ContainerStatusJob($this->application_uuid)); diff --git a/app/Models/Team.php b/app/Models/Team.php index 4c9938c5b..aaadcbb5a 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -24,4 +24,8 @@ public function applications() { return $this->hasManyThrough(Application::class, Project::class); } + public function privateKeys() + { + return $this->hasMany(PrivateKey::class); + } } diff --git a/app/View/Components/FormInput.php b/app/View/Components/FormInput.php deleted file mode 100644 index efe511b6a..000000000 --- a/app/View/Components/FormInput.php +++ /dev/null @@ -1,33 +0,0 @@ -makeDirectory('.ssh'); @@ -79,6 +79,7 @@ function generateSshCommand(string $private_key_location, string $server_ip, str . '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ' . '-o PasswordAuthentication=no ' . '-o ConnectTimeout=3600 ' + . '-o ServerAliveInterval=60 ' . '-o RequestTTY=no ' . '-o LogLevel=ERROR ' . "-p {$port} " diff --git a/config/coolify.php b/config/coolify.php index 1420b5115..d7ca6c64c 100644 --- a/config/coolify.php +++ b/config/coolify.php @@ -1,7 +1,7 @@ '4.0.0-nightly.1', + 'version' => '4.0.0-nightly.2', 'project_path_on_host' => env('PROJECT_PATH_ON_HOST', '/var/www/html') ]; diff --git a/resources/css/app.css b/resources/css/app.css index dc83d5cf5..93d5c4896 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,3 +1,16 @@ /* @tailwind base; */ @tailwind components; @tailwind utilities; + +body { + @apply bg-neutral-900 text-white font-sans; +} +a, a:visited { + @apply text-neutral-300 hover:text-purple-500; +} +input, select, textarea { + @apply border-none p-2 bg-neutral-800 text-white disabled:text-neutral-600; +} +button { + @apply border-none px-2 p-1 cursor-pointer; +} diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index bbd76134c..830296458 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -12,7 +12,7 @@ - + Login @if ($errors->any())
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index a2494ff3a..515f47509 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -9,7 +9,7 @@ - + Register @if ($errors->any())
diff --git a/resources/views/components/confirm-modal.blade.php b/resources/views/components/confirm-modal.blade.php index d25996123..ab707519f 100644 --- a/resources/views/components/confirm-modal.blade.php +++ b/resources/views/components/confirm-modal.blade.php @@ -16,8 +16,8 @@
- - + Confirm + Cancel
diff --git a/resources/views/components/input.blade.php b/resources/views/components/input.blade.php deleted file mode 100644 index 0acf572ce..000000000 --- a/resources/views/components/input.blade.php +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/resources/views/components/inputs/button.blade.php b/resources/views/components/inputs/button.blade.php new file mode 100644 index 000000000..74388b531 --- /dev/null +++ b/resources/views/components/inputs/button.blade.php @@ -0,0 +1,24 @@ +@props([ + 'isWarning' => null, + 'defaultClass' => 'text-white bg-neutral-800 hover:bg-violet-600', + 'defaultWarningClass' => 'text-white bg-red-500 hover:bg-red-600', + 'loadingClass' => 'text-black bg-green-500', + 'confirm' => null, + 'confirmAction' => null, +]) + diff --git a/resources/views/components/form-input.blade.php b/resources/views/components/inputs/input.blade.php similarity index 57% rename from resources/views/components/form-input.blade.php rename to resources/views/components/inputs/input.blade.php index d4dd79631..f899cb64e 100644 --- a/resources/views/components/form-input.blade.php +++ b/resources/views/components/inputs/input.blade.php @@ -1,3 +1,15 @@ +@props([ + 'id' => null, + 'required' => false, + 'readonly' => false, + 'label' => null, + 'type' => 'text', + 'class' => '', + 'instantSave' => false, + 'disabled' => false, + 'hidden' => false, +]) + @if ($type === 'checkbox') @if ($type === 'textarea') - + @else - @endif diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 451f3097a..3d5ce67a1 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -11,7 +11,7 @@ @endif
@csrf - + Logout
diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 22a1b8310..7c3f11332 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -1,19 +1,33 @@ -

Projects

+

Projects + New +

@forelse ($projects as $project) {{ data_get($project, 'name') }} @empty

No projects found.

@endforelse -

Servers

+

Servers + New +

@forelse ($servers as $server) {{ data_get($server, 'name') }} @empty

No servers found.

@endforelse -

Destinations

+

Destinations + New +

@forelse ($destinations as $destination) {{ data_get($destination, 'name') }} + @empty +

No destinations found.

+ @endforelse +

Private Keys + New +

+ @forelse ($private_keys as $private_key) + {{ data_get($private_key, 'name') }} @empty

No servers found.

@endforelse diff --git a/resources/views/destination/new.blade.php b/resources/views/destination/new.blade.php index a3be8a53b..55bb270e2 100644 --- a/resources/views/destination/new.blade.php +++ b/resources/views/destination/new.blade.php @@ -1,4 +1,4 @@

New Destination

- +
diff --git a/resources/views/livewire/check-update.blade.php b/resources/views/livewire/check-update.blade.php index 165f98797..577b4e931 100644 --- a/resources/views/livewire/check-update.blade.php +++ b/resources/views/livewire/check-update.blade.php @@ -1,6 +1,5 @@
- + Check for updates @if ($updateAvailable) Update available @endif diff --git a/resources/views/livewire/destination/new/standalone-docker.blade.php b/resources/views/livewire/destination/new/standalone-docker.blade.php index 28b0b5f45..2c8cee3c4 100644 --- a/resources/views/livewire/destination/new/standalone-docker.blade.php +++ b/resources/views/livewire/destination/new/standalone-docker.blade.php @@ -1,15 +1,21 @@
- - - + + + @foreach ($servers as $key) - + @if ($server_id == $key->id) + + {{ $key->name }} + + @else + {{ $key->name }} + + @endif @endforeach - +
diff --git a/resources/views/livewire/force-upgrade.blade.php b/resources/views/livewire/force-upgrade.blade.php index 7e4f53cd4..bcf75191a 100644 --- a/resources/views/livewire/force-upgrade.blade.php +++ b/resources/views/livewire/force-upgrade.blade.php @@ -1,6 +1,5 @@
@if (auth()->user()->teams->contains(0)) - + Force Upgrade @endif
diff --git a/resources/views/livewire/private-key/change.blade.php b/resources/views/livewire/private-key/change.blade.php new file mode 100644 index 000000000..72585eb9d --- /dev/null +++ b/resources/views/livewire/private-key/change.blade.php @@ -0,0 +1,14 @@ +
+
+ + + + + Submit + + + Delete + + +
diff --git a/resources/views/livewire/private-key/create.blade.php b/resources/views/livewire/private-key/create.blade.php new file mode 100644 index 000000000..927ca7ef5 --- /dev/null +++ b/resources/views/livewire/private-key/create.blade.php @@ -0,0 +1,10 @@ +
+
+ + + + + Submit + + +
diff --git a/resources/views/livewire/project/application/deploy.blade.php b/resources/views/livewire/project/application/deploy.blade.php index 8237c0ce7..093779d66 100644 --- a/resources/views/livewire/project/application/deploy.blade.php +++ b/resources/views/livewire/project/application/deploy.blade.php @@ -1,15 +1,15 @@
- + @if ($application->status === 'running') - - + Restart + Force Rebuild + Stop @else - - + Start + Start (no cache) @endif - + + Delete @if ($application->status === 'running') @if (data_get($application, 'fqdn')) @@ -23,7 +23,7 @@ {{ explode(':', $port)[0] }} @else Open + href="http://{{ $application->destination->server->ip }}:{{ explode(':', $port)[0] }}">Open {{ $port }} @endif @endforeach diff --git a/resources/views/livewire/project/application/general.blade.php b/resources/views/livewire/project/application/general.blade.php index 4e3cf0bdd..36186c3fd 100644 --- a/resources/views/livewire/project/application/general.blade.php +++ b/resources/views/livewire/project/application/general.blade.php @@ -2,51 +2,51 @@
- - + +
- - - - + + + + @if ($application->settings->is_static) - + @endif
- + @if ($application->settings->is_static) - + @else - + @endif
@if ($application->settings->is_static) - + @else - + @endif - +
- +
- - - - - - - - - + + + + + + + + +
diff --git a/resources/views/livewire/project/application/source.blade.php b/resources/views/livewire/project/application/source.blade.php index aa4404ec6..0de4f21c0 100644 --- a/resources/views/livewire/project/application/source.blade.php +++ b/resources/views/livewire/project/application/source.blade.php @@ -1,9 +1,9 @@
-

Source Name: {{ data_get($application,'source.name') }}

-

Is Public Source: {{ data_get($application,'source.is_public') }}

+

Source Name: {{ data_get($application, 'source.name') }}

+

Is Public Source: {{ data_get($application, 'source.is_public') }}

- - - + + +
diff --git a/resources/views/livewire/project/new/empty-project.blade.php b/resources/views/livewire/project/new/empty-project.blade.php index 160b19b5b..4ad42518d 100644 --- a/resources/views/livewire/project/new/empty-project.blade.php +++ b/resources/views/livewire/project/new/empty-project.blade.php @@ -1 +1 @@ - +Empty Project diff --git a/resources/views/livewire/project/new/public-git-repository.blade.php b/resources/views/livewire/project/new/public-git-repository.blade.php index b40697727..ae36b76de 100644 --- a/resources/views/livewire/project/new/public-git-repository.blade.php +++ b/resources/views/livewire/project/new/public-git-repository.blade.php @@ -1,35 +1,71 @@
+ @if ($servers->count() > 0) +

Choose a server

+ @endif @forelse ($servers as $server) - + @if ($chosenServer && $chosenServer['id'] === $server->id) + {{ $server->name }} + + @else + {{ $server->name }} + @endif @empty - No servers + No servers found. +

Did you forget to add a destination on the server?

@endforelse + @isset($chosenServer) -
- @foreach ($standalone_docker as $standalone) - - @endforeach - @foreach ($swarm_docker as $standalone) - - @endforeach -
+ @if ($standalone_docker->count() > 0 || $swarm_docker->count() > 0) +

Choose a destination

+
+ @foreach ($standalone_docker as $standalone) + @if ($chosenDestination?->uuid == $standalone->uuid) + + {{ $standalone->network }} + @else + + {{ $standalone->network }} + @endif + @endforeach + @foreach ($swarm_docker as $standalone) + @if ($chosenDestination?->uuid == $standalone->uuid) + + {{ $standalone->network }} + @else + + {{ $standalone->uuid }} + @endif + @endforeach +
+ + @else +

No destinations found on this server.

+ Add + a + destination + @endif + @endisset @isset($chosenDestination) -
- - +

Choose a repository

+ + + @if ($is_static) - + @else - + @endif - + @endisset diff --git a/resources/views/livewire/run-command.blade.php b/resources/views/livewire/run-command.blade.php index 3953f2fa4..81473dd40 100755 --- a/resources/views/livewire/run-command.blade.php +++ b/resources/views/livewire/run-command.blade.php @@ -1,16 +1,16 @@
- - - + Run command + Run sleeping beauty + Build DummyProject
@@ -21,9 +21,6 @@ @endif
@isset($activity?->id) -
{{ \App\Actions\CoolifyTask\RunRemoteProcess::decodeOutput($activity) }}
+
{{ \App\Actions\CoolifyTask\RunRemoteProcess::decodeOutput($activity) }}
@endisset
diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index 926fcae96..691349d37 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -2,30 +2,27 @@
- - + +
@if ($server->id === 0) - - - + + + @else - - - + + + @endif
- - - - {{-- --}} + Submit + Check Server + Delete +
@isset($uptime) diff --git a/resources/views/livewire/server/new/by-ip.blade.php b/resources/views/livewire/server/new/by-ip.blade.php index e4505b04e..bde0a8bcf 100644 --- a/resources/views/livewire/server/new/by-ip.blade.php +++ b/resources/views/livewire/server/new/by-ip.blade.php @@ -1,33 +1,31 @@
- - - - - -
diff --git a/resources/views/livewire/server/private-key.blade.php b/resources/views/livewire/server/private-key.blade.php new file mode 100644 index 000000000..473b3054f --- /dev/null +++ b/resources/views/livewire/server/private-key.blade.php @@ -0,0 +1,7 @@ +
+ @forelse ($private_keys as $private_key) + {{ $private_key->name }} + @empty +

No private keys found

+ @endforelse +
diff --git a/resources/views/livewire/settings/form.blade.php b/resources/views/livewire/settings/form.blade.php index cc9313f50..fd8fd0443 100644 --- a/resources/views/livewire/settings/form.blade.php +++ b/resources/views/livewire/settings/form.blade.php @@ -2,22 +2,22 @@
- - + +
- - + +
- +
- - - - + + + +
diff --git a/resources/views/livewire/switch-team.blade.php b/resources/views/livewire/switch-team.blade.php index ee0055fdb..09319185e 100644 --- a/resources/views/livewire/switch-team.blade.php +++ b/resources/views/livewire/switch-team.blade.php @@ -1,6 +1,6 @@
@foreach (auth()->user()->otherTeams() as $team) - + Switch to: + {{ $team->name }} @endforeach
diff --git a/resources/views/private-key/new.blade.php b/resources/views/private-key/new.blade.php new file mode 100644 index 000000000..fca0c042b --- /dev/null +++ b/resources/views/private-key/new.blade.php @@ -0,0 +1,4 @@ + +

New Private Key

+ +
diff --git a/resources/views/private-key/show.blade.php b/resources/views/private-key/show.blade.php new file mode 100644 index 000000000..9d108ecf6 --- /dev/null +++ b/resources/views/private-key/show.blade.php @@ -0,0 +1,4 @@ + +

Private Key

+ +
diff --git a/resources/views/project/application/configuration.blade.php b/resources/views/project/application/configuration.blade.php index 4b2f8ce6b..b885c5a10 100644 --- a/resources/views/project/application/configuration.blade.php +++ b/resources/views/project/application/configuration.blade.php @@ -3,16 +3,16 @@
diff --git a/resources/views/project/new.blade.php b/resources/views/project/new.blade.php index b39e6bf04..c490cab06 100644 --- a/resources/views/project/new.blade.php +++ b/resources/views/project/new.blade.php @@ -6,8 +6,9 @@ @endif
- - + Public Repository + Private Repository (GitHub App) + @if ($type === 'project') @endif @@ -19,8 +20,5 @@
github-private-repo
-
- Choose any option -
diff --git a/resources/views/project/resources.blade.php b/resources/views/project/resources.blade.php index d197cd3d8..113e78dc5 100644 --- a/resources/views/project/resources.blade.php +++ b/resources/views/project/resources.blade.php @@ -1,5 +1,7 @@ -

Resources +

Resources + New +

@foreach ($environment->applications as $application) diff --git a/resources/views/server/private-key.blade.php b/resources/views/server/private-key.blade.php new file mode 100644 index 000000000..5799eb522 --- /dev/null +++ b/resources/views/server/private-key.blade.php @@ -0,0 +1,4 @@ + +

Select a private Key

+ +
diff --git a/resources/views/server/show.blade.php b/resources/views/server/show.blade.php index 374122442..d8cd68126 100644 --- a/resources/views/server/show.blade.php +++ b/resources/views/server/show.blade.php @@ -1,7 +1,14 @@

Server

-

Destinations

+

Private Key + Change + +

+

{{ $server->privateKey->name }}

+

Destinations + New +

@if ($server->standaloneDockers) @foreach ($server->standaloneDockers as $docker)

Network: {{ data_get($docker, 'network') }}

diff --git a/routes/web.php b/routes/web.php index 02ad666e9..a1f219090 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use App\Http\Controllers\HomeController; use App\Http\Controllers\ProjectController; use App\Models\InstanceSettings; +use App\Models\PrivateKey; use App\Models\StandaloneDocker; use App\Models\SwarmDocker; use App\Http\Controllers\ServerController; @@ -29,10 +30,13 @@ $destinations = $servers->map(function ($server) { return $server->standaloneDockers->merge($server->swarmDockers); })->flatten(); + $private_keys = session('currentTeam')->load(['privateKeys'])->privateKeys; + return view('dashboard', [ 'servers' => $servers->sortBy('name'), 'projects' => $projects->sortBy('name'), 'destinations' => $destinations->sortBy('name'), + 'private_keys' => $private_keys->sortBy('name'), ]); })->name('dashboard'); Route::get('/project/{project_uuid}', [ProjectController::class, 'environments'])->name('project.environments'); @@ -70,6 +74,15 @@ })->name('demo'); }); +Route::middleware(['auth'])->group(function () { + Route::get('/private-key/new', fn () => view('private-key.new'))->name('private-key.new'); + Route::get('/private-key/{private_key_uuid}', function () { + $private_key = PrivateKey::where('uuid', request()->private_key_uuid)->first(); + return view('private-key.show', [ + 'private_key' => $private_key, + ]); + })->name('private-key.show'); +}); Route::middleware(['auth'])->group(function () { Route::get('/server/new', fn () => view('server.new'))->name('server.new'); Route::get('/server/{server_uuid}', function () { @@ -81,10 +94,22 @@ 'server' => $server, ]); })->name('server.show'); + Route::get('/server/{server_uuid}/private-key', function () { + return view('server.private-key'); + })->name('server.private-key'); }); Route::middleware(['auth'])->group(function () { - Route::get('/destination/new', fn () => view('destination.new'))->name('destination.new'); + Route::get('/destination/new', function () { + $query_params = request()->query(); + $server_id = null; + if (isset($query_params['server_id'])) { + $server_id = $query_params['server_id']; + } + return view('destination.new', [ + 'server_id' => $server_id, + ]); + })->name('destination.new'); Route::get('/destination/{destination_uuid}', function () { $standalone_dockers = StandaloneDocker::where('uuid', request()->destination_uuid)->first(); $swarm_dockers = SwarmDocker::where('uuid', request()->destination_uuid)->first();