isFunctional()) { return false; } if ($server->isBuildServer()) { if ($server->proxy) { $server->proxy = null; $server->save(); } return false; } $proxyType = $server->proxyType(); if (is_null($proxyType) || $proxyType === 'NONE' || $server->proxy->force_stop) { return false; } if (! $server->isProxyShouldRun()) { if ($fromUI) { throw new \Exception('Proxy should not run. You selected the Custom Proxy.'); } else { return false; } } if ($server->isSwarm()) { $status = getContainerStatus($server, 'coolify-proxy_traefik'); $server->proxy->set('status', $status); $server->save(); if ($status === 'running') { return false; } return true; } else { $status = getContainerStatus($server, 'coolify-proxy'); if ($status === 'running') { $server->proxy->set('status', 'running'); $server->save(); return false; } if ($server->settings->is_cloudflare_tunnel) { return false; } $ip = $server->ip; if ($server->id === 0) { $ip = 'host.docker.internal'; } $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); if (isset($proxyCompose)) { $yaml = Yaml::parse($proxyCompose); $portsToCheck = []; if ($server->proxyType() === ProxyTypes::TRAEFIK->value) { $ports = data_get($yaml, 'services.traefik.ports'); } elseif ($server->proxyType() === ProxyTypes::CADDY->value) { $ports = data_get($yaml, 'services.caddy.ports'); } if (isset($ports)) { foreach ($ports as $port) { $portsToCheck[] = str($port)->before(':')->value(); } } } } else { $portsToCheck = []; } } catch (\Exception $e) { Log::error('Error checking proxy: '.$e->getMessage()); } if (count($portsToCheck) === 0) { return false; } return true; } } }