mirror of
https://github.com/ershisan99/coolify.git
synced 2026-01-03 04:59:27 +00:00
Compare commits
12 Commits
v4.0.0-bet
...
v4.0.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f34df251e | ||
|
|
bfeaae9caa | ||
|
|
ba90a52344 | ||
|
|
a3a61dbe55 | ||
|
|
5799e6d8b0 | ||
|
|
b2944f11db | ||
|
|
25e2b812cb | ||
|
|
59383d3678 | ||
|
|
7b2d09f9d1 | ||
|
|
d30faf7bc4 | ||
|
|
b9d3f9da62 | ||
|
|
86ee9c09ce |
45
README.md
45
README.md
@@ -35,28 +35,31 @@ Thank you so much!
|
|||||||
|
|
||||||
Special thanks to our biggest sponsors!
|
Special thanks to our biggest sponsors!
|
||||||
|
|
||||||
<a href="https://cccareers.org/" target="_blank"><img src="./other/logos/ccc-logo.webp" alt="cccareers logo" width="200"/></a>
|
### Special Sponsors
|
||||||
<a href="http://htznr.li/CoolifyXHetzner" target="_blank"><img src="./other/logos/hetzner.jpg" alt="hetzner logo" width="150"/></a>
|
|
||||||
<a href="https://logto.io/?ref=coolify" target="_blank"><img src="./other/logos/logto.webp" alt="logto logo" width="150"/></a>
|
|
||||||
<a href="https://bc.direct/?ref=coolify.io" target="_blank"><img src="./other/logos/bc.png" alt="bc direct logo" width="200"/></a>
|
|
||||||
<a href="https://www.quantcdn.io/?ref=coolify.io" target="_blank"><img src="./other/logos/quant.svg" alt="quantcdn logo" width="150"/></a>
|
|
||||||
<a href="https://arcjet.com/?ref=coolify.io" target="_blank"><img src="./other/logos/arcjet.svg" alt="arcjet logo" width="200"/></a>
|
|
||||||
<a href="https://supa.guide/?ref=coolify.io" target="_blank"><img src="./other/logos/supaguide.png" alt="supaguide logo" width="200"/></a>
|
|
||||||
<a href="https://tigrisdata.com/?ref=coolify.io" target="_blank"><img src="./other/logos/tigris.svg" alt="tigris logo" width="140"/></a>
|
|
||||||
<a href="https://fractalnetworks.co/?ref=coolify.io" target="_blank"><img src="./other/logos/fractal.svg" alt="fractal logo" width="180"/></a>
|
|
||||||
<a href="https://coolify.ad.vin/?ref=coolify.io" target="_blank"><img src="./other/logos/advin.png" alt="advin logo" width="250"/></a>
|
|
||||||
<a href="https://trieve.ai/?ref=coolify.io" target="_blank"><img src="./other/logos/trieve_bg.png" alt="trieve logo" width="180"/></a>
|
|
||||||
<a href="https://blacksmith.sh/?ref=coolify.io" target="_blank"><img src="./other/logos/blacksmith.svg" alt="blacksmith logo" width="200"/></a>
|
|
||||||
<a href="https://latitude.sh/?ref=coolify.io" target="_blank"><img src="./other/logos/latitude.svg" alt="latitude logo" width="200"/></a>
|
|
||||||
<a href="https://brand.dev/?ref=coolify.io" target="_blank"><img src="./other/logos/branddev.png" alt="branddev logo" width="200"/></a>
|
|
||||||
<a href="https://jobscollider.com/remote-jobs?ref=coolify.io" target="_blank"><img src="./other/logos/jobscollider.svg" alt="jobscollider logo" width="200"/></a>
|
|
||||||
<a href="https://hostinger.com?ref=coolify.io" target="_blank"><img src="./other/logos/hostinger.svg" alt="hostinger logo" width="200"/></a>
|
|
||||||
<a href="https://www.glueops.dev/?ref=coolify.io" target="_blank"><img src="./other/logos/glueops.webp" alt="glueops logo" width="60"/></a>
|
|
||||||
<a href="https://ubicloud.com/?ref=coolify.io" target="_blank"><img src="./other/logos/ubicloud.svg" alt="ubicloud logo" width="200"/></a>
|
|
||||||
<a href="https://juxtdigital.dev/?ref=coolify.io" target="_blank"><img src="./other/logos/juxtdigital.png" alt="juxtdigital logo" width="200"/></a>
|
|
||||||
<a href="https://saasykit.com/?ref=coolify.io" target="_blank"><img src="./other/logos/saasykit.png" alt="saasykit logo" width="200"/></a>
|
|
||||||
<a href="https://massivegrid.com/?ref=coolify.io" target="_blank"><img src="./other/logos/massivegrid.svg" alt="massivegrid logo" width="200"/></a>
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
* [CCCareers](https://cccareers.org/) - A career development platform for coding bootcamp graduates.
|
||||||
|
* [Hetzner](http://htznr.li/CoolifyXHetzner) - A German web hosting company offering dedicated servers and cloud services.
|
||||||
|
* [Logto](https://logto.io/?ref=coolify) - An open-source authentication and authorization platform.
|
||||||
|
* [BC Direct](https://bc.direct/?ref=coolify.io) - A digital marketing agency specializing in e-commerce solutions.
|
||||||
|
* [QuantCDN](https://www.quantcdn.io/?ref=coolify.io) - A content delivery network (CDN) for fast content delivery.
|
||||||
|
* [Arcjet](https://arcjet.com/?ref=coolify.io) - A cloud-based platform for data analytics and visualization.
|
||||||
|
* [SupaGuide](https://supa.guide/?ref=coolify.io) - A platform offering guides and resources for web development and design.
|
||||||
|
* [Tigris](https://tigrisdata.com/?ref=coolify.io) - A data integration platform for connecting and managing data sources.
|
||||||
|
* [Fractal Networks](https://fractalnetworks.co/?ref=coolify.io) - A decentralized network infrastructure for secure data exchange.
|
||||||
|
* [Advin](https://coolify.ad.vin/?ref=coolify.io) - A digital advertising agency specializing in programmatic advertising.
|
||||||
|
* [Treive](https://trieve.ai/?ref=coolify.io) - An AI-powered data analytics platform for business insights.
|
||||||
|
* [Blacksmith](https://blacksmith.sh/?ref=coolify.io) - A cloud-based platform for automating DevOps and infrastructure management.
|
||||||
|
* [Latitude](https://latitude.sh/?ref=coolify.io) - A platform offering location-based services and geospatial data.
|
||||||
|
* [Brand Dev](https://brand.dev/?ref=coolify.io) - A web development agency specializing in brand identity and digital presence.
|
||||||
|
* [Jobscollider](https://jobscollider.com/remote-jobs?ref=coolify.io) - A job search platform specializing in remote and flexible work opportunities.
|
||||||
|
* [Hostinger](https://hostinger.com?ref=coolify.io) - A web hosting company offering shared, VPS, and cloud hosting services.
|
||||||
|
* [Glueops](https://www.glueops.dev/?ref=coolify.io) - A DevOps and cloud consulting company offering infrastructure automation services.
|
||||||
|
* [Ubicloud](https://ubicloud.com/?ref=coolify.io) - A cloud-based platform for IoT device management and data analytics.
|
||||||
|
* [Juxtdigital](https://juxtdigital.dev/?ref=coolify.io) - A digital agency offering web development, design, and marketing services.
|
||||||
|
* [Saasykit](https://saasykit.com/?ref=coolify.io) - SaaSykit is a Laravel-based boilerplate with everything you need to build an awesome SaaS.
|
||||||
|
* [Massivegrid](https://massivegrid.com/?ref=coolify.io) - A cloud-based platform for data storage and processing.
|
||||||
|
|
||||||
|
|
||||||
## Github Sponsors ($40+)
|
## Github Sponsors ($40+)
|
||||||
|
|||||||
@@ -99,6 +99,16 @@ class PublicGitRepository extends Component
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updatedDockerComposeLocation()
|
||||||
|
{
|
||||||
|
if ($this->docker_compose_location) {
|
||||||
|
$this->docker_compose_location = rtrim($this->docker_compose_location, '/');
|
||||||
|
if (! str($this->docker_compose_location)->startsWith('/')) {
|
||||||
|
$this->docker_compose_location = '/'.$this->docker_compose_location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function updatedBuildPack()
|
public function updatedBuildPack()
|
||||||
{
|
{
|
||||||
if ($this->build_pack === 'nixpacks') {
|
if ($this->build_pack === 'nixpacks') {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class EditCompose extends Component
|
|||||||
{
|
{
|
||||||
$this->dispatch('info', 'Saving new docker compose...');
|
$this->dispatch('info', 'Saving new docker compose...');
|
||||||
$this->dispatch('saveCompose', $this->service->docker_compose_raw);
|
$this->dispatch('saveCompose', $this->service->docker_compose_raw);
|
||||||
|
$this->dispatch('refreshStorages');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function instantSave()
|
public function instantSave()
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ class All extends Component
|
|||||||
|
|
||||||
protected $listeners = [
|
protected $listeners = [
|
||||||
'saveKey' => 'submit',
|
'saveKey' => 'submit',
|
||||||
|
'refreshEnvs',
|
||||||
'environmentVariableDeleted' => 'refreshEnvs',
|
'environmentVariableDeleted' => 'refreshEnvs',
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -61,7 +62,7 @@ class All extends Component
|
|||||||
$sortBy = data_get($this->resource, 'settings.is_env_sorting_enabled') ? 'key' : 'order';
|
$sortBy = data_get($this->resource, 'settings.is_env_sorting_enabled') ? 'key' : 'order';
|
||||||
|
|
||||||
$sortFunction = function ($variables) use ($sortBy) {
|
$sortFunction = function ($variables) use ($sortBy) {
|
||||||
if (!$variables) {
|
if (! $variables) {
|
||||||
return $variables;
|
return $variables;
|
||||||
}
|
}
|
||||||
if ($sortBy === 'key') {
|
if ($sortBy === 'key') {
|
||||||
|
|||||||
@@ -136,4 +136,4 @@ class Show extends Component
|
|||||||
return handleError($e);
|
return handleError($e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3092,10 +3092,9 @@ function newParser(Application|Service $resource, int $pull_request_id = 0, ?int
|
|||||||
$topLevel->get('volumes')->put($name, [
|
$topLevel->get('volumes')->put($name, [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LocalPersistentVolume::updateOrCreate(
|
LocalPersistentVolume::updateOrCreate(
|
||||||
[
|
[
|
||||||
'mount_path' => $target,
|
'name' => $name,
|
||||||
'resource_id' => $originalResource->id,
|
'resource_id' => $originalResource->id,
|
||||||
'resource_type' => get_class($originalResource),
|
'resource_type' => get_class($originalResource),
|
||||||
],
|
],
|
||||||
@@ -3332,7 +3331,10 @@ function newParser(Application|Service $resource, int $pull_request_id = 0, ?int
|
|||||||
foreach ($normalEnvironments as $key => $value) {
|
foreach ($normalEnvironments as $key => $value) {
|
||||||
$key = str($key);
|
$key = str($key);
|
||||||
$value = str($value);
|
$value = str($value);
|
||||||
if ($value->startsWith('$')) {
|
if ($value->startsWith('$') || $value->contains('${')) {
|
||||||
|
if ($value->contains('${')) {
|
||||||
|
$value = $value->after('${')->before('}');
|
||||||
|
}
|
||||||
$value = str(replaceVariables(str($value)));
|
$value = str(replaceVariables(str($value)));
|
||||||
if ($value->contains(':-')) {
|
if ($value->contains(':-')) {
|
||||||
$key = $value->before(':');
|
$key = $value->before(':');
|
||||||
@@ -3639,37 +3641,22 @@ function add_coolify_default_environment_variables(StandaloneRedis|StandalonePos
|
|||||||
$where_to_add->push("COOLIFY_PROJECT_NAME={$resource->project()->name}");
|
$where_to_add->push("COOLIFY_PROJECT_NAME={$resource->project()->name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ray($where_to_add);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertComposeEnvironmentToArray($environment)
|
function convertComposeEnvironmentToArray($environment)
|
||||||
{
|
{
|
||||||
$convertedServiceVariables = collect([]);
|
$convertedServiceVariables = collect([]);
|
||||||
foreach ($environment as $variableName => $variableValue) {
|
if (isAssociativeArray($environment)) {
|
||||||
if (is_array($variableValue)) {
|
$convertedServiceVariables = $environment;
|
||||||
$key = str(collect($variableValue)->keys()->first());
|
} else {
|
||||||
$value = str(collect($variableValue)->values()->first());
|
foreach ($environment as $value) {
|
||||||
} elseif (is_string($variableValue)) {
|
$parts = explode('=', $value, 2);
|
||||||
if (str($variableValue)->contains('=')) {
|
$key = $parts[0];
|
||||||
$key = str($variableValue)->before('=');
|
$realValue = $parts[1] ?? '';
|
||||||
$value = str($variableValue)->after('=');
|
if ($key) {
|
||||||
} else {
|
$convertedServiceVariables->put($key, $realValue);
|
||||||
if (is_numeric($variableName)) {
|
|
||||||
$key = str($variableValue);
|
|
||||||
$value = null;
|
|
||||||
} else {
|
|
||||||
$key = str($variableName);
|
|
||||||
if ($variableValue) {
|
|
||||||
$value = str($variableValue);
|
|
||||||
} else {
|
|
||||||
$value = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($key) {
|
|
||||||
$convertedServiceVariables->put($key->value(), $value?->value() ?? null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $convertedServiceVariables;
|
return $convertedServiceVariables;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ return [
|
|||||||
|
|
||||||
// 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.327',
|
'release' => '4.0.0-beta.329',
|
||||||
// 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.327';
|
return '4.0.0-beta.329';
|
||||||
|
|||||||
BIN
other/logos/saasykit.webp
Normal file
BIN
other/logos/saasykit.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
@@ -4,7 +4,7 @@
|
|||||||
<form class="flex flex-col gap-2" wire:submit='loadBranch'>
|
<form class="flex flex-col gap-2" wire:submit='loadBranch'>
|
||||||
<div class="flex flex-col gap-2">
|
<div class="flex flex-col gap-2">
|
||||||
<div class="flex flex-col gap-2">
|
<div class="flex flex-col gap-2">
|
||||||
<div class="flex items-end gap-2">
|
<div class="flex gap-2 items-end">
|
||||||
<x-forms.input required id="repository_url" label="Repository URL (https://)"
|
<x-forms.input required id="repository_url" label="Repository URL (https://)"
|
||||||
helper="{!! __('repository.url') !!}" />
|
helper="{!! __('repository.url') !!}" />
|
||||||
<x-forms.button type="submit">
|
<x-forms.button type="submit">
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
@if ($build_pack === 'dockercompose')
|
@if ($build_pack === 'dockercompose')
|
||||||
<x-forms.input placeholder="/" wire:model.blur="base_directory" label="Base Directory"
|
<x-forms.input placeholder="/" wire:model.blur="base_directory" label="Base Directory"
|
||||||
helper="Directory to use as root. Useful for monorepos." />
|
helper="Directory to use as root. Useful for monorepos." />
|
||||||
<x-forms.input placeholder="/docker-compose.yaml" id="docker_compose_location"
|
<x-forms.input placeholder="/docker-compose.yaml" wire:model.blur="docker_compose_location"
|
||||||
label="Docker Compose Location"
|
label="Docker Compose Location"
|
||||||
helper="It is calculated together with the Base Directory:<br><span class='dark:text-warning'>{{ Str::start($base_directory . $docker_compose_location, '/') }}</span>" />
|
helper="It is calculated together with the Base Directory:<br><span class='dark:text-warning'>{{ Str::start($base_directory . $docker_compose_location, '/') }}</span>" />
|
||||||
Compose file location in your repository:<span
|
Compose file location in your repository:<span
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"coolify": {
|
"coolify": {
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.327"
|
"version": "4.0.0-beta.329"
|
||||||
},
|
},
|
||||||
"nightly": {
|
"nightly": {
|
||||||
"version": "4.0.0-beta.328"
|
"version": "4.0.0-beta.330"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user