diff --git a/app/Livewire/Project/Service/FileStorage.php b/app/Livewire/Project/Service/FileStorage.php
index ab7736c97..da85a1a6e 100644
--- a/app/Livewire/Project/Service/FileStorage.php
+++ b/app/Livewire/Project/Service/FileStorage.php
@@ -41,7 +41,7 @@ class FileStorage extends Component
$this->fileStorage->content = null;
}
$this->fileStorage->save();
- $this->fileStorage->saveStorageOnServer($this->service);
+ $this->fileStorage->saveStorageOnServer();
$this->dispatch('success', 'File updated successfully.');
} catch (\Throwable $e) {
$this->fileStorage->setRawAttributes($original);
diff --git a/app/Models/LocalFileVolume.php b/app/Models/LocalFileVolume.php
index 27ce5c5b5..76a15f655 100644
--- a/app/Models/LocalFileVolume.php
+++ b/app/Models/LocalFileVolume.php
@@ -13,23 +13,34 @@ class LocalFileVolume extends BaseModel
protected static function booted()
{
static::created(function (LocalFileVolume $fileVolume) {
- $fileVolume->saveStorageOnServer($fileVolume->service);
+ $fileVolume->load(['service']);
+ $fileVolume->saveStorageOnServer();
});
}
public function service()
{
return $this->morphTo('resource');
}
- public function saveStorageOnServer(ServiceApplication|ServiceDatabase $service)
+ public function saveStorageOnServer()
{
- $workdir = $service->service->workdir();
- $server = $service->service->server;
+ $workdir = $this->resource->service->workdir();
+ $server = $this->resource->service->server;
$commands = collect([
"mkdir -p $workdir > /dev/null 2>&1 || true",
"cd $workdir"
]);
+ $is_directory = $this->is_directory;
+ if ($is_directory) {
+ $commands->push("mkdir -p $this->fs_path > /dev/null 2>&1 || true");
+ }
+ if (str($this->fs_path)->startsWith('.') || str($this->fs_path)->startsWith('/') || str($this->fs_path)->startsWith('~')) {
+ $parent_dir = str($this->fs_path)->beforeLast('/');
+ if ($parent_dir != '') {
+ $commands->push("mkdir -p $parent_dir > /dev/null 2>&1 || true");
+ }
+ }
$fileVolume = $this;
- $path = Str::of(data_get($fileVolume, 'fs_path'));
+ $path = str(data_get($fileVolume, 'fs_path'));
$content = data_get($fileVolume, 'content');
if ($path->startsWith('.')) {
$path = $path->after('.');
@@ -38,17 +49,18 @@ class LocalFileVolume extends BaseModel
$isFile = instant_remote_process(["test -f $path && echo OK || echo NOK"], $server);
$isDir = instant_remote_process(["test -d $path && echo OK || echo NOK"], $server);
if ($isFile == 'OK' && $fileVolume->is_directory) {
- throw new \Exception("File $path is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory.");
+ throw new \Exception("The following file is a file on the server, but you are trying to mark it as a directory. Please delete the file on the server or mark it as directory.");
} else if ($isDir == 'OK' && !$fileVolume->is_directory) {
- throw new \Exception("File $path is a directory on the server, but you are trying to mark it as a file. Please delete the directory on the server or mark it as directory.");
+ throw new \Exception("The following file is a directory on the server, but you are trying to mark it as a file.
Please delete the directory on the server or mark it as directory.");
}
if (!$fileVolume->is_directory && $isDir == 'NOK') {
- $content = base64_encode($content);
- $commands->push("echo '$content' | base64 -d > $path");
+ if ($content) {
+ $content = base64_encode($content);
+ $commands->push("echo '$content' | base64 -d > $path");
+ }
} else if ($isDir == 'NOK' && $fileVolume->is_directory) {
$commands->push("mkdir -p $path > /dev/null 2>&1 || true");
}
- ray($commands->toArray());
return instant_remote_process($commands, $server);
}
}
diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php
index 6ebf2efda..9ab26e59a 100644
--- a/bootstrap/helpers/shared.php
+++ b/bootstrap/helpers/shared.php
@@ -125,6 +125,9 @@ function handleError(?Throwable $error = null, ?Livewire\Component $livewire = n
}
if (isset($livewire)) {
+ if (str($message)->length() > 20) {
+ return $livewire->dispatch('error', 'Error occured', $message);
+ }
return $livewire->dispatch('error', $message);
}
throw new Exception($message);
@@ -527,10 +530,10 @@ function getTopLevelNetworks(Service|Application $resource)
$definedNetwork = collect([$resource->uuid]);
$services = collect($services)->map(function ($service, $_) use ($topLevelNetworks, $definedNetwork) {
$serviceNetworks = collect(data_get($service, 'networks', []));
- $hasNetworkMode = data_get($service, 'network_mode');
+ $hasHostNetworkMode = data_get($service, 'network_mode') === 'host' ? true : false;
- // Only add 'networks' key if 'network_mode' is absent
- if (!$hasNetworkMode) {
+ // Only add 'networks' key if 'network_mode' is not 'host'
+ if (!$hasHostNetworkMode) {
// Collect/create/update networks
if ($serviceNetworks->count() > 0) {
foreach ($serviceNetworks as $networkName => $networkDetails) {
@@ -632,6 +635,7 @@ 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', []));
+ $hasHostNetworkMode = data_get($service, 'network_mode') === 'host' ? true : false;
if ($serviceLabels->count() > 0) {
$removedLabels = collect([]);
$serviceLabels = $serviceLabels->filter(function ($serviceLabel, $serviceLabelName) use ($removedLabels) {
@@ -702,7 +706,6 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
$savedService->image = $image;
$savedService->save();
}
-
// Collect/create/update networks
if ($serviceNetworks->count() > 0) {
foreach ($serviceNetworks as $networkName => $networkDetails) {
@@ -733,37 +736,39 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
$savedService->ports = $collectedPorts->implode(',');
$savedService->save();
- // Add Coolify specific networks
- $definedNetworkExists = $topLevelNetworks->contains(function ($value, $_) use ($definedNetwork) {
- return $value == $definedNetwork;
- });
- if (!$definedNetworkExists) {
- foreach ($definedNetwork as $network) {
- $topLevelNetworks->put($network, [
- 'name' => $network,
- 'external' => true
- ]);
+ if (!$hasHostNetworkMode) {
+ // Add Coolify specific networks
+ $definedNetworkExists = $topLevelNetworks->contains(function ($value, $_) use ($definedNetwork) {
+ return $value == $definedNetwork;
+ });
+ if (!$definedNetworkExists) {
+ foreach ($definedNetwork as $network) {
+ $topLevelNetworks->put($network, [
+ 'name' => $network,
+ 'external' => true
+ ]);
+ }
}
- }
- $networks = collect();
- foreach ($serviceNetworks as $key => $serviceNetwork) {
- if (gettype($serviceNetwork) === 'string') {
- // networks:
- // - appwrite
- $networks->put($serviceNetwork, null);
- } else if (gettype($serviceNetwork) === 'array') {
- // networks:
- // default:
- // ipv4_address: 192.168.203.254
- // $networks->put($serviceNetwork, null);
- ray($key);
- $networks->put($key, $serviceNetwork);
+ $networks = collect();
+ foreach ($serviceNetworks as $key => $serviceNetwork) {
+ if (gettype($serviceNetwork) === 'string') {
+ // networks:
+ // - appwrite
+ $networks->put($serviceNetwork, null);
+ } else if (gettype($serviceNetwork) === 'array') {
+ // networks:
+ // default:
+ // ipv4_address: 192.168.203.254
+ // $networks->put($serviceNetwork, null);
+ ray($key);
+ $networks->put($key, $serviceNetwork);
+ }
}
+ foreach ($definedNetwork as $key => $network) {
+ $networks->put($network, null);
+ }
+ data_set($service, 'networks', $networks->toArray());
}
- foreach ($definedNetwork as $key => $network) {
- $networks->put($network, null);
- }
- data_set($service, 'networks', $networks->toArray());
// Collect/create/update volumes
if ($serviceVolumes->count() > 0) {