From 1c10a43321b3aea3dfff9c882d0372275250d53a Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 7 Oct 2024 11:19:14 +0200 Subject: [PATCH] fix: new resource selection view fix: new services --- app/Console/Commands/ServicesGenerate.php | 2 +- app/Livewire/Project/New/Select.php | 7 +- app/Models/Service.php | 175 ++++++++++++------ public/svgs/coolify.png | Bin 0 -> 4238 bytes public/svgs/tolgee.svg | 5 + .../views/components/resource-view.blade.php | 5 +- .../livewire/project/new/select.blade.php | 56 +++--- templates/compose/langfuse.yaml | 17 +- templates/compose/litellm.yaml | 45 ++--- templates/compose/prefect.yaml | 24 +-- templates/compose/qdrant.yaml | 8 +- templates/compose/searxng.yaml | 12 +- templates/service-templates.json | 2 +- 13 files changed, 200 insertions(+), 158 deletions(-) create mode 100644 public/svgs/coolify.png create mode 100644 public/svgs/tolgee.svg diff --git a/app/Console/Commands/ServicesGenerate.php b/app/Console/Commands/ServicesGenerate.php index de64afefa..da04cefce 100644 --- a/app/Console/Commands/ServicesGenerate.php +++ b/app/Console/Commands/ServicesGenerate.php @@ -78,7 +78,7 @@ class ServicesGenerate extends Command if ($logo->count() > 0) { $logo = str($logo[0])->after('# logo:')->trim()->value(); } else { - $logo = 'svgs/unknown.svg'; + $logo = 'svgs/coolify.png'; } $minversion = collect(preg_grep('/^# minversion:/', explode("\n", $content)))->values(); if ($minversion->count() > 0) { diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php index 4c5c3a691..b44844a95 100644 --- a/app/Livewire/Project/New/Select.php +++ b/app/Livewire/Project/New/Select.php @@ -94,10 +94,10 @@ class Select extends Component { $services = get_service_templates(true); $services = collect($services)->map(function ($service, $key) { - return array_merge($service, [ + return [ 'name' => str($key)->headline(), - 'logo' => asset($service['logo']), - ]); + 'logo' => asset(data_get($service, 'logo', 'svgs/unknown.svg')), + ] + (array) $service; })->all(); $gitBasedApplications = [ [ @@ -256,6 +256,7 @@ class Select extends Component public function setType(string $type) { + $type = str($type)->lower()->value(); if ($this->loading) { return; } diff --git a/app/Models/Service.php b/app/Models/Service.php index a5aafaaf9..686e95314 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -283,9 +283,63 @@ class Service extends BaseModel $fields = collect([]); $applications = $this->applications()->get(); foreach ($applications as $application) { - $image = str($application->image)->before(':')->value(); + $image = str($application->image)->before(':'); + if ($image->isEmpty()) { + continue; + } switch ($image) { - case str($image)?->contains('invoiceninja'): + case $image->contains('litellm'): + $data = collect([]); + $username = $this->environment_variables()->where('key', 'SERVICE_USER_UI')->first(); + $password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_UI')->first(); + if ($username) { + $data = $data->merge([ + 'Username' => [ + 'key' => data_get($username, 'key'), + 'value' => data_get($username, 'value'), + 'rules' => 'required', + ], + ]); + } + if ($password) { + $data = $data->merge([ + 'Password' => [ + 'key' => data_get($password, 'key'), + 'value' => data_get($password, 'value'), + 'rules' => 'required', + 'isPassword' => true, + ], + ]); + } + $fields->put('Litellm', $data->toArray()); + break; + case $image->contains('langfuse'): + $data = collect([]); + $email = $this->environment_variables()->where('key', 'LANGFUSE_INIT_USER_EMAIL')->first(); + if ($email) { + $data = $data->merge([ + 'Admin Email' => [ + 'key' => 'LANGFUSE_INIT_USER_EMAIL', + 'value' => data_get($email, 'value'), + 'rules' => 'required|email', + ], + ]); + } + $password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_LANGFUSE')->first(); + ray('password', $password); + if ($password) { + $data = $data->merge([ + 'Admin Password' => [ + 'key' => 'LANGFUSE_INIT_USER_PASSWORD', + 'value' => data_get($password, 'value'), + 'rules' => 'required', + 'isPassword' => true, + ], + ]); + } + $fields->put('Langfuse', $data->toArray()); + break; + case $image->contains('invoiceninja'): $data = collect([]); $email = $this->environment_variables()->where('key', 'IN_USER_EMAIL')->first(); $data = $data->merge([ @@ -306,7 +360,7 @@ class Service extends BaseModel ]); $fields->put('Invoice Ninja', $data->toArray()); break; - case str($image)?->contains('argilla'): + case $image->contains('argilla'): $data = collect([]); $api_key = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_APIKEY')->first(); $data = $data->merge([ @@ -344,7 +398,7 @@ class Service extends BaseModel ]); $fields->put('Argilla', $data->toArray()); break; - case str($image)?->contains('rabbitmq'): + case $image->contains('rabbitmq'): $data = collect([]); $host_port = $this->environment_variables()->where('key', 'PORT')->first(); $username = $this->environment_variables()->where('key', 'SERVICE_USER_RABBITMQ')->first(); @@ -379,7 +433,7 @@ class Service extends BaseModel } $fields->put('RabbitMQ', $data->toArray()); break; - case str($image)?->contains('tolgee'): + case $image->contains('tolgee'): $data = collect([]); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_TOLGEE')->first(); $data = $data->merge([ @@ -402,7 +456,7 @@ class Service extends BaseModel } $fields->put('Tolgee', $data->toArray()); break; - case str($image)?->contains('logto'): + case $image->contains('logto'): $data = collect([]); $logto_endpoint = $this->environment_variables()->where('key', 'LOGTO_ENDPOINT')->first(); $logto_admin_endpoint = $this->environment_variables()->where('key', 'LOGTO_ADMIN_ENDPOINT')->first(); @@ -426,7 +480,7 @@ class Service extends BaseModel } $fields->put('Logto', $data->toArray()); break; - case str($image)?->contains('unleash-server'): + case $image->contains('unleash-server'): $data = collect([]); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_UNLEASH')->first(); $data = $data->merge([ @@ -449,7 +503,7 @@ class Service extends BaseModel } $fields->put('Unleash', $data->toArray()); break; - case str($image)?->contains('grafana'): + case $image->contains('grafana'): $data = collect([]); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_GRAFANA')->first(); $data = $data->merge([ @@ -472,7 +526,7 @@ class Service extends BaseModel } $fields->put('Grafana', $data->toArray()); break; - case str($image)?->contains('directus'): + case $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(); @@ -498,7 +552,7 @@ class Service extends BaseModel } $fields->put('Directus', $data->toArray()); break; - case str($image)?->contains('kong'): + case $image->contains('kong'): $data = collect([]); $dashboard_user = $this->environment_variables()->where('key', 'SERVICE_USER_ADMIN')->first(); $dashboard_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_ADMIN')->first(); @@ -522,7 +576,7 @@ class Service extends BaseModel ]); } $fields->put('Supabase', $data->toArray()); - case str($image)?->contains('minio'): + case $image->contains('minio'): $data = collect([]); $console_url = $this->environment_variables()->where('key', 'MINIO_BROWSER_REDIRECT_URL')->first(); $s3_api_url = $this->environment_variables()->where('key', 'MINIO_SERVER_URL')->first(); @@ -575,7 +629,7 @@ class Service extends BaseModel $fields->put('MinIO', $data->toArray()); break; - case str($image)?->contains('weblate'): + case $image->contains('weblate'): $data = collect([]); $admin_email = $this->environment_variables()->where('key', 'WEBLATE_ADMIN_EMAIL')->first(); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_WEBLATE')->first(); @@ -601,7 +655,7 @@ class Service extends BaseModel } $fields->put('Weblate', $data->toArray()); break; - case str($image)?->contains('meilisearch'): + case $image->contains('meilisearch'): $data = collect([]); $SERVICE_PASSWORD_MEILISEARCH = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_MEILISEARCH')->first(); if ($SERVICE_PASSWORD_MEILISEARCH) { @@ -615,7 +669,7 @@ class Service extends BaseModel } $fields->put('Meilisearch', $data->toArray()); break; - case str($image)?->contains('ghost'): + case $image->contains('ghost'): $data = collect([]); $MAIL_OPTIONS_AUTH_PASS = $this->environment_variables()->where('key', 'MAIL_OPTIONS_AUTH_PASS')->first(); $MAIL_OPTIONS_AUTH_USER = $this->environment_variables()->where('key', 'MAIL_OPTIONS_AUTH_USER')->first(); @@ -675,45 +729,8 @@ class Service extends BaseModel $fields->put('Ghost', $data->toArray()); break; - default: - $data = collect([]); - $admin_user = $this->environment_variables()->where('key', 'SERVICE_USER_ADMIN')->first(); - // Chaskiq - $admin_email = $this->environment_variables()->where('key', 'ADMIN_EMAIL')->first(); - $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_ADMIN')->first(); - if ($admin_user) { - $data = $data->merge([ - 'User' => [ - 'key' => 'SERVICE_USER_ADMIN', - 'value' => data_get($admin_user, 'value', 'admin'), - 'readonly' => true, - 'rules' => 'required', - ], - ]); - } - if ($admin_password) { - $data = $data->merge([ - 'Password' => [ - 'key' => 'SERVICE_PASSWORD_ADMIN', - 'value' => data_get($admin_password, 'value'), - 'rules' => 'required', - 'isPassword' => true, - ], - ]); - } - if ($admin_email) { - $data = $data->merge([ - 'Email' => [ - 'key' => 'ADMIN_EMAIL', - 'value' => data_get($admin_email, 'value'), - 'rules' => 'required|email', - ], - ]); - } - $fields->put('Admin', $data->toArray()); - break; - case str($image)?->contains('vaultwarden'): + case $image->contains('vaultwarden'): $data = collect([]); $DATABASE_URL = $this->environment_variables()->where('key', 'DATABASE_URL')->first(); @@ -779,7 +796,7 @@ class Service extends BaseModel $fields->put('Vaultwarden', $data); break; - case str($image)->contains('gitlab/gitlab'): + case $image->contains('gitlab/gitlab'): $password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_GITLAB')->first(); $data = collect([]); if ($password) { @@ -803,7 +820,7 @@ class Service extends BaseModel $fields->put('GitLab', $data->toArray()); break; - case str($image)->contains('code-server'): + case $image->contains('code-server'): $data = collect([]); $password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_64_PASSWORDCODESERVER')->first(); if ($password) { @@ -829,7 +846,7 @@ class Service extends BaseModel } $fields->put('Code Server', $data->toArray()); break; - case str($image)->contains('elestio/strapi'): + case $image->contains('elestio/strapi'): $data = collect([]); $license = $this->environment_variables()->where('key', 'STRAPI_LICENSE')->first(); if ($license) { @@ -852,15 +869,55 @@ class Service extends BaseModel $fields->put('Strapi', $data->toArray()); break; + default: + $data = collect([]); + $admin_user = $this->environment_variables()->where('key', 'SERVICE_USER_ADMIN')->first(); + // Chaskiq + $admin_email = $this->environment_variables()->where('key', 'ADMIN_EMAIL')->first(); + $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_ADMIN')->first(); + if ($admin_user) { + $data = $data->merge([ + 'User' => [ + 'key' => 'SERVICE_USER_ADMIN', + 'value' => data_get($admin_user, 'value', 'admin'), + 'readonly' => true, + 'rules' => 'required', + ], + ]); + } + if ($admin_password) { + $data = $data->merge([ + 'Password' => [ + 'key' => 'SERVICE_PASSWORD_ADMIN', + 'value' => data_get($admin_password, 'value'), + 'rules' => 'required', + 'isPassword' => true, + ], + ]); + } + if ($admin_email) { + $data = $data->merge([ + 'Email' => [ + 'key' => 'ADMIN_EMAIL', + 'value' => data_get($admin_email, 'value'), + 'rules' => 'required|email', + ], + ]); + } + $fields->put('Admin', $data->toArray()); + break; } } $databases = $this->databases()->get(); foreach ($databases as $database) { - $image = str($database->image)->before(':')->value(); + $image = str($database->image)->before(':'); + if ($image->isEmpty()) { + continue; + } switch ($image) { - case str($image)->contains('postgres'): + case $image->contains('postgres'): $userVariables = ['SERVICE_USER_POSTGRES', 'SERVICE_USER_POSTGRESQL']; $passwordVariables = ['SERVICE_PASSWORD_POSTGRES', 'SERVICE_PASSWORD_POSTGRESQL']; $dbNameVariables = ['POSTGRESQL_DATABASE', 'POSTGRES_DB']; @@ -898,7 +955,7 @@ class Service extends BaseModel } $fields->put('PostgreSQL', $data->toArray()); break; - case str($image)->contains('mysql'): + case $image->contains('mysql'): $userVariables = ['SERVICE_USER_MYSQL', 'SERVICE_USER_WORDPRESS', 'MYSQL_USER']; $passwordVariables = ['SERVICE_PASSWORD_MYSQL', 'SERVICE_PASSWORD_WORDPRESS', 'MYSQL_PASSWORD']; $rootPasswordVariables = ['SERVICE_PASSWORD_MYSQLROOT', 'SERVICE_PASSWORD_ROOT']; @@ -948,7 +1005,7 @@ class Service extends BaseModel } $fields->put('MySQL', $data->toArray()); break; - case str($image)->contains('mariadb'): + case $image->contains('mariadb'): $userVariables = ['SERVICE_USER_MARIADB', 'SERVICE_USER_WORDPRESS', '_APP_DB_USER', 'SERVICE_USER_MYSQL', 'MYSQL_USER']; $passwordVariables = ['SERVICE_PASSWORD_MARIADB', 'SERVICE_PASSWORD_WORDPRESS', '_APP_DB_PASS', 'MYSQL_PASSWORD']; $rootPasswordVariables = ['SERVICE_PASSWORD_MARIADBROOT', 'SERVICE_PASSWORD_ROOT', '_APP_DB_ROOT_PASS', 'MYSQL_ROOT_PASSWORD']; diff --git a/public/svgs/coolify.png b/public/svgs/coolify.png new file mode 100644 index 0000000000000000000000000000000000000000..fa01fec05ec9e2927e46184daab9f031cbba7d08 GIT binary patch literal 4238 zcmeHKe^3*57GJJCK~!|6H>a&wQafjyE6FAyz-CF73!s(JV)baD;$b(*CZvXJ$S!6P zArz)E9wOIEIe$>GKgO{g(MsnKY=F?BZW$>Sy@6m&iUXnpfuQ0K2!Y#;HU&JL;`NW4 zIWzMnoA=)L{rG&o?`3w^>q)OJ2!0_L0DuLFYZ5jBK)?tqL30?*xsD(I%6!c=ta*z7 zfRNLy1eCuLvXoIu$yKRjJf4|}=}CYx!YVjHzS?M{ptYt=N?0ffe+P~d3Lvo{3WA~` zL8Le$QY03Kldvd4012an!m{Mb^#Jhf6>V}Vnflr~SczxyQ5CMh_*ABWNx-C_VCFFs zBT){OsnZiMCFA-$VCI=sgIpw-^WY;js?_ktgw+pRnO`z)21y!V5Hy)gd{YD;H)=qk zL?QtNB2XmaF&;c3M^B;@PfxteM4BEd0V9+~t%20ydJY>JRp8mAjLY?V-7iU{^rtao z8+E=UDkX^NFcugB6!L}Bs#GaqQcLQv8HLMrPX3H#&CoDNum%HaB(UTh1195c#0WgwsKlny{~%zz5kpB# zg@^>A2%Z4q38SRo43nQh=>x+micC}?s9FFCAhnVgrGikN7!!+l5_MDrFB*bSG%{Ku zR4XL@Soe=S6lt}B2^1-c6h%c!gkoW|BoY$%&-jcF9ZANsl^JYXh{*5xv+ig2N62AKXJ(H*}mD9m2*?CnQ+!^ANsV#T66VSb+r+_8PdJ- zUfdH5aP6`8v$Jju-uSv4T;U#)jb~l1Bl2zzxh@Sswi_M2%bGR}zZU`o6wXrgX)h17 zUO1}E^_I3+yIkeMir37Yd4}PEx|+L#PaJi&RXp{dJ##E(=SmRZ2<`lI%h`ioH`m>< zx0dd|(AVp@pu<|#Yb~bpvb;Oz?Wv~>pE)e%g)7`0|2SV-T7Ju78a7XidnW9;l4AGZ&kBDh3D3in`i+9T&ND zPlkC6FN%#mTJ5Y_;kGX*Y-`(eoPXB1SxT9WBl#sq-la`~in1OJ&QNo=R@rch*|*y~ z*p7x#X%4L)?w#c@PaUI)c<#V>Kl$O7gGo+ar8(4{o_C-==CWDX7x)F&4V?UX!7|`C z&(2cDPtLKOsz;XY?PRtzxbVk4meFFfVR=C;5kLEtR?u)pku_;s7yyhfi+;>5f83sb iYJ2p5;Qtyn_kP=B`{Wy0kDg-R^b=PlB^-}?yYSxv2<4yv literal 0 HcmV?d00001 diff --git a/public/svgs/tolgee.svg b/public/svgs/tolgee.svg new file mode 100644 index 000000000..0f216e0c6 --- /dev/null +++ b/public/svgs/tolgee.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/views/components/resource-view.blade.php b/resources/views/components/resource-view.blade.php index 741d8d476..d2c8947ee 100644 --- a/resources/views/components/resource-view.blade.php +++ b/resources/views/components/resource-view.blade.php @@ -4,7 +4,6 @@ 'hover:border-l-red-500 cursor-not-allowed' => $upgrade, ])>
- {{ $logo }}
@@ -19,4 +18,8 @@ @endif
+ @isset($documentation) +
+ {{ $documentation }} + @endisset
diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index 9c2d30b3a..6b535b64d 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -48,7 +48,6 @@ -

Databases