whereUuid($serverUuid)->firstOrFail(); if ($isContainer) { $status = getContainerStatus($server, $identifier); if ($status !== 'running') { return; } $command = SshMultiplexingHelper::generateSshCommand($server, "docker exec -it {$identifier} sh -c 'if [ -f ~/.profile ]; then . ~/.profile; fi; if [ -n \"\$SHELL\" ]; then exec \$SHELL; else sh; fi'"); } else { $command = SshMultiplexingHelper::generateSshCommand($server, "sh -c 'if [ -f ~/.profile ]; then . ~/.profile; fi; if [ -n \"\$SHELL\" ]; then exec \$SHELL; else sh; fi'"); } // ssh command is sent back to frontend then to websocket // this is done because the websocket connection is not available here // a better solution would be to remove websocket on NodeJS and work with something like // 1. Laravel Pusher/Echo connection (not possible without a sdk) // 2. Ratchet / Revolt / ReactPHP / Event Loop (possible but hard to implement and huge dependencies) // 3. Just found out about this https://github.com/sirn-se/websocket-php, perhaps it can be used // 4. Follow-up discussions here: // - https://github.com/coollabsio/coolify/issues/2298 // - https://github.com/coollabsio/coolify/discussions/3362 $this->dispatch('send-back-command', $command); } public function render() { return view('livewire.project.shared.terminal'); } }