commit
0131f5e341
@ -47,6 +47,10 @@ protected function schedule(Schedule $schedule): void
|
|||||||
$this->check_resources($schedule);
|
$this->check_resources($schedule);
|
||||||
$this->pull_helper_image($schedule);
|
$this->pull_helper_image($schedule);
|
||||||
$this->check_scheduled_tasks($schedule);
|
$this->check_scheduled_tasks($schedule);
|
||||||
|
|
||||||
|
if (!isCloud()) {
|
||||||
|
$schedule->command('cleanup:database --yes')->daily();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private function pull_helper_image($schedule)
|
private function pull_helper_image($schedule)
|
||||||
@ -68,35 +72,35 @@ private function check_resources($schedule)
|
|||||||
$containerServers = $servers->where('settings.is_swarm_worker', false)->where('settings.is_build_server', false);
|
$containerServers = $servers->where('settings.is_swarm_worker', false)->where('settings.is_build_server', false);
|
||||||
}
|
}
|
||||||
foreach ($containerServers as $server) {
|
foreach ($containerServers as $server) {
|
||||||
$schedule->job(new ContainerStatusJob($server))->everyMinute()->onOneServer();
|
// $schedule->job(new ContainerStatusJob($server))->everyMinute()->onOneServer();
|
||||||
// $schedule
|
$schedule
|
||||||
// ->call(function () use ($server) {
|
->call(function () use ($server) {
|
||||||
// $randomSeconds = rand(1, 40);
|
$randomSeconds = rand(1, 40);
|
||||||
// $job = new ContainerStatusJob($server);
|
$job = new ContainerStatusJob($server);
|
||||||
// $job->delay($randomSeconds);
|
$job->delay($randomSeconds);
|
||||||
// ray('dispatching container status job in ' . $randomSeconds . ' seconds');
|
ray('dispatching container status job in ' . $randomSeconds . ' seconds');
|
||||||
// dispatch($job);
|
dispatch($job);
|
||||||
// })->name('container-status-' . $server->id)->everyMinute()->onOneServer();
|
})->name('container-status-' . $server->id)->everyMinute()->onOneServer();
|
||||||
if ($server->isLogDrainEnabled()) {
|
if ($server->isLogDrainEnabled()) {
|
||||||
$schedule->job(new CheckLogDrainContainerJob($server))->everyMinute()->onOneServer();
|
// $schedule->job(new CheckLogDrainContainerJob($server))->everyMinute()->onOneServer();
|
||||||
// $schedule
|
$schedule
|
||||||
// ->call(function () use ($server) {
|
->call(function () use ($server) {
|
||||||
// $randomSeconds = rand(1, 40);
|
$randomSeconds = rand(1, 40);
|
||||||
// $job = new CheckLogDrainContainerJob($server);
|
$job = new CheckLogDrainContainerJob($server);
|
||||||
// $job->delay($randomSeconds);
|
$job->delay($randomSeconds);
|
||||||
// dispatch($job);
|
dispatch($job);
|
||||||
// })->name('log-drain-container-check-' . $server->id)->everyMinute()->onOneServer();
|
})->name('log-drain-container-check-' . $server->id)->everyMinute()->onOneServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($servers as $server) {
|
foreach ($servers as $server) {
|
||||||
$schedule->job(new ServerStatusJob($server))->everyMinute()->onOneServer();
|
// $schedule->job(new ServerStatusJob($server))->everyMinute()->onOneServer();
|
||||||
// $schedule
|
$schedule
|
||||||
// ->call(function () use ($server) {
|
->call(function () use ($server) {
|
||||||
// $randomSeconds = rand(1, 40);
|
$randomSeconds = rand(1, 40);
|
||||||
// $job = new ServerStatusJob($server);
|
$job = new ServerStatusJob($server);
|
||||||
// $job->delay($randomSeconds);
|
$job->delay($randomSeconds);
|
||||||
// dispatch($job);
|
dispatch($job);
|
||||||
// })->name('server-status-job-' . $server->id)->everyMinute()->onOneServer();
|
})->name('server-status-job-' . $server->id)->everyMinute()->onOneServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private function instance_auto_update($schedule)
|
private function instance_auto_update($schedule)
|
||||||
|
@ -13,5 +13,6 @@ class PreventRequestsDuringMaintenance extends Middleware
|
|||||||
*/
|
*/
|
||||||
protected $except = [
|
protected $except = [
|
||||||
'webhooks/*',
|
'webhooks/*',
|
||||||
|
'/api/health'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -102,6 +102,32 @@ public function extraFields()
|
|||||||
foreach ($applications as $application) {
|
foreach ($applications as $application) {
|
||||||
$image = str($application->image)->before(':')->value();
|
$image = str($application->image)->before(':')->value();
|
||||||
switch ($image) {
|
switch ($image) {
|
||||||
|
case str($image)?->contains('directus'):
|
||||||
|
$data = collect([]);
|
||||||
|
$admin_email = $this->environment_variables()->where('key', 'ADMIN_EMAIL')->first();
|
||||||
|
$admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_ADMIN')->first();
|
||||||
|
|
||||||
|
if ($admin_email) {
|
||||||
|
$data = $data->merge([
|
||||||
|
'Admin Email' => [
|
||||||
|
'key' => data_get($admin_email, 'key'),
|
||||||
|
'value' => data_get($admin_email, 'value'),
|
||||||
|
'rules' => 'required|email',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if ($admin_password) {
|
||||||
|
$data = $data->merge([
|
||||||
|
'Admin Password' => [
|
||||||
|
'key' => data_get($admin_password, 'key'),
|
||||||
|
'value' => data_get($admin_password, 'value'),
|
||||||
|
'rules' => 'required',
|
||||||
|
'isPassword' => true,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$fields->put('Directus', $data);
|
||||||
|
break;
|
||||||
case str($image)?->contains('kong'):
|
case str($image)?->contains('kong'):
|
||||||
$data = collect([]);
|
$data = collect([]);
|
||||||
$dashboard_user = $this->environment_variables()->where('key', 'SERVICE_USER_ADMIN')->first();
|
$dashboard_user = $this->environment_variables()->where('key', 'SERVICE_USER_ADMIN')->first();
|
||||||
|
@ -1054,8 +1054,8 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
|
|||||||
serviceLabels: $serviceLabels,
|
serviceLabels: $serviceLabels,
|
||||||
is_gzip_enabled: $savedService->isGzipEnabled(),
|
is_gzip_enabled: $savedService->isGzipEnabled(),
|
||||||
is_stripprefix_enabled: $savedService->isStripprefixEnabled(),
|
is_stripprefix_enabled: $savedService->isStripprefixEnabled(),
|
||||||
service_name: $serviceName));
|
service_name: $serviceName
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($resource->server->isLogDrainEnabled() && $savedService->isLogDrainEnabled()) {
|
if ($resource->server->isLogDrainEnabled() && $savedService->isLogDrainEnabled()) {
|
||||||
@ -1597,6 +1597,7 @@ function generateEnvValue(string $command, ?Service $service = null)
|
|||||||
case 'PASSWORD_64':
|
case 'PASSWORD_64':
|
||||||
$generatedValue = Str::password(length: 64, symbols: false);
|
$generatedValue = Str::password(length: 64, symbols: false);
|
||||||
break;
|
break;
|
||||||
|
// This is not base64, it's just a random string
|
||||||
case 'BASE64_64':
|
case 'BASE64_64':
|
||||||
$generatedValue = Str::random(64);
|
$generatedValue = Str::random(64);
|
||||||
break;
|
break;
|
||||||
@ -1604,8 +1605,20 @@ function generateEnvValue(string $command, ?Service $service = null)
|
|||||||
$generatedValue = Str::random(128);
|
$generatedValue = Str::random(128);
|
||||||
break;
|
break;
|
||||||
case 'BASE64':
|
case 'BASE64':
|
||||||
|
case 'BASE64_32':
|
||||||
$generatedValue = Str::random(32);
|
$generatedValue = Str::random(32);
|
||||||
break;
|
break;
|
||||||
|
// This is base64,
|
||||||
|
case 'REALBASE64_64':
|
||||||
|
$generatedValue = base64_encode(Str::random(64));
|
||||||
|
break;
|
||||||
|
case 'REALBASE64_128':
|
||||||
|
$generatedValue = base64_encode(Str::random(128));
|
||||||
|
break;
|
||||||
|
case 'REALBASE64':
|
||||||
|
case 'REALBASE64_32':
|
||||||
|
$generatedValue = base64_encode(Str::random(32));
|
||||||
|
break;
|
||||||
case 'USER':
|
case 'USER':
|
||||||
$generatedValue = Str::random(16);
|
$generatedValue = Str::random(16);
|
||||||
break;
|
break;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
// The release version of your application
|
// The release version of your application
|
||||||
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
||||||
'release' => '4.0.0-beta.233',
|
'release' => '4.0.0-beta.234',
|
||||||
// When left empty or `null` the Laravel environment will be used
|
// When left empty or `null` the Laravel environment will be used
|
||||||
'environment' => config('app.env'),
|
'environment' => config('app.env'),
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return '4.0.0-beta.233';
|
return '4.0.0-beta.234';
|
||||||
|
@ -5,6 +5,9 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="preconnect" href="https://api.fonts.coollabs.io" crossorigin>
|
<link rel="preconnect" href="https://api.fonts.coollabs.io" crossorigin>
|
||||||
|
<link rel="dns-prefetch" href="https://api.fonts.coollabs.io" />
|
||||||
|
<link rel="preload" href="https://api.fonts.coollabs.io/css2?family=Inter&display=swap" as="style" />
|
||||||
|
<link rel="preload" href="https://cdn.fonts.coollabs.io/inter/normal/400.woff2" as="style" />
|
||||||
<link href="https://api.fonts.coollabs.io/css2?family=Inter&display=swap" rel="stylesheet">
|
<link href="https://api.fonts.coollabs.io/css2?family=Inter&display=swap" rel="stylesheet">
|
||||||
<meta name="robots" content="noindex">
|
<meta name="robots" content="noindex">
|
||||||
<title>Coolify</title>
|
<title>Coolify</title>
|
||||||
|
@ -209,7 +209,11 @@ class="underline" href="https://coolify.io/docs/docker/registry"
|
|||||||
placeholder="--cap-add SYS_ADMIN --device=/dev/fuse --security-opt apparmor:unconfined --ulimit nofile=1024:1024 --tmpfs /run:rw,noexec,nosuid,size=65536k"
|
placeholder="--cap-add SYS_ADMIN --device=/dev/fuse --security-opt apparmor:unconfined --ulimit nofile=1024:1024 --tmpfs /run:rw,noexec,nosuid,size=65536k"
|
||||||
id="application.custom_docker_run_options" label="Custom Docker Options" />
|
id="application.custom_docker_run_options" label="Custom Docker Options" />
|
||||||
@endif
|
@endif
|
||||||
|
@else
|
||||||
|
<x-forms.input
|
||||||
|
helper="You can add custom docker run options that will be used when your container is started.<br>Note: Not all options are supported, as they could mess up Coolify's automation and could cause bad experience for users.<br><br>Check the <a class='text-white underline' href='https://coolify.io/docs/custom-docker-options'>docs.</a>"
|
||||||
|
placeholder="--cap-add SYS_ADMIN --device=/dev/fuse --security-opt apparmor:unconfined --ulimit nofile=1024:1024 --tmpfs /run:rw,noexec,nosuid,size=65536k"
|
||||||
|
id="application.custom_docker_run_options" label="Custom Docker Options" />
|
||||||
@endif
|
@endif
|
||||||
@if ($application->build_pack === 'dockercompose')
|
@if ($application->build_pack === 'dockercompose')
|
||||||
<x-forms.button wire:click="loadComposeFile">Reload Compose File</x-forms.button>
|
<x-forms.button wire:click="loadComposeFile">Reload Compose File</x-forms.button>
|
||||||
|
@ -12,6 +12,7 @@ services:
|
|||||||
- DATABASE_URL=postgres://postgres:$SERVICE_PASSWORD_POSTGRES@plausible_db/plausible
|
- DATABASE_URL=postgres://postgres:$SERVICE_PASSWORD_POSTGRES@plausible_db/plausible
|
||||||
- BASE_URL=$SERVICE_FQDN_PLAUSIBLE
|
- BASE_URL=$SERVICE_FQDN_PLAUSIBLE
|
||||||
- SECRET_KEY_BASE=$SERVICE_BASE64_64_PLAUSIBLE
|
- SECRET_KEY_BASE=$SERVICE_BASE64_64_PLAUSIBLE
|
||||||
|
- TOTP_VAULT_KEY=$SERVICE_REALBASE64_TOTP
|
||||||
depends_on:
|
depends_on:
|
||||||
- plausible_db
|
- plausible_db
|
||||||
- plausible_events_db
|
- plausible_events_db
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"version": "3.12.36"
|
"version": "3.12.36"
|
||||||
},
|
},
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.233"
|
"version": "4.0.0-beta.234"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user