Merge pull request #1807 from coollabsio/next

v4.0.0-beta.234
This commit is contained in:
Andras Bacsai 2024-03-04 13:40:42 +01:00 committed by GitHub
commit 0131f5e341
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 83 additions and 31 deletions

View File

@ -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)

View File

@ -13,5 +13,6 @@ class PreventRequestsDuringMaintenance extends Middleware
*/ */
protected $except = [ protected $except = [
'webhooks/*', 'webhooks/*',
'/api/health'
]; ];
} }

View File

@ -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();

View File

@ -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;

View File

@ -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'),

View File

@ -1,3 +1,3 @@
<?php <?php
return '4.0.0-beta.233'; return '4.0.0-beta.234';

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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"
} }
} }
} }