diff --git a/app/Providers/ServiceTypeServiceProvider.php b/app/Providers/ServiceTypeServiceProvider.php index 82024ed7..bec8227a 100644 --- a/app/Providers/ServiceTypeServiceProvider.php +++ b/app/Providers/ServiceTypeServiceProvider.php @@ -13,6 +13,7 @@ use App\Services\PHP\PHP; use App\Services\ProcessManager\Supervisor; use App\Services\Redis\Redis; +use App\Services\Valkey\Valkey; use App\Services\Webserver\Caddy; use App\Services\Webserver\Nginx; use Illuminate\Support\ServiceProvider; @@ -129,6 +130,19 @@ private function memoryDatabases(): void ], ]) ->register(); + + RegisterServiceType::make(Valkey::id()) + ->type(Valkey::type()) + ->label('Valkey') + ->handler(Valkey::class) + ->configPaths([ + [ + 'name' => 'valkey.conf', + 'path' => '/etc/valkey/valkey.conf', + 'sudo' => true, + ], + ]) + ->register(); } private function firewalls(): void diff --git a/app/Services/Valkey/Valkey.php b/app/Services/Valkey/Valkey.php new file mode 100644 index 00000000..2e33a7a8 --- /dev/null +++ b/app/Services/Valkey/Valkey.php @@ -0,0 +1,75 @@ + [ + 'required', + function (string $attribute, mixed $value, Closure $fail): void { + $memoryDatabaseExists = $this->service->server->memoryDatabase(); + if ($memoryDatabaseExists) { + $fail('You already have a memory database service on the server.'); + } + }, + ], + ]; + } + + /** + * @throws ServiceInstallationFailed + * @throws SSHError + */ + public function install(): void + { + $this->service->server->ssh()->exec( + view('ssh.services.valkey.install'), + 'install-valkey' + ); + $status = $this->service->server->systemd()->status($this->unit()); + $this->service->validateInstall($status); + event('service.installed', $this->service); + $this->service->server->os()->cleanup(); + } + + /** + * @throws SSHError + */ + public function uninstall(): void + { + $this->service->server->ssh()->exec( + view('ssh.services.valkey.uninstall'), + 'uninstall-valkey' + ); + event('service.uninstalled', $this->service); + $this->service->server->os()->cleanup(); + } + + public function version(): string + { + return $this->service->server->ssh()->exec("valkey-server --version | grep -oP 'v=\\K[0-9.]+'", 'get-valkey-version'); + } +} diff --git a/resources/js/pages/databases/index.tsx b/resources/js/pages/databases/index.tsx index 188d5171..15329439 100644 --- a/resources/js/pages/databases/index.tsx +++ b/resources/js/pages/databases/index.tsx @@ -40,7 +40,7 @@ export default function Databases() { - +