fix: proxy status
fix: start proxy in case any dns set somewhere
This commit is contained in:
parent
48ad40dea2
commit
e9ba295a1e
@ -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;
|
||||
|
@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Livewire\Project\Application;
|
||||
|
||||
use App\Models\Application;
|
||||
use Livewire\Component;
|
||||
|
||||
class Status extends Component
|
||||
{
|
||||
public Application $application;
|
||||
|
||||
public function applicationStatusChanged()
|
||||
{
|
||||
$this->application->refresh();
|
||||
$this->emit('applicationStatusChanged');
|
||||
}
|
||||
}
|
@ -63,7 +63,7 @@ public function validateServer()
|
||||
} 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;
|
||||
|
@ -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 @@ public function stopProxy()
|
||||
], $this->server);
|
||||
$this->server->proxy->status = 'exited';
|
||||
$this->server->save();
|
||||
$this->server->refresh();
|
||||
$this->emit('proxyStatusUpdated');
|
||||
}
|
||||
public function saveConfiguration()
|
||||
{
|
||||
|
@ -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();
|
||||
|
@ -9,7 +9,7 @@
|
||||
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 @@ public function proxyStatusUpdated()
|
||||
public function proxyStatus()
|
||||
{
|
||||
try {
|
||||
dispatch(new ProxyContainerStatusJob(
|
||||
dispatch_sync(new ProxyContainerStatusJob(
|
||||
server: $this->server
|
||||
));
|
||||
$this->emit('proxyStatusUpdated');
|
||||
|
@ -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 @@ private function setup_instance_fqdn()
|
||||
];
|
||||
}
|
||||
$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 @@ public function submit()
|
||||
}
|
||||
$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!');
|
||||
}
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ public function __construct(int $application_deployment_queue_id)
|
||||
|
||||
public function handle(): void
|
||||
{
|
||||
ray()->measure();
|
||||
// ray()->measure();
|
||||
$this->application_deployment_queue->update([
|
||||
'status' => ApplicationDeploymentStatus::IN_PROGRESS->value,
|
||||
]);
|
||||
@ -117,6 +117,7 @@ public function handle(): void
|
||||
} 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 @@ public function handle(): void
|
||||
"hidden" => true,
|
||||
]
|
||||
);
|
||||
ray()->measure();
|
||||
// ray()->measure();
|
||||
}
|
||||
}
|
||||
public function failed(Throwable $exception): void
|
||||
@ -647,4 +648,4 @@ private function clone_repository()
|
||||
);
|
||||
$this->commit = $this->saved_outputs->get('git_commit_sha');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,10 @@ public function handle(): void
|
||||
$this->server->save();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
ray($e->getMessage());
|
||||
if ($e->getCode() === 1) {
|
||||
$this->server->proxy->status = 'exited';
|
||||
$this->server->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -25,10 +25,10 @@ public function run(): void
|
||||
'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 @@ public function run(): void
|
||||
'private_key_id' => $private_key_1->id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,9 +26,11 @@
|
||||
]) }}">
|
||||
<button>Destinations</button>
|
||||
</a>
|
||||
@if (request()->routeIs('server.proxy'))
|
||||
<div class="flex-1"></div>
|
||||
<livewire:server.proxy.deploy :server="$server" />
|
||||
@if ($server->settings->is_reachable)
|
||||
@if (request()->routeIs('server.proxy'))
|
||||
<div class="flex-1"></div>
|
||||
<livewire:server.proxy.deploy :server="$server" />
|
||||
@endif
|
||||
@endif
|
||||
</nav>
|
||||
</div>
|
||||
|
@ -1,9 +0,0 @@
|
||||
<div wire:poll.10000ms='applicationStatusChanged'>
|
||||
@if ($application->status === 'running')
|
||||
<x-status.running />
|
||||
@elseif($application->status === 'restarting')
|
||||
<x-status.restarting />
|
||||
@else
|
||||
<x-status.stopped />
|
||||
@endif
|
||||
</div>
|
@ -12,7 +12,9 @@
|
||||
@if ($server->proxy->status === 'exited')
|
||||
<x-forms.button wire:click.prevent="switchProxy">Switch Proxy</x-forms.button>
|
||||
@endif
|
||||
<livewire:server.proxy.status :server="$server" />
|
||||
@if ($server->settings->is_reachable)
|
||||
<livewire:server.proxy.status :server="$server" />
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="pt-3 pb-4 ">Traefik v2</div>
|
||||
@ -23,11 +25,11 @@
|
||||
configs.
|
||||
</div>
|
||||
@endif
|
||||
<x-forms.input placeholder="https://coolify.io" id="redirect_url" label="Default Redirect 404"
|
||||
helper="All urls that has no service available will be redirected to this domain.<span class='text-helper'>You can set to your main marketing page or your social media link.</span>" />
|
||||
<div class="container w-full mx-auto">
|
||||
<div class="container w-full pb-4 mx-auto">
|
||||
<livewire:activity-monitor :header="true" />
|
||||
</div>
|
||||
<x-forms.input placeholder="https://coolify.io" id="redirect_url" label="Default Redirect 404"
|
||||
helper="All urls that has no service available will be redirected to this domain.<span class='text-helper'>You can set to your main marketing page or your social media link.</span>" />
|
||||
<div wire:loading wire:target="checkProxySettingsInSync" class="pt-4">
|
||||
<x-loading text="Loading proxy configuration..." />
|
||||
</div>
|
||||
|
@ -1,79 +1,76 @@
|
||||
<div>
|
||||
@if ($server->settings->is_reachable)
|
||||
@if ($server->proxy->status === 'running')
|
||||
<div class="flex gap-4">
|
||||
<div class="group">
|
||||
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links
|
||||
<x-chevron-down />
|
||||
</label>
|
||||
<div class="absolute hidden group-hover:block ">
|
||||
<ul tabindex="0"
|
||||
class="relative text-xs text-white normal-case rounded -ml-28 min-w-max menu bg-coolgray-200">
|
||||
<li>
|
||||
@if ($server->name === 'localhost')
|
||||
<a target="_blank"
|
||||
class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white"
|
||||
href="{{ base_ip() }}:8080">
|
||||
Traefik Dashboard
|
||||
<x-external-link />
|
||||
</a>
|
||||
@else
|
||||
<a target="_blank"
|
||||
class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white"
|
||||
href="http://{{ $server->ip }}:8080">
|
||||
Traefik Dashboard
|
||||
<x-external-link />
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="group">
|
||||
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Actions
|
||||
<x-chevron-down />
|
||||
</label>
|
||||
<div class="absolute hidden group-hover:block ">
|
||||
<ul tabindex="0"
|
||||
class="relative text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200 -ml-14">
|
||||
<li>
|
||||
<div class="rounded-none hover:bg-coollabs hover:text-white" wire:click='deploy'><svg
|
||||
xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
|
||||
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
|
||||
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
|
||||
<path d="M12 9l0 3" />
|
||||
<path d="M12 15l.01 0" />
|
||||
</svg>Restart</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="rounded-none hover:bg-red-500 hover:text-white" wire:click='stop'><svg
|
||||
xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
|
||||
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M8 13v-7.5a1.5 1.5 0 0 1 3 0v6.5" />
|
||||
<path d="M11 5.5v-2a1.5 1.5 0 1 1 3 0v8.5" />
|
||||
<path d="M14 5.5a1.5 1.5 0 0 1 3 0v6.5" />
|
||||
<path
|
||||
d="M17 7.5a1.5 1.5 0 0 1 3 0v8.5a6 6 0 0 1 -6 6h-2h.208a6 6 0 0 1 -5.012 -2.7a69.74 69.74 0 0 1 -.196 -.3c-.312 -.479 -1.407 -2.388 -3.286 -5.728a1.5 1.5 0 0 1 .536 -2.022a1.867 1.867 0 0 1 2.28 .28l1.47 1.47" />
|
||||
</svg>Stop</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@if ($server->proxy->status === 'running')
|
||||
<div class="flex gap-4">
|
||||
<div class="group">
|
||||
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Links
|
||||
<x-chevron-down />
|
||||
</label>
|
||||
<div class="absolute hidden group-hover:block ">
|
||||
<ul tabindex="0"
|
||||
class="relative text-xs text-white normal-case rounded -ml-28 min-w-max menu bg-coolgray-200">
|
||||
<li>
|
||||
@if ($server->name === 'localhost')
|
||||
<a target="_blank"
|
||||
class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white"
|
||||
href="{{ base_ip() }}:8080">
|
||||
Traefik Dashboard
|
||||
<x-external-link />
|
||||
</a>
|
||||
@else
|
||||
<a target="_blank"
|
||||
class="text-xs text-white rounded-none hover:no-underline hover:bg-coollabs hover:text-white"
|
||||
href="http://{{ $server->ip }}:8080">
|
||||
Traefik Dashboard
|
||||
<x-external-link />
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24"
|
||||
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M7 4v16l13 -8z" />
|
||||
</svg>Start Proxy
|
||||
</button>
|
||||
@endif
|
||||
<div class="group">
|
||||
<label tabindex="0" class="flex items-center gap-2 cursor-pointer hover:text-white"> Actions
|
||||
<x-chevron-down />
|
||||
</label>
|
||||
<div class="absolute hidden group-hover:block ">
|
||||
<ul tabindex="0"
|
||||
class="relative text-xs text-white normal-case rounded min-w-max menu bg-coolgray-200 -ml-14">
|
||||
<li>
|
||||
<div class="rounded-none hover:bg-coollabs hover:text-white" wire:click='deploy'><svg
|
||||
xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
|
||||
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
|
||||
<path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
|
||||
<path d="M12 9l0 3" />
|
||||
<path d="M12 15l.01 0" />
|
||||
</svg>Restart</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="rounded-none hover:bg-red-500 hover:text-white" wire:click='stop'><svg
|
||||
xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" viewBox="0 0 24 24"
|
||||
stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M8 13v-7.5a1.5 1.5 0 0 1 3 0v6.5" />
|
||||
<path d="M11 5.5v-2a1.5 1.5 0 1 1 3 0v8.5" />
|
||||
<path d="M14 5.5a1.5 1.5 0 0 1 3 0v6.5" />
|
||||
<path
|
||||
d="M17 7.5a1.5 1.5 0 0 1 3 0v8.5a6 6 0 0 1 -6 6h-2h.208a6 6 0 0 1 -5.012 -2.7a69.74 69.74 0 0 1 -.196 -.3c-.312 -.479 -1.407 -2.388 -3.286 -5.728a1.5 1.5 0 0 1 .536 -2.022a1.867 1.867 0 0 1 2.28 .28l1.47 1.47" />
|
||||
</svg>Stop</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<button wire:click='deploy' class="flex items-center gap-2 cursor-pointer hover:text-white">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 text-warning" viewBox="0 0 24 24" stroke-width="1.5"
|
||||
stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M7 4v16l13 -8z" />
|
||||
</svg>Start Proxy
|
||||
</button>
|
||||
@endif
|
||||
</div>
|
||||
|
@ -1,13 +1,9 @@
|
||||
<div>
|
||||
@if ($server->settings->is_reachable)
|
||||
<div wire:poll.10000ms="proxyStatus" x-init="$wire.proxyStatus">
|
||||
@if ($server->proxy->status === 'running')
|
||||
<x-status.running />
|
||||
@elseif ($server->proxy->status === 'restarting')
|
||||
<x-status.restarting />
|
||||
@else
|
||||
<x-status.stopped />
|
||||
@endif
|
||||
</div>
|
||||
<div wire:poll.10000ms="proxyStatus" x-init="$wire.proxyStatus">
|
||||
@if ($server->proxy->status === 'running')
|
||||
<x-status.running />
|
||||
@elseif ($server->proxy->status === 'restarting')
|
||||
<x-status.restarting />
|
||||
@else
|
||||
<x-status.stopped />
|
||||
@endif
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user