diff --git a/app/Actions/Server/UpdateCoolify.php b/app/Actions/Server/UpdateCoolify.php new file mode 100644 index 000000000..1234dd231 --- /dev/null +++ b/app/Actions/Server/UpdateCoolify.php @@ -0,0 +1,67 @@ +server = Server::where('name', $localhost_name)->firstOrFail(); + $this->latest_version = get_latest_version_of_coolify(); + $this->current_version = config('version'); + ray('latest version:' . $this->latest_version . " current version: " . $this->current_version . ' force: ' . $force); + if ($force) { + $this->update(); + } else { + $instance_settings = InstanceSettings::get(); + ray($instance_settings); + if (!$instance_settings->is_auto_update_enabled) { + throw new \Exception('Auto update is disabled'); + } + if ($this->latest_version === $this->current_version) { + throw new \Exception('Already on latest version'); + } + if (version_compare($this->latest_version, $this->current_version, '<')) { + throw new \Exception('Latest version is lower than current version?!'); + } + $this->update(); + } + return; + } catch (\Exception $e) { + ray('InstanceAutoUpdateJob failed'); + ray($e->getMessage()); + return; + } + } + private function update() + { + if (config('app.env') === 'local') { + ray('Running update on local docker container'); + remote_process([ + "sleep 10" + ], $this->server); + ray('Update done'); + return; + } else { + ray('Running update on production server'); + remote_process([ + "curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh -o /data/coolify/source/upgrade.sh", + "bash /data/coolify/source/upgrade.sh $this->latest_version" + ], $this->server); + return; + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index f7c0778af..095a4c42c 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -14,12 +14,12 @@ class Kernel extends ConsoleKernel { if (config('app.env') === 'local') { $schedule->command('horizon:snapshot')->everyMinute(); - $schedule->job(new InstanceDockerCleanupJob)->everyMinute(); - $schedule->job(new InstanceAutoUpdateJob(true))->everyMinute(); + // $schedule->job(new InstanceDockerCleanupJob)->everyMinute(); + // $schedule->job(new InstanceAutoUpdateJob(true))->everyMinute(); } else { $schedule->command('horizon:snapshot')->everyFiveMinutes(); $schedule->job(new InstanceDockerCleanupJob)->everyFiveMinutes(); - $schedule->job(new InstanceAutoUpdateJob)->everyFifteenMinutes(); + $schedule->job(new InstanceAutoUpdateJob)->everyTenMinutes(); } } protected function commands(): void diff --git a/app/Http/Livewire/Upgrade.php b/app/Http/Livewire/Upgrade.php index 0ac47576b..7c1fc8556 100644 --- a/app/Http/Livewire/Upgrade.php +++ b/app/Http/Livewire/Upgrade.php @@ -2,8 +2,8 @@ namespace App\Http\Livewire; +use App\Actions\Server\UpdateCoolify; use Masmerise\Toaster\Toaster; -use App\Jobs\InstanceAutoUpdateJob; use Livewire\Component; class Upgrade extends Component @@ -13,7 +13,7 @@ class Upgrade extends Component { try { $this->showProgress = true; - dispatch(new InstanceAutoUpdateJob(force: true)); + resolve(UpdateCoolify::class)(true); Toaster::success('Update started.'); } catch (\Exception $e) { return general_error_handler(err: $e, that: $this); diff --git a/app/Jobs/InstanceAutoUpdateJob.php b/app/Jobs/InstanceAutoUpdateJob.php index bb3e65089..b0b19aef1 100644 --- a/app/Jobs/InstanceAutoUpdateJob.php +++ b/app/Jobs/InstanceAutoUpdateJob.php @@ -2,6 +2,7 @@ namespace App\Jobs; +use App\Actions\Server\UpdateCoolify; use App\Models\InstanceSettings; use App\Models\Server; use Exception; @@ -11,7 +12,6 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use Log; class InstanceAutoUpdateJob implements ShouldQueue, ShouldBeUnique { @@ -19,70 +19,11 @@ class InstanceAutoUpdateJob implements ShouldQueue, ShouldBeUnique public $timeout = 120; - public Server $server; - public string $latest_version; - public string $current_version; - - public function __construct(private bool $force = false) { } public function handle(): void { - try { - ray('Running InstanceAutoUpdateJob'); - $localhost_name = 'localhost'; - if (config('app.env') === 'local') { - $localhost_name = 'testing-local-docker-container'; - } - $this->server = Server::where('name', $localhost_name)->firstOrFail(); - $this->latest_version = get_latest_version_of_coolify(); - $this->current_version = config('version'); - ray('latest version:' . $this->latest_version . " current version: " . $this->current_version . ' force: ' . $this->force); - if ($this->force) { - $this->update(); - } else { - $instance_settings = InstanceSettings::get(); - ray($instance_settings); - if (!$instance_settings->is_auto_update_enabled) { - throw new \Exception('Auto update is disabled'); - } - if ($this->latest_version === $this->current_version) { - throw new \Exception('Already on latest version'); - } - if (version_compare($this->latest_version, $this->current_version, '<')) { - throw new \Exception('Latest version is lower than current version?!'); - } - $this->update(); - } - return; - } catch (\Exception $e) { - ray('InstanceAutoUpdateJob failed'); - ray($e->getMessage()); - return; - } - } - private function update() - { - if (config('app.env') === 'local') { - ray('Running update on local docker container'); - instant_remote_process([ - "sleep 10" - ], $this->server); - ray('Update done'); - return; - } else { - ray('Running update on production server'); - instant_remote_process([ - "curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh -o /data/coolify/source/upgrade.sh", - "bash /data/coolify/source/upgrade.sh $this->latest_version" - ], $this->server); - return; - } - } - - public function failed(Exception $exception) - { - return; + resolve(UpdateCoolify::class)($this->force); } } diff --git a/resources/views/livewire/upgrade.blade.php b/resources/views/livewire/upgrade.blade.php index 16feb4c89..6a09a5a02 100644 --- a/resources/views/livewire/upgrade.blade.php +++ b/resources/views/livewire/upgrade.blade.php @@ -30,9 +30,8 @@ fetch('/api/health') .then(response => { if (response.ok) { - console.log('Server is back online. Reloading...') + Toaster.success('Coolify is back online. Reloading...') setTimeout(() => { - Toaster.success('Coolify started. Reloading!') if (checkHealthInterval) clearInterval(checkHealthInterval); window.location.reload(); }, 2000)