diff --git a/app/Actions/Proxy/InstallProxy.php b/app/Actions/Proxy/InstallProxy.php index c967a4687..1e2369f8a 100644 --- a/app/Actions/Proxy/InstallProxy.php +++ b/app/Actions/Proxy/InstallProxy.php @@ -12,6 +12,7 @@ class InstallProxy { public function __invoke(Server $server): Activity { + // TODO: check for other proxies if (is_null(data_get($server, 'proxy.type'))) { $server->proxy->type = ProxyTypes::TRAEFIK_V2->value; $server->proxy->status = ProxyStatus::EXITED->value; diff --git a/app/Http/Livewire/Project/Application/Status.php b/app/Http/Livewire/Project/Application/Status.php deleted file mode 100644 index 107cce4ae..000000000 --- a/app/Http/Livewire/Project/Application/Status.php +++ /dev/null @@ -1,17 +0,0 @@ -application->refresh(); - $this->emit('applicationStatusChanged'); - } -} diff --git a/app/Http/Livewire/Server/Form.php b/app/Http/Livewire/Server/Form.php index c7c056665..eeb0df413 100644 --- a/app/Http/Livewire/Server/Form.php +++ b/app/Http/Livewire/Server/Form.php @@ -63,7 +63,7 @@ class Form extends Component } else { $this->server->settings->is_usable = true; $this->server->settings->save(); - $this->emit('serverValidated'); + $this->emit('proxyStatusUpdated'); } } catch (\Exception $e) { $this->server->settings->is_reachable = false; diff --git a/app/Http/Livewire/Server/Proxy.php b/app/Http/Livewire/Server/Proxy.php index 95e3e7e76..e790e3565 100644 --- a/app/Http/Livewire/Server/Proxy.php +++ b/app/Http/Livewire/Server/Proxy.php @@ -3,7 +3,6 @@ namespace App\Http\Livewire\Server; use App\Actions\Proxy\CheckProxySettingsInSync; -use App\Actions\Proxy\InstallProxy; use App\Enums\ProxyTypes; use Illuminate\Support\Str; use App\Models\Server; @@ -17,12 +16,12 @@ class Proxy extends Component public $proxy_settings = null; public string|null $redirect_url = null; - protected $listeners = ['serverValidated', 'saveConfiguration']; + protected $listeners = ['proxyStatusUpdated', 'saveConfiguration']; public function mount() { $this->redirect_url = $this->server->proxy->redirect_url; } - public function serverValidated() + public function proxyStatusUpdated() { $this->server->refresh(); } @@ -44,7 +43,7 @@ class Proxy extends Component ], $this->server); $this->server->proxy->status = 'exited'; $this->server->save(); - $this->server->refresh(); + $this->emit('proxyStatusUpdated'); } public function saveConfiguration() { diff --git a/app/Http/Livewire/Server/Proxy/Deploy.php b/app/Http/Livewire/Server/Proxy/Deploy.php index aa12886f2..afb7202a4 100644 --- a/app/Http/Livewire/Server/Proxy/Deploy.php +++ b/app/Http/Livewire/Server/Proxy/Deploy.php @@ -11,7 +11,7 @@ class Deploy extends Component { public Server $server; public $proxy_settings = null; - protected $listeners = ['proxyStatusUpdated', 'serverValidated' => 'proxyStatusUpdated']; + protected $listeners = ['proxyStatusUpdated']; public function proxyStatusUpdated() { $this->server->refresh(); diff --git a/app/Http/Livewire/Server/Proxy/Status.php b/app/Http/Livewire/Server/Proxy/Status.php index 8a7725f85..e4d18e4a2 100644 --- a/app/Http/Livewire/Server/Proxy/Status.php +++ b/app/Http/Livewire/Server/Proxy/Status.php @@ -9,7 +9,7 @@ use Livewire\Component; class Status extends Component { public Server $server; - protected $listeners = ['proxyStatusUpdated', 'serverValidated' => 'proxyStatusUpdated']; + protected $listeners = ['proxyStatusUpdated']; public function proxyStatusUpdated() { $this->server->refresh(); @@ -17,7 +17,7 @@ class Status extends Component public function proxyStatus() { try { - dispatch(new ProxyContainerStatusJob( + dispatch_sync(new ProxyContainerStatusJob( server: $this->server )); $this->emit('proxyStatusUpdated'); diff --git a/app/Http/Livewire/Settings/Configuration.php b/app/Http/Livewire/Settings/Configuration.php index 889e72009..a5c9ad335 100644 --- a/app/Http/Livewire/Settings/Configuration.php +++ b/app/Http/Livewire/Settings/Configuration.php @@ -2,10 +2,10 @@ namespace App\Http\Livewire\Settings; +use App\Actions\Proxy\InstallProxy; use App\Jobs\ProxyCheckJob; use App\Models\InstanceSettings as ModelsInstanceSettings; use App\Models\Server; -use Illuminate\Support\Facades\Http; use Livewire\Component; use Spatie\Url\Url; use Symfony\Component\Yaml\Yaml; @@ -108,6 +108,7 @@ class Configuration extends Component ]; } $this->save_configuration_to_disk($traefik_dynamic_conf, $file); + dispatch(new ProxyCheckJob($this->server)); } } private function save_configuration_to_disk(array $traefik_dynamic_conf, string $file) @@ -137,12 +138,8 @@ class Configuration extends Component } $this->validate(); $this->settings->save(); - $this->server = Server::findOrFail(0); $this->setup_instance_fqdn(); - if ($this->settings->fqdn) { - dispatch(new ProxyCheckJob()); - } $this->emit('success', 'Instance settings updated successfully!'); } } diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 7289f08a3..d9e080648 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -107,7 +107,7 @@ class ApplicationDeploymentJob implements ShouldQueue public function handle(): void { - ray()->measure(); + // ray()->measure(); $this->application_deployment_queue->update([ 'status' => ApplicationDeploymentStatus::IN_PROGRESS->value, ]); @@ -117,6 +117,7 @@ class ApplicationDeploymentJob implements ShouldQueue } else { $this->deploy(); } + if ($this->application->fqdn) dispatch(new ProxyCheckJob($this->server)); $this->next(ApplicationDeploymentStatus::FINISHED->value); } catch (\Exception $e) { ray($e); @@ -131,7 +132,7 @@ class ApplicationDeploymentJob implements ShouldQueue "hidden" => true, ] ); - ray()->measure(); + // ray()->measure(); } } public function failed(Throwable $exception): void @@ -647,4 +648,4 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf"); ); $this->commit = $this->saved_outputs->get('git_commit_sha'); } -} \ No newline at end of file +} diff --git a/app/Jobs/ProxyCheckJob.php b/app/Jobs/ProxyCheckJob.php index bdc38b875..f73e23b87 100755 --- a/app/Jobs/ProxyCheckJob.php +++ b/app/Jobs/ProxyCheckJob.php @@ -15,30 +15,33 @@ class ProxyCheckJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - /** - * Create a new job instance. - */ - public function __construct() + public function __construct(protected Server|null $server) { } - - /** - * Execute the job. - */ public function handle() { try { $container_name = 'coolify-proxy'; - $servers = Server::whereRelation('settings', 'is_usable', true)->where('proxy->type', ProxyTypes::TRAEFIK_V2)->get(); - - foreach ($servers as $server) { - $status = get_container_status(server: $server, container_id: $container_name); + if ($this->server) { + ray('Checking proxy for server: ' . $this->server->name); + $status = get_container_status(server: $this->server, container_id: $container_name); if ($status === 'running') { - continue; + return; + } + resolve(InstallProxy::class)($this->server); + } else { + $servers = Server::whereRelation('settings', 'is_usable', true)->get(); + + foreach ($servers as $server) { + $status = get_container_status(server: $server, container_id: $container_name); + if ($status === 'running') { + continue; + } + resolve(InstallProxy::class)($server); } - resolve(InstallProxy::class)($server); } } catch (\Throwable $th) { + ray($th->getMessage()); //throw $th; } } diff --git a/app/Jobs/ProxyContainerStatusJob.php b/app/Jobs/ProxyContainerStatusJob.php index 7c4b15ca5..02cd37568 100644 --- a/app/Jobs/ProxyContainerStatusJob.php +++ b/app/Jobs/ProxyContainerStatusJob.php @@ -49,7 +49,10 @@ class ProxyContainerStatusJob implements ShouldQueue, ShouldBeUnique $this->server->save(); } } catch (\Exception $e) { - ray($e->getMessage()); + if ($e->getCode() === 1) { + $this->server->proxy->status = 'exited'; + $this->server->save(); + } } } } diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php index fadd19255..cb718d8aa 100644 --- a/bootstrap/helpers/remoteProcess.php +++ b/bootstrap/helpers/remoteProcess.php @@ -114,7 +114,7 @@ function instant_remote_process(array $command, Server $server, $throwError = tr if (!$throwError) { return null; } - throw new \RuntimeException($process->errorOutput()); + throw new \RuntimeException($process->errorOutput(), $exitCode); } return $output; } diff --git a/database/seeders/ServerSeeder.php b/database/seeders/ServerSeeder.php index 927cee11c..e43092b12 100644 --- a/database/seeders/ServerSeeder.php +++ b/database/seeders/ServerSeeder.php @@ -25,10 +25,10 @@ class ServerSeeder extends Seeder 'ip' => "coolify-testing-host", 'team_id' => $root_team->id, 'private_key_id' => $private_key_1->id, - 'proxy' => ServerMetadata::from([ - 'type' => ProxyTypes::TRAEFIK_V2->value, - 'status' => ProxyStatus::EXITED->value - ]), + // 'proxy' => ServerMetadata::from([ + // 'type' => ProxyTypes::TRAEFIK_V2->value, + // 'status' => ProxyStatus::EXITED->value + // ]), ]); Server::create([ 'name' => "testing-local-docker-container-2", @@ -38,4 +38,4 @@ class ServerSeeder extends Seeder 'private_key_id' => $private_key_1->id ]); } -} \ No newline at end of file +} diff --git a/resources/views/components/server/navbar.blade.php b/resources/views/components/server/navbar.blade.php index dcfd76dbb..5fe9b0759 100644 --- a/resources/views/components/server/navbar.blade.php +++ b/resources/views/components/server/navbar.blade.php @@ -26,9 +26,11 @@ ]) }}"> - @if (request()->routeIs('server.proxy')) -
-