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() {
-
+