From e193490b9ffd96a90ed85add5ab62340889ee1e9 Mon Sep 17 00:00:00 2001 From: ShadowArcanist Date: Mon, 29 Sep 2025 05:26:02 +0530 Subject: [PATCH 01/11] Fixed incorrect caddy proxy config file path on ui --- app/Livewire/Server/Proxy.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Livewire/Server/Proxy.php b/app/Livewire/Server/Proxy.php index 5ef559862..9b345181c 100644 --- a/app/Livewire/Server/Proxy.php +++ b/app/Livewire/Server/Proxy.php @@ -43,9 +43,9 @@ public function mount() $this->redirectUrl = data_get($this->server, 'proxy.redirect_url'); } - public function getConfigurationFilePathProperty() + public function getConfigurationFilePathProperty(): string { - return $this->server->proxyPath().'docker-compose.yml'; + return rtrim($this->server->proxyPath(), '/') . '/docker-compose.yml'; } public function changeProxy() From b39690dfa2b1272d2ca9e07b59752d2956dcc77e Mon Sep 17 00:00:00 2001 From: ShadowArcanist Date: Thu, 9 Oct 2025 13:26:10 +0530 Subject: [PATCH 02/11] Changed docker --time command to -t since --time is deprecated on v28 --- app/Actions/Application/StopApplication.php | 2 +- app/Actions/Application/StopApplicationOneServer.php | 2 +- app/Actions/Database/StopDatabase.php | 2 +- app/Actions/Proxy/StopProxy.php | 2 +- app/Actions/Service/StopService.php | 2 +- app/Jobs/ApplicationDeploymentJob.php | 2 +- app/Jobs/DeleteResourceJob.php | 2 +- app/Livewire/Project/Application/Previews.php | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Actions/Application/StopApplication.php b/app/Actions/Application/StopApplication.php index ee3398b04..94651a3c1 100644 --- a/app/Actions/Application/StopApplication.php +++ b/app/Actions/Application/StopApplication.php @@ -39,7 +39,7 @@ public function handle(Application $application, bool $previewDeployments = fals foreach ($containersToStop as $containerName) { instant_remote_process(command: [ - "docker stop --time=30 $containerName", + "docker stop -t 30 $containerName", "docker rm -f $containerName", ], server: $server, throwError: false); } diff --git a/app/Actions/Application/StopApplicationOneServer.php b/app/Actions/Application/StopApplicationOneServer.php index 600b1cb9a..bf9fdee72 100644 --- a/app/Actions/Application/StopApplicationOneServer.php +++ b/app/Actions/Application/StopApplicationOneServer.php @@ -26,7 +26,7 @@ public function handle(Application $application, Server $server) if ($containerName) { instant_remote_process( [ - "docker stop --time=30 $containerName", + "docker stop -t 30 $containerName", "docker rm -f $containerName", ], $server diff --git a/app/Actions/Database/StopDatabase.php b/app/Actions/Database/StopDatabase.php index 5c881e743..c024c14e1 100644 --- a/app/Actions/Database/StopDatabase.php +++ b/app/Actions/Database/StopDatabase.php @@ -49,7 +49,7 @@ private function stopContainer($database, string $containerName, int $timeout = { $server = $database->destination->server; instant_remote_process(command: [ - "docker stop --time=$timeout $containerName", + "docker stop -t $timeout $containerName", "docker rm -f $containerName", ], server: $server, throwError: false); } diff --git a/app/Actions/Proxy/StopProxy.php b/app/Actions/Proxy/StopProxy.php index 29cc63b40..310185473 100644 --- a/app/Actions/Proxy/StopProxy.php +++ b/app/Actions/Proxy/StopProxy.php @@ -21,7 +21,7 @@ public function handle(Server $server, bool $forceStop = true, int $timeout = 30 ProxyStatusChangedUI::dispatch($server->team_id); instant_remote_process(command: [ - "docker stop --time=$timeout $containerName", + "docker stop -t $timeout $containerName", "docker rm -f $containerName", ], server: $server, throwError: false); diff --git a/app/Actions/Service/StopService.php b/app/Actions/Service/StopService.php index 3f4e96479..23b41e3f2 100644 --- a/app/Actions/Service/StopService.php +++ b/app/Actions/Service/StopService.php @@ -54,7 +54,7 @@ private function stopContainersInParallel(array $containersToStop, Server $serve $timeout = count($containersToStop) > 5 ? 10 : 30; $commands = []; $containerList = implode(' ', $containersToStop); - $commands[] = "docker stop --time=$timeout $containerList"; + $commands[] = "docker stop -t $timeout $containerList"; $commands[] = "docker rm -f $containerList"; instant_remote_process( command: $commands, diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 8ffaabde5..381857f83 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -2890,7 +2890,7 @@ private function graceful_shutdown_container(string $containerName) try { $timeout = isDev() ? 1 : 30; $this->execute_remote_command( - ["docker stop --time=$timeout $containerName", 'hidden' => true, 'ignore_errors' => true], + ["docker stop -t $timeout $containerName", 'hidden' => true, 'ignore_errors' => true], ["docker rm -f $containerName", 'hidden' => true, 'ignore_errors' => true] ); } catch (Exception $error) { diff --git a/app/Jobs/DeleteResourceJob.php b/app/Jobs/DeleteResourceJob.php index b9fbebcc9..45f113d96 100644 --- a/app/Jobs/DeleteResourceJob.php +++ b/app/Jobs/DeleteResourceJob.php @@ -153,7 +153,7 @@ private function stopPreviewContainers(array $containers, $server, int $timeout $containerList = implode(' ', array_map('escapeshellarg', $containerNames)); $commands = [ - "docker stop --time=$timeout $containerList", + "docker stop -t $timeout $containerList", "docker rm -f $containerList", ]; diff --git a/app/Livewire/Project/Application/Previews.php b/app/Livewire/Project/Application/Previews.php index 1cb2ef2c5..7a6e8c415 100644 --- a/app/Livewire/Project/Application/Previews.php +++ b/app/Livewire/Project/Application/Previews.php @@ -237,7 +237,7 @@ private function stopContainers(array $containers, $server) foreach ($containersToStop as $containerName) { instant_remote_process(command: [ - "docker stop --time=30 $containerName", + "docker stop -t 30 $containerName", "docker rm -f $containerName", ], server: $server, throwError: false); } From 6254cdfd5aa3cbe3cb4c1b82b72a2a3bada26004 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Thu, 27 Nov 2025 06:27:09 +0100 Subject: [PATCH 03/11] [service] fixed appwrite too many redirects error Without this fix users have to manually uncheck strip prefix option for appwrite, appwrite-console, and appwrite-realtime services for the service to work --- app/Livewire/Project/Resource/Create.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/Livewire/Project/Resource/Create.php b/app/Livewire/Project/Resource/Create.php index cdf95d2e4..c1be98ebb 100644 --- a/app/Livewire/Project/Resource/Create.php +++ b/app/Livewire/Project/Resource/Create.php @@ -102,13 +102,25 @@ public function mount() } }); } - $service->parse(isNew: true); + $service->parse(isNew: true); - return redirect()->route('project.service.configuration', [ - 'service_uuid' => $service->uuid, - 'environment_uuid' => $environment->uuid, - 'project_uuid' => $project->uuid, - ]); + // For Appwrite services, disable strip prefix for services that handle domain requests + if ($oneClickServiceName === 'appwrite') { + $servicesToDisableStripPrefix = ['appwrite', 'appwrite-console', 'appwrite-realtime']; + foreach ($servicesToDisableStripPrefix as $serviceName) { + $appService = $service->applications()->whereName($serviceName)->first(); + if ($appService) { + $appService->is_stripprefix_enabled = false; + $appService->save(); + } + } + } + + return redirect()->route('project.service.configuration', [ + 'service_uuid' => $service->uuid, + 'environment_uuid' => $environment->uuid, + 'project_uuid' => $project->uuid, + ]); } } $this->type = $type->value(); From bc997370f733bd12bde9f1033e4796e62982f180 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Thu, 27 Nov 2025 07:29:31 +0100 Subject: [PATCH 04/11] [service] fixed beszel realtime feature not working Without this fix users have to manually uncheck Enable Gzip Compression option for the dashboard realtime feature to work --- app/Livewire/Project/Resource/Create.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/app/Livewire/Project/Resource/Create.php b/app/Livewire/Project/Resource/Create.php index cdf95d2e4..e2d22b4fd 100644 --- a/app/Livewire/Project/Resource/Create.php +++ b/app/Livewire/Project/Resource/Create.php @@ -102,13 +102,22 @@ public function mount() } }); } - $service->parse(isNew: true); + $service->parse(isNew: true); - return redirect()->route('project.service.configuration', [ - 'service_uuid' => $service->uuid, - 'environment_uuid' => $environment->uuid, - 'project_uuid' => $project->uuid, - ]); + // For Beszel service disable gzip (fixes realtime not working issue) + if ($oneClickServiceName === 'beszel') { + $appService = $service->applications()->whereName('beszel')->first(); + if ($appService) { + $appService->is_gzip_enabled = false; + $appService->save(); + } + } + + return redirect()->route('project.service.configuration', [ + 'service_uuid' => $service->uuid, + 'environment_uuid' => $environment->uuid, + 'project_uuid' => $project->uuid, + ]); } } $this->type = $type->value(); From cc727b2c702bce7bea534d0db946c336e9d09857 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Thu, 27 Nov 2025 08:07:06 +0100 Subject: [PATCH 05/11] [service] Add postgresus to predefined docker networks by default Without this, users have to manually enable "Connect to Predefined Networks" inorder to access one click databases from postgresus dashboard --- app/Livewire/Project/Resource/Create.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Livewire/Project/Resource/Create.php b/app/Livewire/Project/Resource/Create.php index cdf95d2e4..211d4723d 100644 --- a/app/Livewire/Project/Resource/Create.php +++ b/app/Livewire/Project/Resource/Create.php @@ -81,7 +81,7 @@ public function mount() 'destination_id' => $destination->id, 'destination_type' => $destination->getMorphClass(), ]; - if ($oneClickServiceName === 'cloudflared' || $oneClickServiceName === 'pgadmin') { + if ($oneClickServiceName === 'cloudflared' || $oneClickServiceName === 'pgadmin' || $oneClickServiceName === 'postgresus') { data_set($service_payload, 'connect_to_docker_network', true); } $service = Service::create($service_payload); From eda0d133992fcfc5a7fd200898325c453cee5442 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:21:32 +0100 Subject: [PATCH 06/11] fix: prevent Livewire snapshot error in database restore modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wrap ActivityMonitor components in wire:ignore to prevent parent component re-renders from destroying the Livewire component and causing "Snapshot missing" errors in production mode. The issue occurred when toggling the "Backup includes all databases" checkbox during database restore operations. The checkbox uses wire:model.live which triggers immediate parent re-renders, destroying the nested ActivityMonitor component in the slide-over. Changes: - Wrap ActivityMonitor in wire:ignore div in import.blade.php - Apply same fix preventatively to heading.blade.php wire:ignore prevents Livewire from re-rendering the DOM inside the wrapper, while still allowing event listeners and Alpine.js functionality to work correctly. The existing reset logic (slideOverClosed event) continues to function properly. Fixes #7335 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- resources/views/livewire/project/database/heading.blade.php | 4 +++- resources/views/livewire/project/database/import.blade.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/views/livewire/project/database/heading.blade.php b/resources/views/livewire/project/database/heading.blade.php index b09adcc4e..0e67a3606 100644 --- a/resources/views/livewire/project/database/heading.blade.php +++ b/resources/views/livewire/project/database/heading.blade.php @@ -3,7 +3,9 @@ Database Startup - +
+ +