diff --git a/app/Actions/Proxy/CheckProxy.php b/app/Actions/Proxy/CheckProxy.php index 5a1ae56cf..32a4897a6 100644 --- a/app/Actions/Proxy/CheckProxy.php +++ b/app/Actions/Proxy/CheckProxy.php @@ -35,6 +35,9 @@ public function handle(Server $server, $fromUI = false) $server->save(); return false; } + if ($server->settings->is_cloudflare_tunnel) { + return false; + } $ip = $server->ip; if ($server->id === 0) { $ip = 'host.docker.internal'; diff --git a/app/Actions/Server/ConfigureCloudflared.php b/app/Actions/Server/ConfigureCloudflared.php new file mode 100644 index 000000000..6b08b3de6 --- /dev/null +++ b/app/Actions/Server/ConfigureCloudflared.php @@ -0,0 +1,44 @@ + [ + "coolify-cloudflared" => [ + "container_name" => "coolify-cloudflared", + "image" => "cloudflare/cloudflared:latest", + "restart" => RESTART_MODE, + "network_mode" => "host", + "command" => "tunnel run", + "environment" => [ + "TUNNEL_TOKEN={$cloudflare_token}", + ], + ], + ], + ]; + $config = Yaml::dump($config, 12, 2); + $docker_compose_yml_base64 = base64_encode($config); + $commands = collect([ + "mkdir -p /tmp/cloudflared && cd /tmp/cloudflared", + "echo '$docker_compose_yml_base64' | base64 -d > docker-compose.yml", + "docker compose pull", + "docker compose down -v --remove-orphans > /dev/null 2>&1", + "docker compose up -d --remove-orphans", + ]); + instant_remote_process($commands, $server); + } catch (\Throwable $e) { + ray($e); + throw $e; + } + } +} diff --git a/app/Http/Livewire/Server/New/ByIp.php b/app/Http/Livewire/Server/New/ByIp.php deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/Livewire/Server/ConfigureCloudflareTunnels.php b/app/Livewire/Server/ConfigureCloudflareTunnels.php new file mode 100644 index 000000000..7a07a4d04 --- /dev/null +++ b/app/Livewire/Server/ConfigureCloudflareTunnels.php @@ -0,0 +1,42 @@ +where('id', $this->server_id)->firstOrFail(); + $server->settings->is_cloudflare_tunnel = true; + $server->settings->save(); + $this->dispatch('success', 'Cloudflare Tunnels configured successfully.'); + $this->dispatch('serverInstalled'); + } catch (\Throwable $e) { + return handleError($e, $this); + } + } + public function submit() + { + try { + $server = Server::ownedByCurrentTeam()->where('id', $this->server_id)->firstOrFail(); + ConfigureCloudflared::run($server, $this->cloudflare_token); + $server->settings->is_cloudflare_tunnel = true; + $server->settings->save(); + $this->dispatch('success', 'Cloudflare Tunnels configured successfully.'); + $this->dispatch('serverInstalled'); + } catch(\Throwable $e) { + return handleError($e, $this); + } + } + public function render() + { + return view('livewire.server.configure-cloudflare-tunnels'); + } +} diff --git a/resources/css/app.css b/resources/css/app.css index 37df40230..b7965ebbc 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -195,7 +195,7 @@ .kbd-custom { } .box { - @apply flex lg:flex-row flex-col p-2 transition-colors cursor-pointer min-h-[4rem] dark:bg-coolgray-100 bg-white border border-neutral-200 dark:border-black hover:bg-neutral-100 dark:hover:bg-coollabs-100 dark:hover:text-white hover:no-underline; + @apply flex lg:flex-row flex-col p-2 transition-colors cursor-pointer min-h-[4rem] dark:bg-coolgray-100 bg-white border text-black dark:text-white hover:text-black border-neutral-200 dark:border-black hover:bg-neutral-100 dark:hover:bg-coollabs-100 dark:hover:text-white hover:no-underline; } .box-boarding { @apply flex lg:flex-row flex-col p-2 transition-colors cursor-pointer min-h-[4rem] dark:bg-coolgray-100 dark:text-white bg-neutral-50 border border-neutral-200 dark:border-black hover:bg-neutral-100 dark:hover:bg-coollabs-100 dark:hover:text-white hover:text-black hover:no-underline text-black ; diff --git a/resources/views/livewire/server/configure-cloudflare-tunnels.blade.php b/resources/views/livewire/server/configure-cloudflare-tunnels.blade.php new file mode 100644 index 000000000..92811b929 --- /dev/null +++ b/resources/views/livewire/server/configure-cloudflare-tunnels.blade.php @@ -0,0 +1,9 @@ +
+ + + Configure +

Or

+ I already configured the tunnel + manually on the server + diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index 80818c4db..260d4bcda 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -70,17 +70,27 @@ class="w-full mt-8 mb-4 font-bold box-without-bg bg-coollabs hover:bg-coollabs-1
- @if (!$server->isLocalhost()) - @if ($server->settings->is_build_server) + @if ($server->isFunctional()) + @if (!$server->isLocalhost()) - @else - - @if ($server->isSwarm()) -
Swarm support is experimental.
- @endif +
+

Cloudflare Tunnels +

+ +
+ {{-- @if ($server->settings->is_cloudflare_tunnel) --}} + + {{-- @endif --}} + {{-- + + --}} +

Swarm (experimental)

+
Read the docs here. +
@if ($server->settings->is_swarm_worker) here." label="Is it a Swarm Manager?" /> @endif + @if ($server->settings->is_swarm_manager)