wip
This commit is contained in:
		| @@ -15,8 +15,13 @@ class Proxy extends Component | ||||
| 
 | ||||
|     public ProxyTypes $selectedProxy = ProxyTypes::TRAEFIK_V2; | ||||
|     public $proxy_settings = null; | ||||
|     public string|null $redirect_url = null; | ||||
| 
 | ||||
|     protected $listeners = ['serverValidated', 'saveConfiguration']; | ||||
|     public function mount() | ||||
|     { | ||||
|         $this->redirect_url = $this->server->proxy->redirect_url; | ||||
|     } | ||||
|     public function serverValidated() | ||||
|     { | ||||
|         $this->server->refresh(); | ||||
| @@ -52,17 +57,20 @@ class Proxy extends Component | ||||
|         $this->server->proxy->status = 'exited'; | ||||
|         $this->server->save(); | ||||
|     } | ||||
|     public function saveConfiguration(Server $server) | ||||
|     public function saveConfiguration() | ||||
|     { | ||||
|         try { | ||||
|             $proxy_path = config('coolify.proxy_config_path'); | ||||
|             $this->proxy_settings = Str::of($this->proxy_settings)->trim()->value; | ||||
|             $docker_compose_yml_base64 = base64_encode($this->proxy_settings); | ||||
|             $server->proxy->last_saved_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value; | ||||
|             $server->save(); | ||||
|             $this->server->proxy->last_saved_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value; | ||||
|             $this->server->proxy->redirect_url = $this->redirect_url; | ||||
|             $this->server->save(); | ||||
|             instant_remote_process([ | ||||
|                 "echo '$docker_compose_yml_base64' | base64 -d > $proxy_path/docker-compose.yml", | ||||
|             ], $server); | ||||
|             ], $this->server); | ||||
|             $this->server->refresh(); | ||||
|             setup_default_redirect_404(redirect_url: $this->server->proxy->redirect_url, server: $this->server); | ||||
|             $this->emit('success', 'Proxy configuration saved.'); | ||||
|         } catch (\Exception $e) { | ||||
|             return general_error_handler(err: $e); | ||||
|   | ||||
| @@ -15,7 +15,7 @@ class Configuration extends Component | ||||
|     public $do_not_track; | ||||
|     public $is_auto_update_enabled; | ||||
|     public $is_registration_enabled; | ||||
|     protected string $dynamic_config_path; | ||||
|     protected string $dynamic_config_path = '/data/coolify/proxy/dynamic'; | ||||
|     protected Server $server; | ||||
| 
 | ||||
|     protected $rules = [ | ||||
| @@ -117,9 +117,6 @@ class Configuration extends Component | ||||
|                 "rm -f $file", | ||||
|             ], $this->server); | ||||
|         } else { | ||||
|             $url = Url::fromString($this->settings->default_redirect_404); | ||||
|             $host = $url->getHost(); | ||||
|             $schema = $url->getScheme(); | ||||
|             $traefik_dynamic_conf = [ | ||||
|                 'http' => | ||||
|                 [ | ||||
| @@ -200,10 +197,9 @@ class Configuration extends Component | ||||
|         $this->validate(); | ||||
|         $this->settings->save(); | ||||
| 
 | ||||
|         $this->dynamic_config_path = '/data/coolify/proxy/dynamic'; | ||||
|         $this->server = Server::findOrFail(0); | ||||
|         $this->setup_instance_fqdn(); | ||||
|         $this->setup_default_redirect_404(); | ||||
|         setup_default_redirect_404(redirect_url: $this->settings->default_redirect_404, server: $this->server); | ||||
|         if ($this->settings->fqdn || $this->settings->default_redirect_404) { | ||||
|             dispatch(new InstanceProxyCheckJob()); | ||||
|         } | ||||
|   | ||||
| @@ -87,6 +87,7 @@ class Server extends BaseModel | ||||
|     static public function ownedByCurrentTeam(array $select = ['*']) | ||||
|     { | ||||
|         $selectArray = collect($select)->concat(['id']); | ||||
|         ray(Server::whereTeamId(session('currentTeam')->id)->with('settings')->select($selectArray->all())->get()); | ||||
|         return Server::whereTeamId(session('currentTeam')->id)->with('settings')->select($selectArray->all()); | ||||
|     } | ||||
| 
 | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| <?php | ||||
| 
 | ||||
| use App\Models\Server; | ||||
| use Spatie\Url\Url; | ||||
| use Symfony\Component\Yaml\Yaml; | ||||
| 
 | ||||
| if (!function_exists('getProxyConfiguration')) { | ||||
|     function getProxyConfiguration(Server $server) | ||||
|     { | ||||
| function getProxyConfiguration(Server $server) | ||||
| { | ||||
|     $proxy_path = config('coolify.proxy_config_path'); | ||||
|     if (isDev()) { | ||||
|         $proxy_path = $proxy_path . '/testing-host-1/'; | ||||
| @@ -81,5 +81,80 @@ if (!function_exists('getProxyConfiguration')) { | ||||
|         $config['services']['traefik']['command'][] = "--log.level=debug"; | ||||
|     } | ||||
|     return Yaml::dump($config, 4, 2); | ||||
| } | ||||
| function setup_default_redirect_404(string $redirect_url, Server $server) | ||||
| { | ||||
|     $traefik_dynamic_conf_path = '/data/coolify/proxy/dynamic'; | ||||
|     $traefik_default_redirect_file = "$traefik_dynamic_conf_path/default_redirect_404.yaml"; | ||||
|     if (empty($redirect_url)) { | ||||
|         remote_process([ | ||||
|             "rm -f $traefik_default_redirect_file", | ||||
|         ], $server); | ||||
|     } else { | ||||
|         $traefik_dynamic_conf = [ | ||||
|             'http' => | ||||
|             [ | ||||
|                 'routers' => | ||||
|                 [ | ||||
|                     'catchall' => | ||||
|                     [ | ||||
|                         'entryPoints' => [ | ||||
|                             0 => 'http', | ||||
|                             1 => 'https', | ||||
|                         ], | ||||
|                         'service' => 'noop', | ||||
|                         'rule' => "HostRegexp(`{catchall:.*}`)", | ||||
|                         'priority' => 1, | ||||
|                         'middlewares' => [ | ||||
|                             0 => 'redirect-regexp@file', | ||||
|                         ], | ||||
|                     ], | ||||
|                 ], | ||||
|                 'services' => | ||||
|                 [ | ||||
|                     'noop' => | ||||
|                     [ | ||||
|                         'loadBalancer' => | ||||
|                         [ | ||||
|                             'servers' => | ||||
|                             [ | ||||
|                                 0 => | ||||
|                                 [ | ||||
|                                     'url' => '', | ||||
|                                 ], | ||||
|                             ], | ||||
|                         ], | ||||
|                     ], | ||||
|                 ], | ||||
|                 'middlewares' => | ||||
|                 [ | ||||
|                     'redirect-regexp' => | ||||
|                     [ | ||||
|                         'redirectRegex' => | ||||
|                         [ | ||||
|                             'regex' => '(.*)', | ||||
|                             'replacement' => $redirect_url, | ||||
|                             'permanent' => false, | ||||
|                         ], | ||||
|                     ], | ||||
|                 ], | ||||
|             ], | ||||
|         ]; | ||||
|         $yaml = Yaml::dump($traefik_dynamic_conf, 12, 2); | ||||
|         $yaml = | ||||
|             "# This file is automatically generated by Coolify.\n" . | ||||
|             "# Do not edit it manually (only if you know what are you doing).\n\n" . | ||||
|             $yaml; | ||||
| 
 | ||||
|         $base64 = base64_encode($yaml); | ||||
|         ray("mkdir -p $traefik_dynamic_conf_path"); | ||||
|         remote_process([ | ||||
|             "mkdir -p $traefik_dynamic_conf_path", | ||||
|             "echo '$base64' | base64 -d > $traefik_default_redirect_file", | ||||
|         ], $server); | ||||
| 
 | ||||
|         if (config('app.env') == 'local') { | ||||
|             ray($yaml); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|                 </div> | ||||
|                 @isset($proxy_settings) | ||||
|                     @if ($selectedProxy->value === 'TRAEFIK_V2') | ||||
|                         <form wire:submit.prevent='saveConfiguration({{ $server }})'> | ||||
|                         <form wire:submit.prevent='saveConfiguration'> | ||||
|                             <div class="flex items-center gap-2"> | ||||
|                                 <h2>Proxy</h2> | ||||
|                                 <x-forms.button type="submit">Save</x-forms.button> | ||||
| @@ -25,6 +25,10 @@ | ||||
|                                 <div class="text-red-500 ">Configuration out of sync. Restart to get the new configs. | ||||
|                                 </div> | ||||
|                             @endif | ||||
|                             @if ($server->id !== 0) | ||||
|                                 <x-forms.input id="redirect_url" label="Default redirect" | ||||
|                                     placeholder="https://coolify.io" /> | ||||
|                             @endif | ||||
|                             <div class="container w-full mx-auto"> | ||||
|                                 <livewire:activity-monitor :header="true" /> | ||||
|                             </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai