2023-08-11 14:13:53 +00:00
|
|
|
<?php
|
|
|
|
|
2023-12-07 18:06:32 +00:00
|
|
|
namespace App\Livewire\Settings;
|
2023-08-11 14:13:53 +00:00
|
|
|
|
2023-08-11 18:48:52 +00:00
|
|
|
use App\Jobs\DatabaseBackupJob;
|
2023-08-11 14:13:53 +00:00
|
|
|
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;
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-11 14:13:53 +00:00
|
|
|
public $s3s;
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-14 12:00:10 +00:00
|
|
|
public StandalonePostgresql|null|array $database = [];
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-14 12:00:10 +00:00
|
|
|
public ScheduledDatabaseBackup|null|array $backup = [];
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-11 18:48:52 +00:00
|
|
|
public $executions = [];
|
2023-08-11 14:13:53 +00:00
|
|
|
|
|
|
|
protected $rules = [
|
|
|
|
'database.uuid' => 'required',
|
|
|
|
'database.name' => 'required',
|
|
|
|
'database.description' => 'nullable',
|
|
|
|
'database.postgres_user' => 'required',
|
|
|
|
'database.postgres_password' => 'required',
|
|
|
|
|
|
|
|
];
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-11 14:13:53 +00:00
|
|
|
protected $validationAttributes = [
|
|
|
|
'database.uuid' => 'uuid',
|
|
|
|
'database.name' => 'name',
|
|
|
|
'database.description' => 'description',
|
|
|
|
'database.postgres_user' => 'postgres user',
|
|
|
|
'database.postgres_password' => 'postgres password',
|
|
|
|
];
|
|
|
|
|
2023-08-11 18:48:52 +00:00
|
|
|
public function mount()
|
|
|
|
{
|
2024-05-24 07:35:36 +00:00
|
|
|
$this->backup = $this->database?->scheduledBackups->first() ?? null;
|
2023-08-14 12:00:10 +00:00
|
|
|
$this->executions = $this->backup?->executions ?? [];
|
2023-08-11 18:48:52 +00:00
|
|
|
}
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-11 14:13:53 +00:00
|
|
|
public function add_coolify_database()
|
|
|
|
{
|
2024-04-09 09:09:13 +00:00
|
|
|
try {
|
|
|
|
$server = Server::findOrFail(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();
|
|
|
|
$this->s3s = S3Storage::whereTeamId(0)->get();
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
return handleError($e, $this);
|
|
|
|
}
|
2023-08-11 14:13:53 +00:00
|
|
|
}
|
|
|
|
|
2023-08-11 18:48:52 +00:00
|
|
|
public function backup_now()
|
|
|
|
{
|
2023-08-11 16:14:58 +00:00
|
|
|
dispatch(new DatabaseBackupJob(
|
|
|
|
backup: $this->backup
|
|
|
|
));
|
2023-12-07 18:06:32 +00:00
|
|
|
$this->dispatch('success', 'Backup queued. It will be available in a few minutes.');
|
2023-08-11 16:14:58 +00:00
|
|
|
}
|
2024-06-10 20:43:34 +00:00
|
|
|
|
2023-08-11 14:13:53 +00:00
|
|
|
public function submit()
|
|
|
|
{
|
2024-02-22 13:53:42 +00:00
|
|
|
$this->dispatch('success', 'Backup updated.');
|
2023-08-11 14:13:53 +00:00
|
|
|
}
|
|
|
|
}
|