fix: add proxy to network with periodic check

This commit is contained in:
Andras Bacsai 2023-09-22 08:42:27 +02:00
parent e1a1490911
commit ebfc0bd1e1
4 changed files with 33 additions and 18 deletions

View File

@ -14,21 +14,12 @@ class StartProxy
use AsAction;
public function handle(Server $server, bool $async = true): Activity|string
{
$commands = collect([]);
$proxyType = $server->proxyType();
if ($proxyType === 'none') {
return 'OK';
}
$proxy_path = get_proxy_path();
$networks = collect($server->standaloneDockers)->map(function ($docker) {
return $docker['network'];
})->unique();
if ($networks->count() === 0) {
$networks = collect(['coolify']);
}
$create_networks_command = $networks->map(function ($network) {
return "docker network ls --format '{{.Name}}' | grep '^$network$' >/dev/null 2>&1 || docker network create --attachable $network > /dev/null 2>&1";
});
$configuration = CheckConfiguration::run($server);
if (!$configuration) {
throw new \Exception("Configuration is not synced");
@ -36,13 +27,12 @@ public function handle(Server $server, bool $async = true): Activity|string
$docker_compose_yml_base64 = base64_encode($configuration);
$server->proxy->last_applied_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value;
$server->save();
$commands = [
$commands = $commands->merge([
"command -v lsof >/dev/null || echo '####### Installing lsof...'",
"command -v lsof >/dev/null || apt-get update",
"command -v lsof >/dev/null || apt install -y lsof",
"command -v lsof >/dev/null || command -v fuser >/dev/null || apt install -y psmisc",
"echo '####### Creating required Docker networks...'",
...$create_networks_command,
"cd $proxy_path",
"echo '####### Creating Docker Compose file...'",
"echo '####### Pulling docker image...'",
@ -60,7 +50,8 @@ public function handle(Server $server, bool $async = true): Activity|string
"echo '####### Starting coolify-proxy...'",
'docker compose up -d --remove-orphans || docker-compose up -d --remove-orphans',
"echo '####### Proxy installed successfully...'"
];
]);
$commands = $commands->merge(connectProxyToNetworks($server));
if (!$async) {
instant_remote_process($commands, $server);
return 'OK';

View File

@ -89,11 +89,14 @@ public function handle(): void
} else {
$this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
$this->server->save();
$connectProxyToDockerNetworks = connectProxyToNetworks($this->server);
instant_remote_process([$connectProxyToDockerNetworks], $this->server, false);
}
$foundApplications = [];
$foundApplicationPreviews = [];
$foundDatabases = [];
$foundServices = [];
foreach ($containers as $container) {
$containerStatus = data_get($container, 'State.Status');
$labels = data_get($container, 'Config.Labels');
@ -179,7 +182,7 @@ public function handle(): void
$db->update(['status' => 'exited']);
}
}
}
}
$exitedServices = $exitedServices->unique('id');
ray($exitedServices);
// ray($exitedServices);
@ -202,7 +205,6 @@ public function handle(): void
// $this->server->team->notify(new ContainerStopped($containerName, $this->server, $url));
// }
$notRunningApplications = $applications->pluck('id')->diff($foundApplications);
foreach ($notRunningApplications as $applicationId) {
$application = $applications->where('id', $applicationId)->first();

View File

@ -10,7 +10,23 @@ function get_proxy_path()
$proxy_path = "$base_path/proxy";
return $proxy_path;
}
function connectProxyToNetworks(Server $server) {
$networks = collect($server->standaloneDockers)->map(function ($docker) {
return $docker['network'];
})->unique();
if ($networks->count() === 0) {
$networks = collect(['coolify']);
}
$commands = $networks->map(function ($network) {
return [
"echo '####### Connecting coolify-proxy to $network network...'",
"docker network ls --format '{{.Name}}' | grep '^$network$' >/dev/null 2>&1 || docker network create --attachable $network > /dev/null 2>&1",
"docker network connect $network coolify-proxy >/dev/null 2>&1 || true",
];
});
return $commands->flatten();
}
function generate_default_proxy_configuration(Server $server)
{
$proxy_path = get_proxy_path();

View File

@ -16,7 +16,7 @@
use Spatie\Activitylog\Contracts\Activity;
function remote_process(
array $command,
Collection|array $command,
Server $server,
?string $type = null,
?string $type_uuid = null,
@ -26,6 +26,9 @@ function remote_process(
if (is_null($type)) {
$type = ActivityTypes::INLINE->value;
}
if ($command instanceof Collection) {
$command = $command->toArray();
}
$command_string = implode("\n", $command);
if (auth()->user()) {
$teams = auth()->user()->teams->pluck('id');
@ -98,8 +101,11 @@ function generateSshCommand(Server $server, string $command, bool $isMux = true)
// ray($ssh_command);
return $ssh_command;
}
function instant_remote_process(array $command, Server $server, $throwError = true)
function instant_remote_process(Collection|array $command, Server $server, $throwError = true)
{
if ($command instanceof Collection) {
$command = $command->toArray();
}
$command_string = implode("\n", $command);
$ssh_command = generateSshCommand($server, $command_string);
$process = Process::run($ssh_command);