mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-19 18:01:37 +00:00
update php fpm ini (#258)
This commit is contained in:
parent
55269dbcde
commit
9473d198e1
@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
namespace App\Actions\PHP;
|
namespace App\Actions\PHP;
|
||||||
|
|
||||||
|
use App\Enums\PHPIniType;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\SSH\Services\PHP\PHP;
|
use App\SSH\Services\PHP\PHP;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
class GetPHPIni
|
class GetPHPIni
|
||||||
@ -18,7 +21,7 @@ public function getIni(Server $server, array $input): string
|
|||||||
/** @var PHP $handler */
|
/** @var PHP $handler */
|
||||||
$handler = $php->handler();
|
$handler = $php->handler();
|
||||||
|
|
||||||
return $handler->getPHPIni();
|
return $handler->getPHPIni($input['type']);
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
throw ValidationException::withMessages(
|
throw ValidationException::withMessages(
|
||||||
['ini' => $e->getMessage()]
|
['ini' => $e->getMessage()]
|
||||||
@ -28,6 +31,13 @@ public function getIni(Server $server, array $input): string
|
|||||||
|
|
||||||
public function validate(Server $server, array $input): void
|
public function validate(Server $server, array $input): void
|
||||||
{
|
{
|
||||||
|
Validator::make($input, [
|
||||||
|
'type' => [
|
||||||
|
'required',
|
||||||
|
Rule::in([PHPIniType::CLI, PHPIniType::FPM]),
|
||||||
|
],
|
||||||
|
])->validate();
|
||||||
|
|
||||||
if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) {
|
if (! isset($input['version']) || ! in_array($input['version'], $server->installedPHPVersions())) {
|
||||||
throw ValidationException::withMessages(
|
throw ValidationException::withMessages(
|
||||||
['version' => __('This version is not installed')]
|
['version' => __('This version is not installed')]
|
||||||
|
@ -2,10 +2,13 @@
|
|||||||
|
|
||||||
namespace App\Actions\PHP;
|
namespace App\Actions\PHP;
|
||||||
|
|
||||||
|
use App\Enums\PHPIniType;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
use Illuminate\Filesystem\FilesystemAdapter;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
@ -22,19 +25,19 @@ public function update(Server $server, array $input): void
|
|||||||
|
|
||||||
$tmpName = Str::random(10).strtotime('now');
|
$tmpName = Str::random(10).strtotime('now');
|
||||||
try {
|
try {
|
||||||
/** @var \Illuminate\Filesystem\FilesystemAdapter $storageDisk */
|
/** @var FilesystemAdapter $storageDisk */
|
||||||
$storageDisk = Storage::disk('local');
|
$storageDisk = Storage::disk('local');
|
||||||
|
|
||||||
$storageDisk->put($tmpName, $input['ini']);
|
$storageDisk->put($tmpName, $input['ini']);
|
||||||
$service->server->ssh('root')->upload(
|
$service->server->ssh('root')->upload(
|
||||||
$storageDisk->path($tmpName),
|
$storageDisk->path($tmpName),
|
||||||
"/etc/php/$service->version/cli/php.ini"
|
sprintf('/etc/php/%s/%s/php.ini', $service->version, $input['type'])
|
||||||
);
|
);
|
||||||
$this->deleteTempFile($tmpName);
|
$this->deleteTempFile($tmpName);
|
||||||
} catch (Throwable) {
|
} catch (Throwable) {
|
||||||
$this->deleteTempFile($tmpName);
|
$this->deleteTempFile($tmpName);
|
||||||
throw ValidationException::withMessages([
|
throw ValidationException::withMessages([
|
||||||
'ini' => __("Couldn't update php.ini file!"),
|
'ini' => __("Couldn't update php.ini (:type) file!", ['type' => $input['type']]),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +59,10 @@ public function validate(Server $server, array $input): void
|
|||||||
'string',
|
'string',
|
||||||
],
|
],
|
||||||
'version' => 'required|string',
|
'version' => 'required|string',
|
||||||
|
'type' => [
|
||||||
|
'required',
|
||||||
|
Rule::in([PHPIniType::CLI, PHPIniType::FPM]),
|
||||||
|
],
|
||||||
])->validate();
|
])->validate();
|
||||||
|
|
||||||
if (! in_array($input['version'], $server->installedPHPVersions())) {
|
if (! in_array($input['version'], $server->installedPHPVersions())) {
|
||||||
|
10
app/Enums/PHPIniType.php
Normal file
10
app/Enums/PHPIniType.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Enums;
|
||||||
|
|
||||||
|
final class PHPIniType
|
||||||
|
{
|
||||||
|
const CLI = 'cli';
|
||||||
|
|
||||||
|
const FPM = 'fpm';
|
||||||
|
}
|
@ -81,7 +81,7 @@ public function updateIni(Server $server, Request $request): RedirectResponse
|
|||||||
|
|
||||||
app(UpdatePHPIni::class)->update($server, $request->input());
|
app(UpdatePHPIni::class)->update($server, $request->input());
|
||||||
|
|
||||||
Toast::success('PHP ini updated!');
|
Toast::success(__('PHP ini (:type) updated!', ['type' => $request->input('type')]));
|
||||||
|
|
||||||
return back()->with([
|
return back()->with([
|
||||||
'ini' => $request->input('ini'),
|
'ini' => $request->input('ini'),
|
||||||
|
@ -102,12 +102,10 @@ public function installComposer(): void
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPHPIni(): string
|
public function getPHPIni(string $type): string
|
||||||
{
|
{
|
||||||
return $this->service->server->ssh()->exec(
|
return $this->service->server->os()->readFile(
|
||||||
$this->getScript('get-php-ini.sh', [
|
sprintf('/etc/php/%s/%s/php.ini', $this->service->version, $type)
|
||||||
'version' => $this->service->version,
|
|
||||||
])
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
if ! cat /etc/php/__version__/cli/php.ini; then
|
|
||||||
echo 'VITO_SSH_ERROR' && exit 1
|
|
||||||
fi
|
|
@ -37,16 +37,19 @@ class="cursor-pointer"
|
|||||||
>
|
>
|
||||||
{{ __("Install Extension") }}
|
{{ __("Install Extension") }}
|
||||||
</x-dropdown-link>
|
</x-dropdown-link>
|
||||||
|
@foreach ([\App\Enums\PHPIniType::FPM, \App\Enums\PHPIniType::CLI] as $type)
|
||||||
<x-dropdown-link
|
<x-dropdown-link
|
||||||
class="cursor-pointer"
|
class="cursor-pointer"
|
||||||
x-on:click="version = '{{ $php->version }}'; $dispatch('open-modal', 'update-php-ini'); document.getElementById('ini').value = 'Loading...';"
|
x-on:click="version = '{{ $php->version }}'; $dispatch('open-modal', 'update-php-ini-{{ $type }}'); document.getElementById('ini').value = 'Loading...';"
|
||||||
hx-get="{{ route('servers.php.get-ini', ['server' => $server, 'version' => $php->version]) }}"
|
hx-get="{{ route('servers.php.get-ini', ['server' => $server, 'version' => $php->version, 'type' => $type]) }}"
|
||||||
hx-swap="outerHTML"
|
hx-swap="outerHTML"
|
||||||
hx-target="#update-php-ini-form"
|
hx-target="#update-php-ini-{{ $type }}-form"
|
||||||
hx-select="#update-php-ini-form"
|
hx-select="#update-php-ini-{{ $type }}-form"
|
||||||
>
|
>
|
||||||
{{ __("Edit php.ini") }}
|
{{ __("Edit php.ini (:type)", ["type" => $type]) }}
|
||||||
</x-dropdown-link>
|
</x-dropdown-link>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
<x-dropdown-link
|
<x-dropdown-link
|
||||||
class="cursor-pointer"
|
class="cursor-pointer"
|
||||||
href="{{ route('servers.services.restart', ['server' => $server, 'service' => $php]) }}"
|
href="{{ route('servers.services.restart', ['server' => $server, 'service' => $php]) }}"
|
||||||
@ -85,6 +88,7 @@ class="cursor-pointer"
|
|||||||
method="delete"
|
method="delete"
|
||||||
x-bind:action="uninstallAction"
|
x-bind:action="uninstallAction"
|
||||||
/>
|
/>
|
||||||
@include("php.partials.update-php-ini")
|
@include("php.partials.update-php-ini", ["type" => \App\Enums\PHPIniType::CLI])
|
||||||
|
@include("php.partials.update-php-ini", ["type" => \App\Enums\PHPIniType::FPM])
|
||||||
@include("php.partials.install-extension")
|
@include("php.partials.install-extension")
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
<x-modal name="update-php-ini">
|
<x-modal name="update-php-ini-{{ $type }}">
|
||||||
<form
|
<form
|
||||||
id="update-php-ini-form"
|
id="update-php-ini-{{ $type }}-form"
|
||||||
hx-post="{{ route("servers.php.update-ini", ["server" => $server]) }}"
|
hx-post="{{ route("servers.php.update-ini", ["server" => $server]) }}"
|
||||||
hx-swap="outerHTML"
|
hx-swap="outerHTML"
|
||||||
hx-select="#update-php-ini-form"
|
hx-select="#update-php-ini-{{ $type }}-form"
|
||||||
class="p-6"
|
class="p-6"
|
||||||
>
|
>
|
||||||
|
<input type="hidden" name="type" value="{{ $type }}" />
|
||||||
<input type="hidden" name="version" :value="version" />
|
<input type="hidden" name="version" :value="version" />
|
||||||
|
|
||||||
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
|
||||||
{{ __("Update php.ini") }}
|
{{ __("Update php.ini (:type)", ["type" => $type]) }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div class="mt-6">
|
<div class="mt-6">
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Tests\Feature;
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use App\Enums\PHPIniType;
|
||||||
use App\Enums\ServiceStatus;
|
use App\Enums\ServiceStatus;
|
||||||
use App\Facades\SSH;
|
use App\Facades\SSH;
|
||||||
use App\Models\Service;
|
use App\Models\Service;
|
||||||
@ -136,7 +137,10 @@ public function test_extension_already_installed(): void
|
|||||||
]))->assertSessionHasErrors();
|
]))->assertSessionHasErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_get_php_ini(): void
|
/**
|
||||||
|
* @dataProvider php_ini_data
|
||||||
|
*/
|
||||||
|
public function test_get_php_ini(string $version, string $type): void
|
||||||
{
|
{
|
||||||
SSH::fake('[PHP ini]');
|
SSH::fake('[PHP ini]');
|
||||||
|
|
||||||
@ -144,11 +148,15 @@ public function test_get_php_ini(): void
|
|||||||
|
|
||||||
$this->get(route('servers.php.get-ini', [
|
$this->get(route('servers.php.get-ini', [
|
||||||
'server' => $this->server,
|
'server' => $this->server,
|
||||||
'version' => '8.2',
|
'version' => $version,
|
||||||
|
'type' => $type,
|
||||||
]))->assertSessionHas('ini');
|
]))->assertSessionHas('ini');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_update_php_ini(): void
|
/**
|
||||||
|
* @dataProvider php_ini_data
|
||||||
|
*/
|
||||||
|
public function test_update_php_ini(string $version, string $type): void
|
||||||
{
|
{
|
||||||
SSH::fake();
|
SSH::fake();
|
||||||
|
|
||||||
@ -156,11 +164,20 @@ public function test_update_php_ini(): void
|
|||||||
|
|
||||||
$this->post(route('servers.php.update-ini', [
|
$this->post(route('servers.php.update-ini', [
|
||||||
'server' => $this->server,
|
'server' => $this->server,
|
||||||
'version' => '8.2',
|
'version' => $version,
|
||||||
|
'type' => $type,
|
||||||
'ini' => 'new ini',
|
'ini' => 'new ini',
|
||||||
]))
|
]))
|
||||||
->assertSessionDoesntHaveErrors()
|
->assertSessionDoesntHaveErrors()
|
||||||
->assertSessionHas('toast.type', 'success')
|
->assertSessionHas('toast.type', 'success')
|
||||||
->assertSessionHas('toast.message', 'PHP ini updated!');
|
->assertSessionHas('toast.message', __('PHP ini (:type) updated!', ['type' => $type]));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function php_ini_data(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['8.2', PHPIniType::FPM],
|
||||||
|
['8.2', PHPIniType::CLI],
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user