diff --git a/app/Actions/Service/StartService.php b/app/Actions/Service/StartService.php index 7b79b2f32d..6f73c2f45a 100644 --- a/app/Actions/Service/StartService.php +++ b/app/Actions/Service/StartService.php @@ -21,7 +21,7 @@ public function handle(Service $service) $commands[] = "echo 'Pulling images.'"; $commands[] = "docker compose pull"; $commands[] = "echo 'Starting containers.'"; - $commands[] = "docker compose up -d --remove-orphans --force-recreate --build"; + $commands[] = "docker compose up --wait --remove-orphans --force-recreate --build"; $commands[] = "docker network connect $service->uuid coolify-proxy >/dev/null 2>&1 || true"; $compose = data_get($service, 'docker_compose', []); $serviceNames = data_get(Yaml::parse($compose), 'services', []); diff --git a/app/Livewire/ActivityMonitor.php b/app/Livewire/ActivityMonitor.php index 2bfbe73485..703899b653 100644 --- a/app/Livewire/ActivityMonitor.php +++ b/app/Livewire/ActivityMonitor.php @@ -8,7 +8,7 @@ class ActivityMonitor extends Component { - public string|null $header = null; + public ?string $header = null; public $activityId; public $isPollingActive = false; @@ -26,31 +26,30 @@ public function newMonitorActivity($activityId) public function hydrateActivity() { - $this->activity = Activity::query() - ->find($this->activityId); + $this->activity = Activity::find($this->activityId); } public function polling() { $this->hydrateActivity(); - $this->setStatus(ProcessStatus::IN_PROGRESS); + // $this->setStatus(ProcessStatus::IN_PROGRESS); $exit_code = data_get($this->activity, 'properties.exitCode'); if ($exit_code !== null) { if ($exit_code === 0) { - $this->setStatus(ProcessStatus::FINISHED); + // $this->setStatus(ProcessStatus::FINISHED); } else { - $this->setStatus(ProcessStatus::ERROR); + // $this->setStatus(ProcessStatus::ERROR); } $this->isPollingActive = false; $this->dispatch('activityFinished'); } } - protected function setStatus($status) - { - $this->activity->properties = $this->activity->properties->merge([ - 'status' => $status, - ]); - $this->activity->save(); - } + // protected function setStatus($status) + // { + // $this->activity->properties = $this->activity->properties->merge([ + // 'status' => $status, + // ]); + // $this->activity->save(); + // } } diff --git a/app/Livewire/Project/Service/Index.php b/app/Livewire/Project/Service/Index.php index 4f3f9ce118..c2114bf15a 100644 --- a/app/Livewire/Project/Service/Index.php +++ b/app/Livewire/Project/Service/Index.php @@ -38,6 +38,7 @@ public function checkStatus() { dispatch_sync(new ContainerStatusJob($this->service->server)); $this->refreshStacks(); + $this->dispatch('serviceStatusChanged'); } public function refreshStacks() { diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php index 25cbeb17e8..b3551b8746 100644 --- a/app/Livewire/Project/Service/Navbar.php +++ b/app/Livewire/Project/Service/Navbar.php @@ -29,9 +29,8 @@ public function checkDeployments() } public function getListeners() { - $userId = auth()->user()->id; return [ - "echo-private:custom.{$userId},ServiceStatusChanged" => 'serviceStatusChanged', + "serviceStatusChanged" ]; } public function serviceStatusChanged() diff --git a/app/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Livewire/Project/Shared/ExecuteContainerCommand.php index c0a373c383..ec8bcb3401 100644 --- a/app/Livewire/Project/Shared/ExecuteContainerCommand.php +++ b/app/Livewire/Project/Shared/ExecuteContainerCommand.php @@ -10,6 +10,7 @@ use App\Models\StandaloneMysql; use App\Models\StandalonePostgresql; use App\Models\StandaloneRedis; +use Illuminate\Support\Sleep; use Livewire\Component; class ExecuteContainerCommand extends Component @@ -23,7 +24,16 @@ class ExecuteContainerCommand extends Component public string $workDir = ''; public Server $server; public $servers = []; - + public function getListeners() + { + return [ + "serviceStatusChanged", + ]; + } + public function serviceStatusChanged() + { + $this->getContainers(); + } protected $rules = [ 'server' => 'required', 'container' => 'required', @@ -33,8 +43,12 @@ class ExecuteContainerCommand extends Component public function mount() { - $this->containers = collect(); $this->parameters = get_route_parameters(); + $this->getContainers(); + } + public function getContainers() + { + $this->containers = collect(); if (data_get($this->parameters, 'application_uuid')) { $this->type = 'application'; $this->resource = Application::where('uuid', $this->parameters['application_uuid'])->firstOrFail(); @@ -92,10 +106,12 @@ public function runCommand() { $this->validate(); try { + // Wrap command to prevent escaped execution in the host. + $cmd = 'sh -c "' . str_replace('"', '\"', $this->command) . '"'; if (!empty($this->workDir)) { - $exec = "docker exec -w {$this->workDir} {$this->container} {$this->command}"; + $exec = "docker exec -w {$this->workDir} {$this->container} {$cmd}"; } else { - $exec = "docker exec {$this->container} {$this->command}"; + $exec = "docker exec {$this->container} {$cmd}"; } $activity = remote_process([$exec], $this->server, ignore_errors: true); $this->dispatch('newMonitorActivity', $activity->id); diff --git a/resources/views/livewire/project/service/index.blade.php b/resources/views/livewire/project/service/index.blade.php index ed25dd1694..ec1d769222 100644 --- a/resources/views/livewire/project/service/index.blade.php +++ b/resources/views/livewire/project/service/index.blade.php @@ -115,7 +115,7 @@ class="hover:text-warning">Logs
- +