lasthourcloud/app/Actions/Database/StartPostgresql.php
2023-08-07 22:14:21 +02:00

73 lines
2.7 KiB
PHP

<?php
namespace App\Actions\Database;
use App\Models\Server;
use App\Models\StandaloneDocker;
use App\Models\Team;
use App\Models\StandalonePostgresql;
use Symfony\Component\Yaml\Yaml;
class StartPostgresql
{
public function __invoke(Server $server, StandalonePostgresql $database)
{
$container_name = generate_container_name($database->uuid);
$destination = $database->destination;
$image = $database->image;
$docker_compose = [
'version' => '3.8',
'services' => [
$container_name => [
'image' => $image,
'container_name' => $container_name,
'environment'=> [
'POSTGRES_USER' => $database->postgres_user,
'POSTGRES_PASSWORD' => $database->postgres_password,
'POSTGRES_DB' => $database->postgres_db,
],
'restart' => 'always',
'networks' => [
$destination->network,
],
'healthcheck' => [
'test' => [
'CMD-SHELL',
'pg_isready',
'-d',
$database->postgres_db,
],
'interval' => '5s',
'timeout' => '5s',
'retries' => 10,
'start_period' => '5s'
],
'mem_limit' => $database->limits_memory,
'memswap_limit' => $database->limits_memory_swap,
'mem_swappiness' => $database->limits_memory_swappiness,
'mem_reservation' => $database->limits_memory_reservation,
'cpus' => $database->limits_cpus,
'cpuset' => $database->limits_cpuset,
'cpu_shares' => $database->limits_cpu_shares,
]
],
'networks' => [
$destination->network => [
'external' => false,
'name' => $destination->network,
'attachable' => true,
]
]
];
$docker_compose = Yaml::dump($docker_compose, 10);
$docker_compose_base64 = base64_encode($docker_compose);
$activity = remote_process([
"mkdir -p /tmp/{$container_name}",
"echo '{$docker_compose_base64}' | base64 -d > /tmp/{$container_name}/docker-compose.yml",
"docker compose -f /tmp/{$container_name}/docker-compose.yml up -d",
], $server);
return $activity;
}
}