66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Actions\Proxy;
 | |
| 
 | |
| use App\Models\Server;
 | |
| use Illuminate\Support\Str;
 | |
| use Lorisleiva\Actions\Concerns\AsAction;
 | |
| use Spatie\Activitylog\Models\Activity;
 | |
| 
 | |
| class StartProxy
 | |
| {
 | |
|     use AsAction;
 | |
|     public function handle(Server $server, bool $async = true): Activity|string
 | |
|     {
 | |
|         $commands = collect([]);
 | |
|         $proxyType = $server->proxyType();
 | |
|         if ($proxyType === 'none') {
 | |
|             return 'OK';
 | |
|         }
 | |
|         $proxy_path = get_proxy_path();
 | |
|         $configuration = CheckConfiguration::run($server);
 | |
|         if (!$configuration) {
 | |
|             throw new \Exception("Configuration is not synced");
 | |
|         }
 | |
|         SaveConfiguration::run($server, $configuration);
 | |
|         $docker_compose_yml_base64 = base64_encode($configuration);
 | |
|         $server->proxy->last_applied_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value;
 | |
|         $server->save();
 | |
| 
 | |
|         $commands = $commands->merge([
 | |
|             "apt-get update > /dev/null 2>&1 || true",
 | |
|             "command -v lsof >/dev/null || echo '####### Installing lsof.'",
 | |
|             "command -v lsof >/dev/null || apt install -y lsof",
 | |
|             "command -v lsof >/dev/null || command -v fuser >/dev/null || apt install -y psmisc",
 | |
|             "mkdir -p $proxy_path && cd $proxy_path",
 | |
|             "echo '####### Creating Docker Compose file.'",
 | |
|             "echo '####### Pulling docker image.'",
 | |
|             'docker compose pull',
 | |
|             "echo '####### Stopping existing coolify-proxy.'",
 | |
|             "docker compose down -v --remove-orphans > /dev/null 2>&1",
 | |
|             "command -v fuser >/dev/null || command -v lsof >/dev/null || echo '####### Could not kill existing processes listening on port 80 & 443. Please stop the process holding these ports...'",
 | |
|             "command -v lsof >/dev/null && lsof -nt -i:80 | xargs -r kill -9 || true",
 | |
|             "command -v lsof >/dev/null && lsof -nt -i:443 | xargs -r kill -9 || true",
 | |
|             "command -v fuser >/dev/null && fuser -k 80/tcp || true",
 | |
|             "command -v fuser >/dev/null && fuser -k 443/tcp || true",
 | |
|             "systemctl disable nginx > /dev/null 2>&1 || true",
 | |
|             "systemctl disable apache2 > /dev/null 2>&1 || true",
 | |
|             "systemctl disable apache > /dev/null 2>&1 || true",
 | |
|             "echo '####### Starting coolify-proxy.'",
 | |
|             'docker compose up -d --remove-orphans',
 | |
|             "echo '####### Proxy installed successfully.'"
 | |
|         ]);
 | |
|         $commands = $commands->merge(connectProxyToNetworks($server));
 | |
|         if ($async) {
 | |
|             $activity = remote_process($commands, $server);
 | |
|             return $activity;
 | |
|         } else {
 | |
|             instant_remote_process($commands, $server);
 | |
|             $server->proxy->set('status', 'running');
 | |
|             $server->proxy->set('type', $proxyType);
 | |
|             $server->save();
 | |
|             return 'OK';
 | |
|         }
 | |
|     }
 | |
| }
 | 
