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 @@ class CheckProxy $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/config/sentry.php b/config/sentry.php index 295643a93..0958a5e3c 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.246', + 'release' => '4.0.0-beta.247', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index c7cc17991..c5f90b65a 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ + + + 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..0265a1098 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -70,17 +70,27 @@
- @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) @endif + @if ($server->settings->is_swarm_manager) @endif @endif + @else + @endif +
diff --git a/versions.json b/versions.json index faad06660..851d1965a 100644 --- a/versions.json +++ b/versions.json @@ -1,7 +1,7 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.246" + "version": "4.0.0-beta.247" } } }