@@ -35,10 +35,18 @@ class Docker extends Component
|
||||
$this->network = new Cuid2;
|
||||
$this->servers = Server::isUsable()->get();
|
||||
if ($server_id) {
|
||||
$this->selectedServer = $this->servers->find($server_id) ?: $this->servers->first();
|
||||
$foundServer = $this->servers->find($server_id) ?: $this->servers->first();
|
||||
if (! $foundServer) {
|
||||
throw new \Exception('Server not found.');
|
||||
}
|
||||
$this->selectedServer = $foundServer;
|
||||
$this->serverId = $this->selectedServer->id;
|
||||
} else {
|
||||
$this->selectedServer = $this->servers->first();
|
||||
$foundServer = $this->servers->first();
|
||||
if (! $foundServer) {
|
||||
throw new \Exception('Server not found.');
|
||||
}
|
||||
$this->selectedServer = $foundServer;
|
||||
$this->serverId = $this->selectedServer->id;
|
||||
}
|
||||
$this->generateName();
|
||||
|
||||
@@ -43,8 +43,10 @@ class Heading extends Component
|
||||
|
||||
public function check_status($showNotification = false)
|
||||
{
|
||||
GetContainersStatus::run($this->database->destination->server);
|
||||
$this->database->refresh();
|
||||
if ($this->database->destination->server->isFunctional()) {
|
||||
GetContainersStatus::dispatch($this->database->destination->server);
|
||||
}
|
||||
|
||||
if ($showNotification) {
|
||||
$this->dispatch('success', 'Database status updated.');
|
||||
}
|
||||
|
||||
@@ -92,7 +92,9 @@ class Configuration extends Component
|
||||
public function check_status()
|
||||
{
|
||||
try {
|
||||
GetContainersStatus::run($this->service->server);
|
||||
if ($this->service->server->isFunctional()) {
|
||||
GetContainersStatus::dispatch($this->service->server);
|
||||
}
|
||||
$this->service->applications->each(function ($application) {
|
||||
$application->refresh();
|
||||
});
|
||||
|
||||
@@ -7,6 +7,7 @@ use App\Actions\Server\StopSentinel;
|
||||
use App\Events\ServerReachabilityChanged;
|
||||
use App\Models\Server;
|
||||
use Livewire\Attributes\Computed;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Validate;
|
||||
use Livewire\Component;
|
||||
|
||||
@@ -50,6 +51,9 @@ class Show extends Component
|
||||
#[Validate(['required'])]
|
||||
public bool $isBuildServer;
|
||||
|
||||
#[Locked]
|
||||
public bool $isBuildServerLocked = false;
|
||||
|
||||
#[Validate(['required'])]
|
||||
public bool $isMetricsEnabled;
|
||||
|
||||
@@ -95,6 +99,9 @@ class Show extends Component
|
||||
try {
|
||||
$this->server = Server::ownedByCurrentTeam()->whereUuid($server_uuid)->firstOrFail();
|
||||
$this->syncData();
|
||||
if (! $this->server->isEmpty()) {
|
||||
$this->isBuildServerLocked = true;
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
return handleError($e, $this);
|
||||
}
|
||||
|
||||
@@ -1341,4 +1341,11 @@ $schema://$host {
|
||||
throw new \Exception('Invalid proxy type.');
|
||||
}
|
||||
}
|
||||
|
||||
public function isEmpty()
|
||||
{
|
||||
return $this->applications()->count() == 0 &&
|
||||
$this->databases()->count() == 0 &&
|
||||
$this->services()->count() == 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
return [
|
||||
'coolify' => [
|
||||
'version' => '4.0.0-beta.394',
|
||||
'version' => '4.0.0-beta.395',
|
||||
'helper_version' => '1.0.6',
|
||||
'realtime_version' => '1.0.5',
|
||||
'self_hosted' => env('SELF_HOSTED', true),
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
language: '{{ $language }}',
|
||||
domReadOnly: '{{ $readonly ?? false }}',
|
||||
contextmenu: '!{{ $readonly ?? false }}',
|
||||
renderLineHighlight: '{{ $readonly ?? false }} ? none : all'
|
||||
renderLineHighlight: '{{ $readonly ?? false }} ? none : all',
|
||||
stickyScroll: { enabled: false }
|
||||
});
|
||||
|
||||
const observer = new MutationObserver((mutations) => {
|
||||
|
||||
@@ -1,22 +1,33 @@
|
||||
<div x-data="{ raw: true }">
|
||||
<div x-data="{ raw: true, showNormalTextarea: false }">
|
||||
<div class="pb-4">Volume names are updated upon save. The service UUID will be added as a prefix to all volumes, to
|
||||
prevent
|
||||
name collision. <br>To see the actual volume names, check the Deployable Compose file, or go to Storage
|
||||
menu.</div>
|
||||
|
||||
<div x-cloak x-show="raw" class="font-mono">
|
||||
<div x-cloak x-show="showNormalTextarea">
|
||||
<x-forms.textarea rows="20" id="service.docker_compose_raw">
|
||||
</x-forms.textarea>
|
||||
</div>
|
||||
<div x-cloak x-show="!showNormalTextarea">
|
||||
<x-forms.textarea allowTab useMonacoEditor monacoEditorLanguage="yaml" rows="20"
|
||||
id="service.docker_compose_raw">
|
||||
</x-forms.textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div x-cloak x-show="raw === false" class="font-mono">
|
||||
<x-forms.textarea rows="20" readonly id="service.docker_compose">
|
||||
</x-forms.textarea>
|
||||
</div>
|
||||
<div class="pt-2 w-96">
|
||||
<div class="pt-2 flex gap-2">
|
||||
<x-forms.checkbox label="Escape special characters in labels?"
|
||||
helper="By default, $ (and other chars) is escaped. So if you write $ in the labels, it will be saved as $$.<br><br>If you want to use env variables inside the labels, turn this off."
|
||||
id="service.is_container_label_escape_enabled" instantSave></x-forms.checkbox>
|
||||
<div class="flex-1"></div>
|
||||
<div x-cloak x-show="raw">
|
||||
<x-forms.button class="w-32" @click.prevent="showNormalTextarea = !showNormalTextarea">Switch
|
||||
Textarea</x-forms.button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-end w-full gap-2 pt-4">
|
||||
<div class="flex items-end gap-2">
|
||||
|
||||
@@ -134,7 +134,14 @@
|
||||
<div class="w-full">
|
||||
@if (!$server->isLocalhost())
|
||||
<div class="w-96">
|
||||
<x-forms.checkbox instantSave id="isBuildServer" label="Use it as a build server?" />
|
||||
@if ($isBuildServerLocked)
|
||||
<x-forms.checkbox disabled instantSave id="isBuildServer"
|
||||
helper="You can't use this server as a build server because it has defined resources."
|
||||
label="Use it as a build server?" />
|
||||
@else
|
||||
<x-forms.checkbox instantSave id="isBuildServer"
|
||||
label="Use it as a build server?" />
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@if (!$server->isBuildServer() && !$server->settings->is_cloudflare_tunnel)
|
||||
|
||||
@@ -38,7 +38,7 @@ services:
|
||||
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
|
||||
- POSTGRES_DB=${POSTGRES_DB:-fider}
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "$SERVICE_USER_POSTGRES"]
|
||||
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
|
||||
@@ -801,7 +801,7 @@
|
||||
"fider": {
|
||||
"documentation": "https://fider.io?utm_source=coolify.io",
|
||||
"slogan": "Fider is a feedback platform for collecting and managing user feedback.",
|
||||
"compose": "c2VydmljZXM6CiAgZmlkZXI6CiAgICBpbWFnZTogJ2dldGZpZGVyL2ZpZGVyOnN0YWJsZScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GSURFUl8zMDAwCiAgICAgIC0gQkFTRV9VUkw9JFNFUlZJQ0VfRlFETl9GSURFUl8zMDAwCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1wb3N0Z3JlczovLyRTRVJWSUNFX1VTRVJfUE9TVEdSRVM6JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNAZGF0YWJhc2U6NTQzMi9maWRlcj9zc2xtb2RlPWRpc2FibGUnCiAgICAgIC0gSldUX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF82NF9GSURFUgogICAgICAtICdFTUFJTF9OT1JFUExZPSR7RU1BSUxfTk9SRVBMWTotbm9yZXBseUBleGFtcGxlLmNvbX0nCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9BUEk9JEVNQUlMX01BSUxHVU5fQVBJCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9ET01BSU49JEVNQUlMX01BSUxHVU5fRE9NQUlOCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9SRUdJT049JEVNQUlMX01BSUxHVU5fUkVHSU9OCiAgICAgIC0gJ0VNQUlMX1NNVFBfSE9TVD0ke0VNQUlMX1NNVFBfSE9TVDotc210cC5tYWlsZ3VuLmNvbX0nCiAgICAgIC0gJ0VNQUlMX1NNVFBfUE9SVD0ke0VNQUlMX1NNVFBfUE9SVDotNTg3fScKICAgICAgLSAnRU1BSUxfU01UUF9VU0VSTkFNRT0ke0VNQUlMX1NNVFBfVVNFUk5BTUU6LXBvc3RtYXN0ZXJAbWFpbGd1bi5jb219JwogICAgICAtIEVNQUlMX1NNVFBfUEFTU1dPUkQ9JEVNQUlMX1NNVFBfUEFTU1dPUkQKICAgICAgLSBFTUFJTF9TTVRQX0VOQUJMRV9TVEFSVFRMUz0kRU1BSUxfU01UUF9FTkFCTEVfU1RBUlRUTFMKICAgICAgLSBFTUFJTF9BV1NTRVNfUkVHSU9OPSRFTUFJTF9BV1NTRVNfUkVHSU9OCiAgICAgIC0gRU1BSUxfQVdTU0VTX0FDQ0VTU19LRVlfSUQ9JEVNQUlMX0FXU1NFU19BQ0NFU1NfS0VZX0lECiAgICAgIC0gRU1BSUxfQVdTU0VTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRFTUFJTF9BV1NTRVNfU0VDUkVUX0FDQ0VTU19LRVkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSAvYXBwL2ZpZGVyCiAgICAgICAgLSBwaW5nCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTAKICBkYXRhYmFzZToKICAgIGltYWdlOiAncG9zdGdyZXM6MTInCiAgICB2b2x1bWVzOgogICAgICAtICdwZ19kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LWZpZGVyfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBwZ19pc3JlYWR5CiAgICAgICAgLSAnLVUnCiAgICAgICAgLSAkU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK",
|
||||
"compose": "c2VydmljZXM6CiAgZmlkZXI6CiAgICBpbWFnZTogJ2dldGZpZGVyL2ZpZGVyOnN0YWJsZScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GSURFUl8zMDAwCiAgICAgIC0gQkFTRV9VUkw9JFNFUlZJQ0VfRlFETl9GSURFUl8zMDAwCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1wb3N0Z3JlczovLyRTRVJWSUNFX1VTRVJfUE9TVEdSRVM6JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNAZGF0YWJhc2U6NTQzMi9maWRlcj9zc2xtb2RlPWRpc2FibGUnCiAgICAgIC0gSldUX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF82NF9GSURFUgogICAgICAtICdFTUFJTF9OT1JFUExZPSR7RU1BSUxfTk9SRVBMWTotbm9yZXBseUBleGFtcGxlLmNvbX0nCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9BUEk9JEVNQUlMX01BSUxHVU5fQVBJCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9ET01BSU49JEVNQUlMX01BSUxHVU5fRE9NQUlOCiAgICAgIC0gRU1BSUxfTUFJTEdVTl9SRUdJT049JEVNQUlMX01BSUxHVU5fUkVHSU9OCiAgICAgIC0gJ0VNQUlMX1NNVFBfSE9TVD0ke0VNQUlMX1NNVFBfSE9TVDotc210cC5tYWlsZ3VuLmNvbX0nCiAgICAgIC0gJ0VNQUlMX1NNVFBfUE9SVD0ke0VNQUlMX1NNVFBfUE9SVDotNTg3fScKICAgICAgLSAnRU1BSUxfU01UUF9VU0VSTkFNRT0ke0VNQUlMX1NNVFBfVVNFUk5BTUU6LXBvc3RtYXN0ZXJAbWFpbGd1bi5jb219JwogICAgICAtIEVNQUlMX1NNVFBfUEFTU1dPUkQ9JEVNQUlMX1NNVFBfUEFTU1dPUkQKICAgICAgLSBFTUFJTF9TTVRQX0VOQUJMRV9TVEFSVFRMUz0kRU1BSUxfU01UUF9FTkFCTEVfU1RBUlRUTFMKICAgICAgLSBFTUFJTF9BV1NTRVNfUkVHSU9OPSRFTUFJTF9BV1NTRVNfUkVHSU9OCiAgICAgIC0gRU1BSUxfQVdTU0VTX0FDQ0VTU19LRVlfSUQ9JEVNQUlMX0FXU1NFU19BQ0NFU1NfS0VZX0lECiAgICAgIC0gRU1BSUxfQVdTU0VTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRFTUFJTF9BV1NTRVNfU0VDUkVUX0FDQ0VTU19LRVkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSAvYXBwL2ZpZGVyCiAgICAgICAgLSBwaW5nCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTAKICBkYXRhYmFzZToKICAgIGltYWdlOiAncG9zdGdyZXM6MTInCiAgICB2b2x1bWVzOgogICAgICAtICdwZ19kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LWZpZGVyfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtZCAkJHtQT1NUR1JFU19EQn0gLVUgJCR7UE9TVEdSRVNfVVNFUn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK",
|
||||
"tags": [
|
||||
"feedback",
|
||||
"user-feedback"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"coolify": {
|
||||
"v4": {
|
||||
"version": "4.0.0-beta.394"
|
||||
"version": "4.0.0-beta.395"
|
||||
},
|
||||
"nightly": {
|
||||
"version": "4.0.0-beta.395"
|
||||
"version": "4.0.0-beta.396"
|
||||
},
|
||||
"helper": {
|
||||
"version": "1.0.6"
|
||||
|
||||
Reference in New Issue
Block a user