88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Livewire\Settings;
 | |
| 
 | |
| use App\Jobs\DatabaseBackupJob;
 | |
| use App\Models\InstanceSettings;
 | |
| use App\Models\S3Storage;
 | |
| use App\Models\ScheduledDatabaseBackup;
 | |
| use App\Models\Server;
 | |
| use App\Models\StandalonePostgresql;
 | |
| use Livewire\Component;
 | |
| 
 | |
| class Backup extends Component
 | |
| {
 | |
|     public InstanceSettings $settings;
 | |
|     public $s3s;
 | |
|     public StandalonePostgresql|null|array $database = [];
 | |
|     public ScheduledDatabaseBackup|null|array $backup = [];
 | |
|     public $executions = [];
 | |
| 
 | |
|     protected $rules = [
 | |
|         'database.uuid' => 'required',
 | |
|         'database.name' => 'required',
 | |
|         'database.description' => 'nullable',
 | |
|         'database.postgres_user' => 'required',
 | |
|         'database.postgres_password' => 'required',
 | |
| 
 | |
|     ];
 | |
|     protected $validationAttributes = [
 | |
|         'database.uuid' => 'uuid',
 | |
|         'database.name' => 'name',
 | |
|         'database.description' => 'description',
 | |
|         'database.postgres_user' => 'postgres user',
 | |
|         'database.postgres_password' => 'postgres password',
 | |
|     ];
 | |
| 
 | |
|     public function mount()
 | |
|     {
 | |
|         $this->backup = $this->database?->scheduledBackups->first() ?? [];
 | |
|         $this->executions = $this->backup?->executions ?? [];
 | |
|     }
 | |
|     public function add_coolify_database()
 | |
|     {
 | |
|         $server = Server::find(0);
 | |
|         $out = instant_remote_process(['docker inspect coolify-db'], $server);
 | |
|         $envs = format_docker_envs_to_json($out);
 | |
|         $postgres_password = $envs['POSTGRES_PASSWORD'];
 | |
|         $postgres_user = $envs['POSTGRES_USER'];
 | |
|         $postgres_db = $envs['POSTGRES_DB'];
 | |
|         $this->database = StandalonePostgresql::create([
 | |
|             'id' => 0,
 | |
|             'name' => 'coolify-db',
 | |
|             'description' => 'Coolify database',
 | |
|             'postgres_user' => $postgres_user,
 | |
|             'postgres_password' => $postgres_password,
 | |
|             'postgres_db' => $postgres_db,
 | |
|             'status' => 'running',
 | |
|             'destination_type' => 'App\Models\StandaloneDocker',
 | |
|             'destination_id' => 0,
 | |
|         ]);
 | |
|         $this->backup = ScheduledDatabaseBackup::create([
 | |
|             'id' => 0,
 | |
|             'enabled' => true,
 | |
|             'save_s3' => false,
 | |
|             'frequency' => '0 0 * * *',
 | |
|             'database_id' => $this->database->id,
 | |
|             'database_type' => 'App\Models\StandalonePostgresql',
 | |
|             'team_id' => currentTeam()->id,
 | |
|         ]);
 | |
|         $this->database->refresh();
 | |
|         $this->backup->refresh();
 | |
|         ray($this->backup);
 | |
|         $this->s3s = S3Storage::whereTeamId(0)->get();
 | |
|     }
 | |
| 
 | |
|     public function backup_now()
 | |
|     {
 | |
|         dispatch(new DatabaseBackupJob(
 | |
|             backup: $this->backup
 | |
|         ));
 | |
|         $this->emit('success', 'Backup queued. It will be available in a few minutes');
 | |
|     }
 | |
|     public function submit()
 | |
|     {
 | |
|         $this->emit('success', 'Backup updated successfully');
 | |
|     }
 | |
| }
 |