diff --git a/app/Livewire/Destination/New/StandaloneDocker.php b/app/Livewire/Destination/New/Docker.php similarity index 53% rename from app/Livewire/Destination/New/StandaloneDocker.php rename to app/Livewire/Destination/New/Docker.php index 72516752a..3b76a7d13 100644 --- a/app/Livewire/Destination/New/StandaloneDocker.php +++ b/app/Livewire/Destination/New/Docker.php @@ -4,29 +4,32 @@ namespace App\Livewire\Destination\New; use App\Models\Server; use App\Models\StandaloneDocker as ModelsStandaloneDocker; +use App\Models\SwarmDocker; use Illuminate\Database\Eloquent\Collection; -use Illuminate\Support\Str; use Livewire\Component; use Visus\Cuid2\Cuid2; -class StandaloneDocker extends Component +class Docker extends Component { public string $name; public string $network; public Collection $servers; public Server $server; - public int|null $server_id = null; + public ?int $server_id = null; + public bool $is_swarm = false; protected $rules = [ 'name' => 'required|string', 'network' => 'required|string', - 'server_id' => 'required|integer' + 'server_id' => 'required|integer', + 'is_swarm' => 'boolean' ]; protected $validationAttributes = [ 'name' => 'name', 'network' => 'network', - 'server_id' => 'server' + 'server_id' => 'server', + 'is_swarm' => 'swarm' ]; public function mount() @@ -43,13 +46,13 @@ class StandaloneDocker extends Component } else { $this->network = new Cuid2(7); } - $this->name = Str::kebab("{$this->servers->first()->name}-{$this->network}"); + $this->name = str("{$this->servers->first()->name}-{$this->network}")->kebab(); } public function generate_name() { $this->server = Server::find($this->server_id); - $this->name = Str::kebab("{$this->server->name}-{$this->network}"); + $this->name = str("{$this->server->name}-{$this->network}")->kebab(); } public function submit() @@ -57,17 +60,30 @@ class StandaloneDocker extends Component $this->validate(); try { $this->server = Server::find($this->server_id); - $found = $this->server->standaloneDockers()->where('network', $this->network)->first(); - if ($found) { - $this->createNetworkAndAttachToProxy(); - $this->dispatch('error', 'Network already added to this server.'); - return; + if ($this->is_swarm) { + $found = $this->server->swarmDockers()->where('network', $this->network)->first(); + if ($found) { + $this->dispatch('error', 'Network already added to this server.'); + return; + } else { + $docker = SwarmDocker::create([ + 'name' => $this->name, + 'network' => $this->network, + 'server_id' => $this->server_id, + ]); + } } else { - $docker = ModelsStandaloneDocker::create([ - 'name' => $this->name, - 'network' => $this->network, - 'server_id' => $this->server_id, - ]); + $found = $this->server->standaloneDockers()->where('network', $this->network)->first(); + if ($found) { + $this->dispatch('error', 'Network already added to this server.'); + return; + } else { + $docker = ModelsStandaloneDocker::create([ + 'name' => $this->name, + 'network' => $this->network, + 'server_id' => $this->server_id, + ]); + } } $this->createNetworkAndAttachToProxy(); return $this->redirectRoute('destination.show', $docker->uuid, navigate: true); diff --git a/app/Livewire/Destination/Show.php b/app/Livewire/Destination/Show.php index 77495c83e..b9cbcc147 100644 --- a/app/Livewire/Destination/Show.php +++ b/app/Livewire/Destination/Show.php @@ -13,7 +13,11 @@ class Show extends Component public function scan() { - $alreadyAddedNetworks = $this->server->standaloneDockers; + if ($this->server->isSwarm()) { + $alreadyAddedNetworks = $this->server->swarmDockers; + } else { + $alreadyAddedNetworks = $this->server->standaloneDockers; + } $networks = instant_remote_process(['docker network ls --format "{{json .}}"'], $this->server, false); $this->networks = format_docker_command_output_to_json($networks)->filter(function ($network) { return $network['Name'] !== 'bridge' && $network['Name'] !== 'host' && $network['Name'] !== 'none'; diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php index 856a9b9a9..635e0de51 100644 --- a/app/Livewire/Project/New/Select.php +++ b/app/Livewire/Project/New/Select.php @@ -6,13 +6,12 @@ use App\Models\Project; use App\Models\Server; use Countable; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Cache; use Livewire\Component; class Select extends Component { public $current_step = 'type'; - public ?int $server = null; + public ?Server $server = null; public string $type; public string $server_id; public string $destination_uuid; @@ -31,7 +30,7 @@ class Select extends Component public ?string $search = null; protected $queryString = [ - 'server', + 'server_id', 'search' ]; @@ -111,7 +110,7 @@ class Select extends Component $this->setServer($server); } if (!is_null($this->server)) { - $foundServer = $this->servers->where('id', $this->server)->first(); + $foundServer = $this->servers->where('id', $this->server->id)->first(); if ($foundServer) { return $this->setServer($foundServer); } @@ -122,6 +121,7 @@ class Select extends Component public function setServer(Server $server) { $this->server_id = $server->id; + $this->server = $server; $this->standaloneDockers = $server->standaloneDockers; $this->swarmDockers = $server->swarmDockers; $this->current_step = 'destinations'; diff --git a/bootstrap/helpers/proxy.php b/bootstrap/helpers/proxy.php index b738b5a9d..b40edd1d2 100644 --- a/bootstrap/helpers/proxy.php +++ b/bootstrap/helpers/proxy.php @@ -15,10 +15,16 @@ function get_proxy_path() } function connectProxyToNetworks(Server $server) { - // Standalone networks - $networks = collect($server->standaloneDockers)->map(function ($docker) { - return $docker['network']; - }); + if ($server->isSwarm()) { + $networks = collect($server->swarmDockers)->map(function ($docker) { + return $docker['network']; + }); + } else { + // Standalone networks + $networks = collect($server->standaloneDockers)->map(function ($docker) { + return $docker['network']; + }); + } // Service networks foreach ($server->services()->get() as $service) { $networks->push($service->networks()); @@ -41,16 +47,30 @@ function connectProxyToNetworks(Server $server) $networks->push($network); } $networks = collect($networks)->flatten()->unique(); - if ($networks->count() === 0) { - $networks = collect(['coolify']); + if ($server->isSwarm()) { + if ($networks->count() === 0) { + $networks = collect(['coolify-overlay']); + } + $commands = $networks->map(function ($network) { + return [ + "echo 'Connecting coolify-proxy to $network network...'", + "docker network ls --format '{{.Name}}' | grep '^$network$' >/dev/null || docker network create --driver overlay --attachable $network >/dev/null", + "docker network connect $network coolify-proxy >/dev/null 2>&1 || true", + ]; + }); + } else { + if ($networks->count() === 0) { + $networks = collect(['coolify']); + } + $commands = $networks->map(function ($network) { + return [ + "echo 'Connecting coolify-proxy to $network network...'", + "docker network ls --format '{{.Name}}' | grep '^$network$' >/dev/null || docker network create --attachable $network >/dev/null", + "docker network connect $network coolify-proxy >/dev/null 2>&1 || true", + ]; + }); } - $commands = $networks->map(function ($network) { - return [ - "echo 'Connecting coolify-proxy to $network network...'", - "docker network ls --format '{{.Name}}' | grep '^$network$' >/dev/null || docker network create --attachable $network >/dev/null", - "docker network connect $network coolify-proxy >/dev/null 2>&1 || true", - ]; - }); + return $commands->flatten(); } function generate_default_proxy_configuration(Server $server) diff --git a/resources/views/destination/new.blade.php b/resources/views/destination/new.blade.php index 37cad6f7a..e3dbeee9b 100644 --- a/resources/views/destination/new.blade.php +++ b/resources/views/destination/new.blade.php @@ -1,3 +1,3 @@ - + diff --git a/resources/views/livewire/destination/new/standalone-docker.blade.php b/resources/views/livewire/destination/new/docker.blade.php similarity index 90% rename from resources/views/livewire/destination/new/standalone-docker.blade.php rename to resources/views/livewire/destination/new/docker.blade.php index 90335e51a..2fe0c6340 100644 --- a/resources/views/livewire/destination/new/standalone-docker.blade.php +++ b/resources/views/livewire/destination/new/docker.blade.php @@ -12,6 +12,7 @@ @endforeach + Save Destination diff --git a/resources/views/livewire/destination/show.blade.php b/resources/views/livewire/destination/show.blade.php index 5bc0b595a..1287e2ca2 100644 --- a/resources/views/livewire/destination/show.blade.php +++ b/resources/views/livewire/destination/show.blade.php @@ -11,7 +11,16 @@
Available for using: @forelse ($server->standaloneDockers as $docker) - + + + + @empty +
N/A
+ @endforelse + @forelse ($server->swarmDockers as $docker) + @empty diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index ab04b7ee3..e176cd379 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -232,27 +232,29 @@
- - @foreach ($standaloneDockers as $standaloneDocker) -
-
-
- Standalone Docker ({{ $standaloneDocker->name }}) -
-
- network: {{ $standaloneDocker->network }}
-
-
- @endforeach - @foreach ($swarmDockers as $swarmDocker) -