{"record":{"id":"fbeca86cccdfb269","repo":"coollabsio/coolify","slug":"prerequisites-missingcommands-could-not-be-in","errorCode":null,"errorMessage":"Prerequisites ({$missingCommands}) could not be installed after {$this->maxPrerequisiteInstallAttempts} attempts. Please install them manually.","messagePattern":"Prerequisites \\((.+?)\\) could not be installed after (.+?) attempts\\. Please install them manually\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"app/Livewire/Boarding/Index.php","lineNumber":367,"sourceCode":"            ]);\n            $this->serverReachable = true;\n        } catch (\\Throwable $e) {\n            $this->serverReachable = false;\n            $this->createdServer->settings()->update([\n                'is_reachable' => false,\n            ]);\n\n            return handleError(error: $e, livewire: $this);\n        }\n\n        try {\n            // Check prerequisites\n            $validationResult = $this->createdServer->validatePrerequisites();\n            if (! $validationResult['success']) {\n                // Check if we've exceeded max attempts\n                if ($this->prerequisiteInstallAttempts >= $this->maxPrerequisiteInstallAttempts) {\n                    $missingCommands = implode(', ', $validationResult['missing']);\n                    throw new \\Exception(\"Prerequisites ({$missingCommands}) could not be installed after {$this->maxPrerequisiteInstallAttempts} attempts. Please install them manually.\");\n                }\n\n                // Start async installation and wait for completion via ActivityMonitor\n                $activity = $this->createdServer->installPrerequisites();\n                $this->prerequisiteInstallAttempts++;\n                $this->dispatch('activityMonitor', $activity->id, 'prerequisitesInstalled');\n\n                // Return early - handlePrerequisitesInstalled() will be called when installation completes\n                return;\n            }\n\n            // Prerequisites are already installed, continue with validation\n            $this->continueValidation();\n        } catch (\\Throwable $e) {\n            return handleError(error: $e, livewire: $this);\n        }\n    }\n","sourceCodeStart":349,"sourceCodeEnd":385,"githubUrl":"https://github.com/coollabsio/coolify/blob/70b9acc42467278373e00de77abb40684e25b395/app/Livewire/Boarding/Index.php#L349-L385","documentation":"During server onboarding, Coolify validates required commands on the target server via Server::validatePrerequisites() (ValidatePrerequisites action) and, when some are missing, starts an automatic install and waits via the activity monitor. Once prerequisiteInstallAttempts reaches maxPrerequisiteInstallAttempts (3) and validation still reports missing commands, onboarding aborts with the list of commands that could not be installed.","triggerScenarios":"installPrerequisites() runs but the server cannot complete it: no outbound access to package mirrors, an unsupported or broken package manager, a non-root SSH user without sudo, or a read-only filesystem - so after 3 attempts the commands are still missing.","commonSituations":"Hardened or firewalled servers with blocked egress; minimal or exotic distros (Alpine, NixOS); CI containers without a package manager; cloud images with broken apt/yum sources.","solutions":["SSH in and install the listed commands manually (e.g. `apt-get update && apt-get install -y curl wget git jq`), then retry validation in the boarding UI","Verify the server has working outbound internet and a functioning package manager (run `apt-get update` or `dnf update` by hand)","Use a supported OS (Ubuntu/Debian/Rocky/Alma) and an SSH user with root or passwordless sudo"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"# from your workstation, before onboarding the server:\nssh user@server 'for c in curl wget git jq; do command -v $c >/dev/null || echo missing: $c; done'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pre-install Coolify's required commands in your server bootstrap (ansible, cloud-init, Dockerfile)","Confirm the SSH user has root or passwordless sudo before starting onboarding","Allow outbound access to the distro's package mirrors"],"tags":["onboarding","prerequisites","ssh","package-manager","server-setup"],"backgroundTag":"prerequisite-install-failed","analyzedSha":"70b9acc42467278373e00de77abb40684e25b395","analyzedAt":"2026-08-17T01:41:01.313Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}