fix: add proxy to network with periodic check
This commit is contained in:
parent
e1a1490911
commit
ebfc0bd1e1
@ -14,21 +14,12 @@ class StartProxy
|
|||||||
use AsAction;
|
use AsAction;
|
||||||
public function handle(Server $server, bool $async = true): Activity|string
|
public function handle(Server $server, bool $async = true): Activity|string
|
||||||
{
|
{
|
||||||
|
$commands = collect([]);
|
||||||
$proxyType = $server->proxyType();
|
$proxyType = $server->proxyType();
|
||||||
if ($proxyType === 'none') {
|
if ($proxyType === 'none') {
|
||||||
return 'OK';
|
return 'OK';
|
||||||
}
|
}
|
||||||
$proxy_path = get_proxy_path();
|
$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);
|
$configuration = CheckConfiguration::run($server);
|
||||||
if (!$configuration) {
|
if (!$configuration) {
|
||||||
throw new \Exception("Configuration is not synced");
|
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);
|
$docker_compose_yml_base64 = base64_encode($configuration);
|
||||||
$server->proxy->last_applied_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value;
|
$server->proxy->last_applied_settings = Str::of($docker_compose_yml_base64)->pipe('md5')->value;
|
||||||
$server->save();
|
$server->save();
|
||||||
$commands = [
|
|
||||||
|
$commands = $commands->merge([
|
||||||
"command -v lsof >/dev/null || echo '####### Installing lsof...'",
|
"command -v lsof >/dev/null || echo '####### Installing lsof...'",
|
||||||
"command -v lsof >/dev/null || apt-get update",
|
"command -v lsof >/dev/null || apt-get update",
|
||||||
"command -v lsof >/dev/null || apt install -y lsof",
|
"command -v lsof >/dev/null || apt install -y lsof",
|
||||||
"command -v lsof >/dev/null || command -v fuser >/dev/null || apt install -y psmisc",
|
"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",
|
"cd $proxy_path",
|
||||||
"echo '####### Creating Docker Compose file...'",
|
"echo '####### Creating Docker Compose file...'",
|
||||||
"echo '####### Pulling docker image...'",
|
"echo '####### Pulling docker image...'",
|
||||||
@ -60,7 +50,8 @@ public function handle(Server $server, bool $async = true): Activity|string
|
|||||||
"echo '####### Starting coolify-proxy...'",
|
"echo '####### Starting coolify-proxy...'",
|
||||||
'docker compose up -d --remove-orphans || docker-compose up -d --remove-orphans',
|
'docker compose up -d --remove-orphans || docker-compose up -d --remove-orphans',
|
||||||
"echo '####### Proxy installed successfully...'"
|
"echo '####### Proxy installed successfully...'"
|
||||||
];
|
]);
|
||||||
|
$commands = $commands->merge(connectProxyToNetworks($server));
|
||||||
if (!$async) {
|
if (!$async) {
|
||||||
instant_remote_process($commands, $server);
|
instant_remote_process($commands, $server);
|
||||||
return 'OK';
|
return 'OK';
|
||||||
|
@ -89,11 +89,14 @@ public function handle(): void
|
|||||||
} else {
|
} else {
|
||||||
$this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
|
$this->server->proxy->status = data_get($foundProxyContainer, 'State.Status');
|
||||||
$this->server->save();
|
$this->server->save();
|
||||||
|
$connectProxyToDockerNetworks = connectProxyToNetworks($this->server);
|
||||||
|
instant_remote_process([$connectProxyToDockerNetworks], $this->server, false);
|
||||||
}
|
}
|
||||||
$foundApplications = [];
|
$foundApplications = [];
|
||||||
$foundApplicationPreviews = [];
|
$foundApplicationPreviews = [];
|
||||||
$foundDatabases = [];
|
$foundDatabases = [];
|
||||||
$foundServices = [];
|
$foundServices = [];
|
||||||
|
|
||||||
foreach ($containers as $container) {
|
foreach ($containers as $container) {
|
||||||
$containerStatus = data_get($container, 'State.Status');
|
$containerStatus = data_get($container, 'State.Status');
|
||||||
$labels = data_get($container, 'Config.Labels');
|
$labels = data_get($container, 'Config.Labels');
|
||||||
@ -179,7 +182,7 @@ public function handle(): void
|
|||||||
$db->update(['status' => 'exited']);
|
$db->update(['status' => 'exited']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$exitedServices = $exitedServices->unique('id');
|
$exitedServices = $exitedServices->unique('id');
|
||||||
ray($exitedServices);
|
ray($exitedServices);
|
||||||
// ray($exitedServices);
|
// ray($exitedServices);
|
||||||
@ -202,7 +205,6 @@ public function handle(): void
|
|||||||
// $this->server->team->notify(new ContainerStopped($containerName, $this->server, $url));
|
// $this->server->team->notify(new ContainerStopped($containerName, $this->server, $url));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
$notRunningApplications = $applications->pluck('id')->diff($foundApplications);
|
$notRunningApplications = $applications->pluck('id')->diff($foundApplications);
|
||||||
foreach ($notRunningApplications as $applicationId) {
|
foreach ($notRunningApplications as $applicationId) {
|
||||||
$application = $applications->where('id', $applicationId)->first();
|
$application = $applications->where('id', $applicationId)->first();
|
||||||
|
@ -10,7 +10,23 @@ function get_proxy_path()
|
|||||||
$proxy_path = "$base_path/proxy";
|
$proxy_path = "$base_path/proxy";
|
||||||
return $proxy_path;
|
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)
|
function generate_default_proxy_configuration(Server $server)
|
||||||
{
|
{
|
||||||
$proxy_path = get_proxy_path();
|
$proxy_path = get_proxy_path();
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
use Spatie\Activitylog\Contracts\Activity;
|
use Spatie\Activitylog\Contracts\Activity;
|
||||||
|
|
||||||
function remote_process(
|
function remote_process(
|
||||||
array $command,
|
Collection|array $command,
|
||||||
Server $server,
|
Server $server,
|
||||||
?string $type = null,
|
?string $type = null,
|
||||||
?string $type_uuid = null,
|
?string $type_uuid = null,
|
||||||
@ -26,6 +26,9 @@ function remote_process(
|
|||||||
if (is_null($type)) {
|
if (is_null($type)) {
|
||||||
$type = ActivityTypes::INLINE->value;
|
$type = ActivityTypes::INLINE->value;
|
||||||
}
|
}
|
||||||
|
if ($command instanceof Collection) {
|
||||||
|
$command = $command->toArray();
|
||||||
|
}
|
||||||
$command_string = implode("\n", $command);
|
$command_string = implode("\n", $command);
|
||||||
if (auth()->user()) {
|
if (auth()->user()) {
|
||||||
$teams = auth()->user()->teams->pluck('id');
|
$teams = auth()->user()->teams->pluck('id');
|
||||||
@ -98,8 +101,11 @@ function generateSshCommand(Server $server, string $command, bool $isMux = true)
|
|||||||
// ray($ssh_command);
|
// ray($ssh_command);
|
||||||
return $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);
|
$command_string = implode("\n", $command);
|
||||||
$ssh_command = generateSshCommand($server, $command_string);
|
$ssh_command = generateSshCommand($server, $command_string);
|
||||||
$process = Process::run($ssh_command);
|
$process = Process::run($ssh_command);
|
||||||
|
Loading…
Reference in New Issue
Block a user