diff --git a/app/Actions/Proxy/CheckProxy.php b/app/Actions/Proxy/CheckProxy.php index 6c8dd5234..27608547a 100644 --- a/app/Actions/Proxy/CheckProxy.php +++ b/app/Actions/Proxy/CheckProxy.php @@ -30,10 +30,6 @@ class CheckProxy if (is_null($proxyType) || $proxyType === 'NONE' || $server->proxy->force_stop) { return false; } - ['uptime' => $uptime, 'error' => $error] = $server->validateConnection(); - if (! $uptime) { - throw new \Exception($error); - } if (! $server->isProxyShouldRun()) { if ($fromUI) { throw new \Exception('Proxy should not run. You selected the Custom Proxy.'); @@ -68,6 +64,38 @@ class CheckProxy $portsToCheck = ['80', '443']; + foreach ($portsToCheck as $port) { + // Try multiple methods to check port availability + $commands = [ + // Method 1: Check /proc/net/tcp directly (convert port to hex) + "cat /proc/net/tcp | grep -q '00000000:".str_pad(dechex($port), 4, '0', STR_PAD_LEFT)."'", + // Method 2: Use ss command (modern alternative to netstat) + "ss -tuln | grep -q ':$port '", + // Method 3: Use lsof if available + "lsof -i :$port >/dev/null 2>&1", + // Method 4: Use fuser if available + "fuser $port/tcp >/dev/null 2>&1", + ]; + + $portInUse = false; + foreach ($commands as $command) { + try { + instant_remote_process([$command], $server); + $portInUse = true; + break; + } catch (\Throwable $e) { + + continue; + } + } + if ($portInUse) { + if ($fromUI) { + throw new \Exception("Port $port is in use.
You must stop the process using this port.

Docs: https://coolify.io/docs
Discord: https://coolify.io/discord"); + } else { + return false; + } + } + } try { if ($server->proxyType() !== ProxyTypes::NONE->value) { $proxyCompose = CheckConfiguration::run($server); @@ -94,16 +122,6 @@ class CheckProxy if (count($portsToCheck) === 0) { return false; } - foreach ($portsToCheck as $port) { - $connection = @fsockopen($ip, $port); - if (is_resource($connection) && fclose($connection)) { - if ($fromUI) { - throw new \Exception("Port $port is in use.
You must stop the process using this port.
Docs: https://coolify.io/docs
Discord: https://coollabs.io/discord"); - } else { - return false; - } - } - } return true; }