From 028a2eb2755e3e30aca5cb01921727db0488c421 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Dec 2023 22:16:27 +0100 Subject: [PATCH 1/6] Fix Docker compose build command and remove debug statements --- app/Actions/Service/StartService.php | 2 +- app/Http/Livewire/Project/Shared/EnvironmentVariable/Show.php | 1 - app/Jobs/ContainerStatusJob.php | 1 + app/Models/Application.php | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/Actions/Service/StartService.php b/app/Actions/Service/StartService.php index 50f7fba82..3cd23ef85 100644 --- a/app/Actions/Service/StartService.php +++ b/app/Actions/Service/StartService.php @@ -21,7 +21,7 @@ class StartService $commands[] = "echo 'Pulling images.'"; $commands[] = "docker compose pull"; $commands[] = "echo 'Starting containers.'"; - $commands[] = "docker compose up -d --remove-orphans --force-recreate"; + $commands[] = "docker compose up -d --remove-orphans --force-recreate --build"; $commands[] = "docker network connect $service->uuid coolify-proxy >/dev/null 2>&1 || true"; $compose = data_get($service,'docker_compose',[]); $serviceNames = data_get(Yaml::parse($compose),'services',[]); diff --git a/app/Http/Livewire/Project/Shared/EnvironmentVariable/Show.php b/app/Http/Livewire/Project/Shared/EnvironmentVariable/Show.php index dc2808d08..eed0f7052 100644 --- a/app/Http/Livewire/Project/Shared/EnvironmentVariable/Show.php +++ b/app/Http/Livewire/Project/Shared/EnvironmentVariable/Show.php @@ -59,7 +59,6 @@ class Show extends Component { $this->validate(); $this->env->save(); - ray($this->env); $this->emit('success', 'Environment variable updated successfully.'); $this->emit('refreshEnvs'); } diff --git a/app/Jobs/ContainerStatusJob.php b/app/Jobs/ContainerStatusJob.php index ead13f81a..090fd1896 100644 --- a/app/Jobs/ContainerStatusJob.php +++ b/app/Jobs/ContainerStatusJob.php @@ -34,6 +34,7 @@ class ContainerStatusJob implements ShouldQueue, ShouldBeEncrypted public function __construct(public Server $server) { + if (isDev()) $this->handle(); } diff --git a/app/Models/Application.php b/app/Models/Application.php index 0a9c8fac8..5d5082cbf 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -606,7 +606,6 @@ class Application extends BaseModel { if ($this->docker_compose_raw) { $mainCompose = parseDockerComposeFile(resource: $this, isNew: false, pull_request_id: $pull_request_id); - ray($this->docker_compose_pr_raw); if ($this->getMorphClass() === 'App\Models\Application' && $this->docker_compose_pr_raw) { parseDockerComposeFile(resource: $this, isNew: false, pull_request_id: $pull_request_id, is_pr: true); } From 2c2d74c0d65f7a836ee99cebdf4f0a7314daebac Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 1 Dec 2023 22:16:48 +0100 Subject: [PATCH 2/6] Update release version to 4.0.0-beta.152 --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index 4592b8dfe..23bd8822a 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -7,7 +7,7 @@ return [ // The release version of your application // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')) - 'release' => '4.0.0-beta.151', + 'release' => '4.0.0-beta.152', // When left empty or `null` the Laravel environment will be used 'environment' => config('app.env'), diff --git a/config/version.php b/config/version.php index 70e9fdca3..452cdd822 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Sun, 3 Dec 2023 12:16:33 +0100 Subject: [PATCH 3/6] service: meilisearch --- .../Livewire/Project/New/DockerCompose.php | 84 +++---------------- app/Models/Service.php | 15 ++++ .../project/shared/webhooks.blade.php | 59 ++++++------- templates/compose/meilisearch.yaml | 19 +++++ templates/service-templates.json | 13 +++ 5 files changed, 90 insertions(+), 100 deletions(-) create mode 100644 templates/compose/meilisearch.yaml diff --git a/app/Http/Livewire/Project/New/DockerCompose.php b/app/Http/Livewire/Project/New/DockerCompose.php index cd0d86c08..280167bb1 100644 --- a/app/Http/Livewire/Project/New/DockerCompose.php +++ b/app/Http/Livewire/Project/New/DockerCompose.php @@ -22,79 +22,19 @@ class DockerCompose extends Component $this->query = request()->query(); if (isDev()) { $this->dockerComposeRaw = 'services: - ghost: - image: ghost:5 - volumes: - - ~/configs:/etc/configs/:ro - - ./var/lib/ghost/content:/tmp/ghost2/content:ro - - /var/lib/ghost/content:/tmp/ghost/content:rw - - ghost-content-data:/var/lib/ghost/content - - type: volume - source: mydata - target: /data - - type: bind - source: ./var/lib/ghost/data - target: /data - - type: bind - source: /tmp - target: /tmp - labels: - - "test.label=true" - ports: - - "3000" - - "3000-3005" - - "8000:8000" - - "9090-9091:8080-8081" - - "49100:22" - - "127.0.0.1:8001:8001" - - "127.0.0.1:5000-5010:5000-5010" - - "127.0.0.1::5000" - - "6060:6060/udp" - - "12400-12500:1240" - - target: 80 - published: 8080 - protocol: tcp - mode: host - networks: - - some-network - - other-network + appsmith: + build: + context: . + dockerfile_inline: | + FROM nginx + ARG GIT_COMMIT + ARG GIT_BRANCH + RUN echo "Hello World ${GIT_COMMIT} ${GIT_BRANCH}" + args: + - GIT_COMMIT=cdc3b19 + - GIT_BRANCH=${GIT_BRANCH} environment: - - database__client=${DATABASE_CLIENT:-mysql} - - database__connection__database=${MYSQL_DATABASE:-ghost} - - database__connection__host=${DATABASE_CONNECTION_HOST:-mysql} - - test=${TEST:?true} - - url=$SERVICE_FQDN_GHOST - - database__connection__user=$SERVICE_USER_MYSQL - - database__connection__password=$SERVICE_PASSWORD_MYSQL - depends_on: - - mysql - mysql: - image: mysql:8.0 - volumes: - - ghost-mysql-data:/var/lib/mysql - environment: - - MYSQL_USER=${SERVICE_USER_MYSQL} - - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=$MYSQL_DATABASE - - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} - - SESSION_SECRET - minio: - image: minio/minio - environment: - RACK_ENV: development - A: $A - SHOW: ${SHOW} - SHOW1: ${SHOW2-show1} - SHOW2: ${SHOW3:-show2} - SHOW3: ${SHOW4?show3} - SHOW4: ${SHOW5:?show4} - SHOW5: ${SERVICE_USER_MINIO} - SHOW6: ${SERVICE_PASSWORD_MINIO} - SHOW7: ${SERVICE_PASSWORD_64_MINIO} - SHOW8: ${SERVICE_BASE64_64_MINIO} - SHOW9: ${SERVICE_BASE64_128_MINIO} - SHOW10: ${SERVICE_BASE64_MINIO} - SHOW11: + - APPSMITH_MAIL_ENABLED=${APPSMITH_MAIL_ENABLED} '; } } diff --git a/app/Models/Service.php b/app/Models/Service.php index b5842bb88..8b7202a65 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -131,6 +131,20 @@ class Service extends BaseModel } $fields->put('Weblate', $data); break; + case str($image)?->contains('meilisearch'): + $data = collect([]); + $SERVICE_PASSWORD_MEILISEARCH = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_MEILISEARCH')->first(); + if ($SERVICE_PASSWORD_MEILISEARCH) { + $data = $data->merge([ + 'API Key' => [ + 'key' => data_get($SERVICE_PASSWORD_MEILISEARCH, 'key'), + 'value' => data_get($SERVICE_PASSWORD_MEILISEARCH, 'value'), + 'isPassword' => true, + ], + ]); + } + $fields->put('Meilisearch', $data); + break; case str($image)?->contains('ghost'): $data = collect([]); $MAIL_OPTIONS_AUTH_PASS = $this->environment_variables()->where('key', 'MAIL_OPTIONS_AUTH_PASS')->first(); @@ -193,6 +207,7 @@ class Service extends BaseModel break; } } + ray($fields); $databases = $this->databases()->get(); foreach ($databases as $database) { diff --git a/resources/views/livewire/project/shared/webhooks.blade.php b/resources/views/livewire/project/shared/webhooks.blade.php index c77ae3315..20f61b9f1 100644 --- a/resources/views/livewire/project/shared/webhooks.blade.php +++ b/resources/views/livewire/project/shared/webhooks.blade.php @@ -9,33 +9,36 @@ helper="See details in our documentation." label="Deploy Webhook (auth required)" id="deploywebhook"> -
-

Manual Git Webhooks

- @if ($githubManualWebhook && $gitlabManualWebhook) -
-
- - + @if ($resource->type() !== 'service') +
+

Manual Git Webhooks

+ @if ($githubManualWebhook && $gitlabManualWebhook) + +
+ + + +
+ + Webhook Configuration on GitHub + + + +
+ + +
+ Save + + @else + You are using an official Git App. You do not need manual webhooks. + @endif +
+ @endif -
- - Webhook Configuration on GitHub - - - -
- - -
- Save - - @else - You are using an official Git App. You do not need manual webhooks. - @endif -
diff --git a/templates/compose/meilisearch.yaml b/templates/compose/meilisearch.yaml new file mode 100644 index 000000000..eb401f009 --- /dev/null +++ b/templates/compose/meilisearch.yaml @@ -0,0 +1,19 @@ +# documentation: https://www.meilisearch.com/docs/learn/configuration/instance_options +# slogan: MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. +# tags: search,engine,fulltext,full,text,meilisearch + +services: + meilisearch: + image: getmeili/meilisearch:latest + environment: + - SERVICE_FQDN_MEILISEARCH + - MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true} + - MEILI_ENV=${MEILI_ENV:-production} + - MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILISEARCH} + volumes: + - meilisearch-data:/meili_data + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:7700/health"] + interval: 2s + timeout: 10s + retries: 15 diff --git a/templates/service-templates.json b/templates/service-templates.json index f65dd2894..ab0ccfd16 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -304,6 +304,19 @@ "low-code" ] }, + "meilisearch": { + "documentation": "https:\/\/www.meilisearch.com\/docs\/learn\/configuration\/instance_options", + "slogan": "MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine.", + "compose": "c2VydmljZXM6CiAgbWVpbGlzZWFyY2g6CiAgICBpbWFnZTogJ2dldG1laWxpL21laWxpc2VhcmNoOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NRUlMSVNFQVJDSAogICAgICAtICdNRUlMSV9OT19BTkFMWVRJQ1M9JHtNRUlMSV9OT19BTkFMWVRJQ1M6LXRydWV9JwogICAgICAtICdNRUlMSV9FTlY9JHtNRUlMSV9FTlY6LXByb2R1Y3Rpb259JwogICAgICAtICdNRUlMSV9NQVNURVJfS0VZPSR7U0VSVklDRV9QQVNTV09SRF9NRUlMSVNFQVJDSH0nCiAgICB2b2x1bWVzOgogICAgICAtICdtZWlsaXNlYXJjaC1kYXRhOi9tZWlsaV9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0Ojc3MDAvaGVhbHRoJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", + "tags": [ + "search", + "engine", + "fulltext", + "full", + "text", + "meilisearch" + ] + }, "metube": { "documentation": "https:\/\/github.com\/alexta69\/metube", "slogan": "A web GUI for youtube-dl with playlist support. It enables you to effortlessly download videos from YouTube and dozens of other sites.", From f952512615b33500ac7459ee1d7c6158f2f9a404 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 4 Dec 2023 09:29:55 +0100 Subject: [PATCH 4/6] fix: add cf tunnel to boarding server view --- app/Http/Livewire/Boarding/Index.php | 3 +++ app/Models/Server.php | 2 -- resources/views/livewire/boarding/index.blade.php | 9 +++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/Http/Livewire/Boarding/Index.php b/app/Http/Livewire/Boarding/Index.php index 67221d0c6..19c51d5ce 100644 --- a/app/Http/Livewire/Boarding/Index.php +++ b/app/Http/Livewire/Boarding/Index.php @@ -32,6 +32,7 @@ class Index extends Component public ?int $remoteServerPort = 22; public ?string $remoteServerUser = 'root'; public bool $isSwarmManager = false; + public bool $isCloudflareTunnel = false; public ?Server $createdServer = null; public Collection $projects; @@ -184,6 +185,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== 'team_id' => currentTeam()->id, ]); $this->createdServer->settings->is_swarm_manager = $this->isSwarmManager; + $this->createdServer->settings->is_cloudflare_tunnel = $this->isCloudflareTunnel; $this->createdServer->settings->save(); $this->createdServer->addInitialNetwork(); $this->validateServer(); @@ -200,6 +202,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== ]); } catch (\Throwable $e) { $this->serverReachable = false; + $this->createdServer->delete(); return handleError(error: $e, livewire: $this); } diff --git a/app/Models/Server.php b/app/Models/Server.php index f65ecfb10..439bba990 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -87,8 +87,6 @@ class Server extends BaseModel return $this->hasOne(ServerSetting::class); } public function addInitialNetwork() { - ray($this->id); - if ($this->id === 0) { if ($this->isSwarm()) { SwarmDocker::create([ diff --git a/resources/views/livewire/boarding/index.blade.php b/resources/views/livewire/boarding/index.blade.php index 98a2c772a..ea14faae1 100644 --- a/resources/views/livewire/boarding/index.blade.php +++ b/resources/views/livewire/boarding/index.blade.php @@ -207,10 +207,11 @@ placeholder="Username to connect to your server. Default is root." label="Username" id="remoteServerUser" /> - {{--
- -
--}} +
+ +
Check Connection From c25baf69e17606938c141a9b0b586ccbdf45dc14 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 4 Dec 2023 11:20:50 +0100 Subject: [PATCH 5/6] fix: workdir issue for basedir fix: remove / mount on helpers image --- app/Jobs/ApplicationDeploymentJob.php | 32 +++++++---------- app/Models/Application.php | 4 +-- bootstrap/helpers/applications.php | 4 +-- bootstrap/helpers/shared.php | 51 +++++++++++++++++++++++++-- 4 files changed, 66 insertions(+), 25 deletions(-) diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index 2b4796862..3b2313e19 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -347,6 +347,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->generate_image_names(); $this->check_image_locally_or_remotely(); if (str($this->saved_outputs->get('local_image_found'))->isNotEmpty()) { + $this->create_workdir(); $this->generate_compose_file(); $this->rolling_update(); return; @@ -442,10 +443,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->clone_repository(); $this->generate_image_names(); $this->cleanup_git(); + $this->application->loadComposeFile(isInit: false); $composeFile = $this->application->parseCompose(pull_request_id: $this->pull_request_id); $yaml = Yaml::dump($composeFile->toArray(), 10); - ray($composeFile); - ray($this->container_name); $this->docker_compose_base64 = base64_encode($yaml); $this->execute_remote_command([ executeInDocker($this->deployment_uuid, "echo '{$this->docker_compose_base64}' | base64 -d > {$this->workdir}{$this->docker_compose_location}"), "hidden" => true @@ -453,12 +453,10 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->save_environment_variables(); $this->stop_running_container(force: true); - ray($this->pull_request_id); $networkId = $this->application->uuid; if ($this->pull_request_id !== 0) { $networkId = "{$this->application->uuid}-{$this->pull_request_id}"; } - ray($networkId); if ($this->server->isSwarm()) { // TODO } else { @@ -487,7 +485,6 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted ); } $this->start_by_compose_file(); - $this->application->loadComposeFile(isInit: false); } private function deploy_dockerfile_buildpack() { @@ -530,6 +527,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted if (!$this->force_rebuild) { $this->check_image_locally_or_remotely(); if (str($this->saved_outputs->get('local_image_found'))->isNotEmpty() && !$this->application->isConfigurationChanged()) { + $this->create_workdir(); $this->execute_remote_command([ "echo 'No configuration changed & image found ({$this->production_image_name}) with the same Git Commit SHA. Build step skipped.'", ]); @@ -677,7 +675,14 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted [executeInDocker($this->deployment_uuid, "docker compose --project-directory {$this->workdir} up -d"), "hidden" => true], ); } - + private function create_workdir() + { + $this->execute_remote_command( + [ + "command" => executeInDocker($this->deployment_uuid, "mkdir -p {$this->workdir}") + ], + ); + } private function prepare_builder_image() { $helperImage = config('coolify.helper_image'); @@ -686,9 +691,9 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted $this->dockerConfigFileExists = instant_remote_process(["test -f {$this->serverUserHomeDir}/.docker/config.json && echo 'OK' || echo 'NOK'"], $this->server); if ($this->dockerConfigFileExists === 'OK') { - $runCommand = "docker run -d --network {$this->destination->network} -v /:/host --name {$this->deployment_uuid} --rm -v {$this->serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}"; + $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v {$this->serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}"; } else { - $runCommand = "docker run -d --network {$this->destination->network} -v /:/host --name {$this->deployment_uuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}"; + $runCommand = "docker run -d --network {$this->destination->network} --name {$this->deployment_uuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}"; } $this->execute_remote_command( [ @@ -703,13 +708,6 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted ], ); - if ($this->restart_only || !$this->force_rebuild) { - $this->execute_remote_command( - [ - "command" => executeInDocker($this->deployment_uuid, "mkdir -p {$this->workdir}") - ], - ); - } } private function deploy_to_additional_destinations() { @@ -1250,10 +1248,6 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf"); [executeInDocker($this->deployment_uuid, "docker compose --project-directory {$this->workdir} pull"), "hidden" => true], [executeInDocker($this->deployment_uuid, "docker compose --project-directory {$this->workdir} up --build -d"), "hidden" => true], ); - } else if ($this->application->build_pack === 'dockercompose') { - $this->execute_remote_command( - ["docker compose --project-directory {$this->configuration_dir} up --build -d", "hidden" => true], - ); } else { $this->execute_remote_command( [executeInDocker($this->deployment_uuid, "docker compose --project-directory {$this->workdir} up --build -d"), "hidden" => true], diff --git a/app/Models/Application.php b/app/Models/Application.php index 5d5082cbf..341d6faf5 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -587,12 +587,12 @@ class Application extends BaseModel $commands = collect([]); if ($dockerConfigFileExists === 'OK') { $commands->push([ - "command" => "docker run -d --network $network -v /:/host --name $deploymentUuid --rm -v {$serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock $helperImage", + "command" => "docker run -d --network $network --name $deploymentUuid --rm -v {$serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock $helperImage", "hidden" => true, ]); } else { $commands->push([ - "command" => "docker run -d --network {$network} -v /:/host --name {$deploymentUuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}", + "command" => "docker run -d --network {$network} --name {$deploymentUuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}", "hidden" => true, ]); } diff --git a/bootstrap/helpers/applications.php b/bootstrap/helpers/applications.php index bc0de5c47..25ca66241 100644 --- a/bootstrap/helpers/applications.php +++ b/bootstrap/helpers/applications.php @@ -97,12 +97,12 @@ function prepareHelperContainer(Server $server, string $network, string $deploym $commands = collect([]); if ($dockerConfigFileExists === 'OK') { $commands->push([ - "command" => "docker run -d --network $network -v /:/host --name $deploymentUuid --rm -v {$serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock $helperImage", + "command" => "docker run -d --network $network --name $deploymentUuid --rm -v {$serverUserHomeDir}/.docker/config.json:/root/.docker/config.json:ro -v /var/run/docker.sock:/var/run/docker.sock $helperImage", "hidden" => true, ]); } else { $commands->push([ - "command" => "docker run -d --network {$network} -v /:/host --name {$deploymentUuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}", + "command" => "docker run -d --network {$network} --name {$deploymentUuid} --rm -v /var/run/docker.sock:/var/run/docker.sock {$helperImage}", "hidden" => true, ]); } diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index d52aa4d8e..8e63cfe3b 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -1003,7 +1003,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal if ($savedService->serviceType()) { $fqdns = generateServiceSpecificFqdns($savedService, forTraefik: true); } else { - $fqdns = collect(data_get($savedService, 'fqdns')); + $fqdns = collect(data_get($savedService, 'fqdns'))->filter(); } $defaultLabels = defaultLabels($resource->id, $containerName, type: 'service', subType: $isDatabase ? 'database' : 'application', subId: $savedService->id); $serviceLabels = $serviceLabels->merge($defaultLabels); @@ -1102,6 +1102,8 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal $serviceNetworks = collect(data_get($service, 'networks', [])); $serviceVariables = collect(data_get($service, 'environment', [])); $serviceLabels = collect(data_get($service, 'labels', [])); + $serviceBuildVariables = collect(data_get($service, 'build.args', [])); + $serviceVariables = $serviceVariables->merge($serviceBuildVariables); if ($serviceLabels->count() > 0) { $removedLabels = collect([]); $serviceLabels = $serviceLabels->filter(function ($serviceLabel, $serviceLabelName) use ($removedLabels) { @@ -1148,7 +1150,52 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal data_set($service, 'volumes', $serviceVolumes->toArray()); } } else { - // TODO + if (count($serviceVolumes) > 0) { + $serviceVolumes = $serviceVolumes->map(function ($volume) use ($resource, $topLevelVolumes) { + if (is_string($volume)) { + $volume = str($volume); + if ($volume->contains(':')) { + $name = $volume->before(':'); + $mount = $volume->after(':'); + if ($name->startsWith('.') || $name->startsWith('~')) { + $dir = base_configuration_dir() . '/applications/' . $resource->uuid; + if ($name->startsWith('.')) { + $name = $name->replaceFirst('.', $dir); + } + if ($name->startsWith('~')) { + $name = $name->replaceFirst('~', $dir); + } + $volume = str("$name:$mount"); + } else { + $topLevelVolumes->put($name->value(), [ + 'name' => $name->value(), + ]); + } + } + } else if (is_array($volume)) { + $source = data_get($volume, 'source'); + if ($source) { + if (str($source, '.') || str($source, '~')) { + $dir = base_configuration_dir() . '/applications/' . $resource->uuid; + if (str($source, '.')) { + $source = str('.', $dir, $source); + } + if (str($source, '~')) { + $source = str('~', $dir, $source); + } + data_set($volume, 'source', $source); + } else { + data_set($volume, 'source', $source); + $topLevelVolumes->put($source, [ + 'name' => $source, + ]); + } + } + } + return $volume->value(); + }); + data_set($service, 'volumes', $serviceVolumes->toArray()); + } } // Decide if the service is a database $isDatabase = isDatabaseImage(data_get_str($service, 'image')); From 76296c1f1979e76b9714639c252676a6b1f878e4 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 4 Dec 2023 11:25:24 +0100 Subject: [PATCH 6/6] fix: prevent autorefresh of proxy status --- app/Http/Livewire/Server/Proxy/Status.php | 3 +++ resources/views/livewire/server/proxy/status.blade.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Livewire/Server/Proxy/Status.php b/app/Http/Livewire/Server/Proxy/Status.php index 0c5f274b5..674dd623d 100644 --- a/app/Http/Livewire/Server/Proxy/Status.php +++ b/app/Http/Livewire/Server/Proxy/Status.php @@ -14,6 +14,9 @@ class Status extends Component public int $numberOfPolls = 0; protected $listeners = ['proxyStatusUpdated', 'startProxyPolling']; + public function mount() { + $this->checkProxy(); + } public function startProxyPolling() { $this->checkProxy(); diff --git a/resources/views/livewire/server/proxy/status.blade.php b/resources/views/livewire/server/proxy/status.blade.php index e3184d061..95e1b4a50 100644 --- a/resources/views/livewire/server/proxy/status.blade.php +++ b/resources/views/livewire/server/proxy/status.blade.php @@ -1,6 +1,6 @@
@if ($server->isFunctional()) -
+
@if (data_get($server, 'proxy.status') === 'running') @elseif (data_get($server, 'proxy.status') === 'restarting')