vito/app/SiteTypes/PHPSite.php
Richard Anderson c1ae58772c
Isolate Users (#431)
* WIP to isolate users

* Resolved issue with SSH AsUser

Updated Isolated User Script to use Server User for Team Access
Updated Path creation script to simplify for running as the isolated user

* Included the server user

* PHPMyAdmin script updated

Wordpress Script Updated
Updated Execute Script to support executing as isolated users

* Issue Resolution & Resolved Failing Unit Tests

* Fix for isolated_username vs user

* Run the deploy as the isolated user

* queue updates for isolated user

* Support isolated users in cronjobs

* script tests for isolated users

* Queue tests for isolated users

* Cronjob tests for isolated user

* Removed default queue command for laravel apps

* add default user to factory

* laravel pint fixes

* ensure echos are consistent

* removed unneeded parameter

* update

* fix queues for isolated users

* revert addslashes

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
2025-01-18 01:17:48 +01:00

105 lines
2.5 KiB
PHP
Executable File

<?php
namespace App\SiteTypes;
use App\Enums\SiteFeature;
use App\Exceptions\FailedToDeployGitKey;
use App\SSH\Composer\Composer;
use App\SSH\Git\Git;
use App\SSH\Services\Webserver\Webserver;
use Illuminate\Validation\Rule;
class PHPSite extends AbstractSiteType
{
public function language(): string
{
return 'php';
}
public function supportedFeatures(): array
{
return [
SiteFeature::DEPLOYMENT,
SiteFeature::ENV,
SiteFeature::SSL,
SiteFeature::QUEUES,
];
}
public function createRules(array $input): array
{
return [
'php_version' => [
'required',
Rule::in($this->site->server->installedPHPVersions()),
],
'source_control' => [
'required',
Rule::exists('source_controls', 'id'),
],
'web_directory' => [
'nullable',
],
'repository' => [
'required',
],
'branch' => [
'required',
],
'composer' => [
'nullable',
],
];
}
public function createFields(array $input): array
{
return [
'web_directory' => $input['web_directory'] ?? '',
'source_control_id' => $input['source_control'] ?? '',
'repository' => $input['repository'] ?? '',
'branch' => $input['branch'] ?? '',
'php_version' => $input['php_version'] ?? '',
'composer' => $input['php_version'] ?? '',
];
}
public function data(array $input): array
{
return [
'composer' => isset($input['composer']) && $input['composer'],
];
}
/**
* @throws FailedToDeployGitKey
*/
public function install(): void
{
$this->site->isolate();
/** @var Webserver $webserver */
$webserver = $this->site->server->webserver()->handler();
$webserver->createVHost($this->site);
$this->progress(15);
$this->deployKey();
$this->progress(30);
app(Git::class)->clone($this->site);
$this->progress(65);
$this->site->php()?->restart();
if ($this->site->type_data['composer']) {
app(Composer::class)->installDependencies($this->site);
}
}
public function editRules(array $input): array
{
return [];
}
public function edit(): void
{
//
}
}