From 4a66fdf75399a31930c96206b995cf9b52472c2d Mon Sep 17 00:00:00 2001 From: "sur.la.route" <17788706+christopherpickering@users.noreply.github.com> Date: Fri, 9 May 2025 07:07:02 -0500 Subject: [PATCH 001/229] fix(docker-compose build) added --no-cache flag added `--no-cache` flag when build is force. --- app/Jobs/ApplicationDeploymentJob.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index bebec64cf..e237bca0e 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -507,7 +507,11 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue if ($this->env_filename) { $command .= " --env-file {$this->workdir}/{$this->env_filename}"; } - $command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} build --pull"; + if ($this->force_rebuild) { + $command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} build --pull --no-cache"; + else + $command .= " --project-name {$this->application->uuid} --project-directory {$this->workdir} -f {$this->workdir}{$this->docker_compose_location} build --pull"; + } $this->execute_remote_command( [executeInDocker($this->deployment_uuid, $command), 'hidden' => true], ); From 84b930a913e14a591b0b9f8b54384748885a136f Mon Sep 17 00:00:00 2001 From: Diptesh Choudhuri Date: Wed, 14 May 2025 18:06:53 +0530 Subject: [PATCH 002/229] feat(service): Add Ryot service (#5232) --- public/svgs/ryot.svg | 14 +++++++++++++ templates/compose/ryot.yaml | 41 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 public/svgs/ryot.svg create mode 100644 templates/compose/ryot.yaml diff --git a/public/svgs/ryot.svg b/public/svgs/ryot.svg new file mode 100644 index 000000000..410f22171 --- /dev/null +++ b/public/svgs/ryot.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/templates/compose/ryot.yaml b/templates/compose/ryot.yaml new file mode 100644 index 000000000..c6472b789 --- /dev/null +++ b/templates/compose/ryot.yaml @@ -0,0 +1,41 @@ +# documentation: https://github.com/ignisda/ryot +# slogan: Roll your own tracker! Ryot is a self-hosted platform for tracking various aspects of life such as media consumption, fitness activities, and more. +# tags: rss, reader, self-hosted, automation, tracker, media, fitness +# logo: svgs/ryot.svg +# port: 8000 + +services: + ryot: + image: ignisda/ryot:v8 + pull_policy: always + environment: + - SERVICE_FQDN_RYOT_8000 + - DATABASE_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/$POSTGRES_DB + - SERVER_ADMIN_ACCESS_TOKEN=$SERVICE_PASSWORD_64_RYOT + - TZ=${TZ:-Europe/Amsterdam} + depends_on: + postgresql: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"] + interval: 5s + timeout: 20s + retries: 10 + + postgresql: + image: postgres:16-alpine + volumes: + - postgresql-data:/var/lib/postgresql/data + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - POSTGRES_DB=${POSTGRES_DB:-ryot} + - TZ=${TZ:-Europe/Amsterdam} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + +volumes: + postgresql-data: From 4a2478af255208eebd4df296ce54892fd8ee11b8 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 14:40:52 +0200 Subject: [PATCH 003/229] chore(service): formatting and cleanup of ryot --- templates/compose/ryot.yaml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/templates/compose/ryot.yaml b/templates/compose/ryot.yaml index c6472b789..f56a45d70 100644 --- a/templates/compose/ryot.yaml +++ b/templates/compose/ryot.yaml @@ -7,11 +7,10 @@ services: ryot: image: ignisda/ryot:v8 - pull_policy: always environment: - SERVICE_FQDN_RYOT_8000 - - DATABASE_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/$POSTGRES_DB - - SERVER_ADMIN_ACCESS_TOKEN=$SERVICE_PASSWORD_64_RYOT + - DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgresql:5432/${POSTGRES_DB} + - SERVER_ADMIN_ACCESS_TOKEN=${SERVICE_PASSWORD_64_RYOT} - TZ=${TZ:-Europe/Amsterdam} depends_on: postgresql: @@ -25,17 +24,14 @@ services: postgresql: image: postgres:16-alpine volumes: - - postgresql-data:/var/lib/postgresql/data + - ryot_postgresql_data:/var/lib/postgresql/data environment: - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - POSTGRES_DB=${POSTGRES_DB:-ryot} + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-ryot-db} - TZ=${TZ:-Europe/Amsterdam} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 - -volumes: - postgresql-data: From 9939b10e5a6a6312626773d72dfcca65a13aee6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Gyarmati?= Date: Wed, 14 May 2025 21:43:39 +0900 Subject: [PATCH 004/229] feat(service): add Marimo service (#5559) --- CHANGELOG.md | 15 ++++- app/Console/Kernel.php | 2 +- other/nightly/versions.json | 4 +- public/svgs/marimo.svg | 112 +++++++++++++++++++++++++++++++++++ templates/compose/marimo.yml | 34 +++++++++++ versions.json | 4 +- 6 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 public/svgs/marimo.svg create mode 100644 templates/compose/marimo.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index b508df1f7..f8c4a7ad6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,20 @@ All notable changes to this project will be documented in this file. -## [unreleased] +## [4.0.0-beta.417] - 2025-05-07 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.416] - 2025-05-05 + +### 📚 Documentation + +- Update changelog +- Update changelog + +## [4.0.0-beta.415] - 2025-04-29 ### 📚 Documentation diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 1c5d3e70b..c03475647 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -51,7 +51,7 @@ class Kernel extends ConsoleKernel } // $this->scheduleInstance->job(new CleanupStaleMultiplexedConnections)->hourly(); - $this->scheduleInstance->command('cleanup:redis')->everyTenMinutes(); + $this->scheduleInstance->command('cleanup:redis')->hourly(); if (isDev()) { // Instance Jobs diff --git a/other/nightly/versions.json b/other/nightly/versions.json index 7cd46baab..106273897 100644 --- a/other/nightly/versions.json +++ b/other/nightly/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.417" + "version": "4.0.0-beta.418" }, "nightly": { - "version": "4.0.0-beta.418" + "version": "4.0.0-beta.419" }, "helper": { "version": "1.0.8" diff --git a/public/svgs/marimo.svg b/public/svgs/marimo.svg new file mode 100644 index 000000000..30a70b487 --- /dev/null +++ b/public/svgs/marimo.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/marimo.yml b/templates/compose/marimo.yml new file mode 100644 index 000000000..be95f0b2b --- /dev/null +++ b/templates/compose/marimo.yml @@ -0,0 +1,34 @@ +# documentation: https://marimo.io/ +# slogan: An open-source reactive notebook for Python — reproducible, git-friendly, SQL built-in, executable as a script, and shareable as an app. +# tags: notebook, python, data, analysis +# logo: svgs/marimo.svg +# port: 8080 + +services: + marimo: + image: ghcr.io/marimo-team/marimo:latest-sql + environment: + - SERVICE_FQDN_MARIMO_8080 + - TOKEN_PASSWORD=$SERVICE_PASSWORD_MARIMO + volumes: + - "marimo:/app" + command: + - "marimo" + - "edit" + - "--token-password" + - "${SERVICE_PASSWORD_MARIMO}" + - "--port" + - "8080" + - "--host" + - "0.0.0.0" + healthcheck: + test: + - CMD + - uvx + - --with + - httpx[cli] + - httpx + - http://localhost:8080/health + interval: 5s + timeout: 5s + retries: 3 diff --git a/versions.json b/versions.json index 7cd46baab..106273897 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.417" + "version": "4.0.0-beta.418" }, "nightly": { - "version": "4.0.0-beta.418" + "version": "4.0.0-beta.419" }, "helper": { "version": "1.0.8" From cf8cc18d069287252b13cee82538d39e505ac1f5 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 14:46:30 +0200 Subject: [PATCH 005/229] chore(docs): remove changelog and add it to gitignore --- .gitignore | 2 +- CHANGELOG.md | 7416 -------------------------------------------------- 2 files changed, 1 insertion(+), 7417 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/.gitignore b/.gitignore index 541c8e920..65b7faa1b 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,4 @@ scripts/load-test/* .env.dusk.local docker/coolify-realtime/node_modules .DS_Store -Changelog.md +CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index f8c4a7ad6..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,7416 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -## [4.0.0-beta.417] - 2025-05-07 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.416] - 2025-05-05 - -### 📚 Documentation - -- Update changelog -- Update changelog - -## [4.0.0-beta.415] - 2025-04-29 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.415] - 2025-04-29 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.413] - 2025-04-28 - -### 💼 Other - -- Adjust Workflows for v5 (#5689) - -### 📚 Documentation - -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(workflows)* Adjust workflow for announcement - -## [4.0.0-beta.412] - 2025-04-23 - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Update coolify version to 4.0.0-beta.412 and nightly version to 4.0.0-beta.413 in configuration files - -## [4.0.0-beta.411] - 2025-04-23 - -### 🚀 Features - -- *(deployment)* Add repository_project_id handling for private GitHub apps and clean up unused Caddy label logic -- *(api)* Enhance OpenAPI specifications with token variable and additional key attributes -- *(docker)* Add HTTP Basic Authentication support and enhance hostname parsing in Docker run conversion -- *(api)* Add HTTP Basic Authentication fields to OpenAPI specifications and enhance PrivateKey model descriptions - -### 🐛 Bug Fixes - -- *(backup-edit)* Conditionally enable S3 checkbox based on available validated S3 storage -- *(source)* Update no sources found message for clarity -- *(api)* Correct middleware for service update route to ensure proper permissions -- *(api)* Handle JSON response in service creation and update methods for improved error handling -- Add 201 json code to servers validate api response -- *(docker)* Ensure password hashing only occurs when HTTP Basic Authentication is enabled -- *(docker)* Enhance hostname and GPU option validation in Docker run to compose conversion - -### 🚜 Refactor - -- *(jobs)* Comment out unused Caddy label handling in ApplicationDeploymentJob and simplify proxy path logic in Server model -- *(database)* Simplify database type checks in ServiceDatabase and enhance image validation in Docker helper -- *(shared)* Remove unused ray debugging statement from newParser function -- *(applications)* Remove redundant error response in create_env method -- *(api)* Restructure routes to include versioning and maintain existing feedback endpoint -- *(api)* Remove token variable from OpenAPI specifications for clarity -- *(environment-variables)* Remove protected variable checks from delete methods for cleaner logic -- *(http-basic-auth)* Rename 'http_basic_auth_enable' to 'http_basic_auth_enabled' across application files for consistency -- *(docker)* Remove debug statement and enhance hostname handling in Docker run conversion -- *(server)* Simplify proxy path logic and remove unnecessary conditions - -### 📚 Documentation - -- Update changelog -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Update coolify version to 4.0.0-beta.411 and nightly version to 4.0.0-beta.412 in configuration files - -## [4.0.0-beta.410] - 2025-04-18 - -### 🚀 Features - -- Add HTTP Basic Authentication -- *(readme)* Add new sponsors Supadata AI and WZ-IT to the README -- *(core)* Enable magic env variables for compose based applications - -### 🐛 Bug Fixes - -- *(application)* Append base directory to git branch URLs for improved path handling -- *(templates)* Correct casing of "denokv" to "denoKV" in service templates JSON -- *(navbar)* Update error message link to use route for environment variables navigation -- Unsend template -- Replace ports with expose -- *(templates)* Update Unsend compose configuration for improved service integration - -### 🚜 Refactor - -- *(jobs)* Update WithoutOverlapping middleware to use expireAfter for better queue management - -### 📚 Documentation - -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Bump coolify version to 4.0.0-beta.410 and update nightly version to 4.0.0-beta.411 in configuration files -- *(templates)* Update plausible and clickhouse images to latest versions and remove mail service - -## [4.0.0-beta.409] - 2025-04-16 - -### 🐛 Bug Fixes - -- *(parser)* Transform associative array labels into key=value format for better compatibility -- *(redis)* Update username and password input handling to clarify database sync requirements -- *(source)* Update connected source display to handle cases with no source connected - -### 🚜 Refactor - -- *(source)* Conditionally display connected source and change source options based on private key presence - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Bump coolify version to 4.0.0-beta.409 in configuration files - -## [4.0.0-beta.408] - 2025-04-14 - -### 🚀 Features - -- *(OpenApi)* Enhance OpenAPI specifications by adding UUID parameters for application, project, and service updates; improve deployment listing with pagination parameters; update command signature for OpenApi generation -- *(subscription)* Enhance subscription management with loading states and Stripe status checks - -### 🐛 Bug Fixes - -- *(pre-commit)* Correct input redirection for /dev/tty and add OpenAPI generation command -- *(pricing-plans)* Adjust grid class for improved layout consistency in subscription pricing plans -- *(migrations)* Make stripe_comment field nullable in subscriptions table -- *(mongodb)* Also apply custom config when SSL is enabled -- *(templates)* Correct casing of denoKV references in service templates and YAML files -- *(deployment)* Handle missing destination in deployment process to prevent errors - -### 💼 Other - -- Add missing openapi items to PrivateKey - -### 🚜 Refactor - -- *(commands)* Reorganize OpenAPI and Services generation commands into a new namespace for better structure; remove old command files -- *(Dockerfile)* Remove service generation command from the build process to streamline Dockerfile and improve build efficiency -- *(navbar-delete-team)* Simplify modal confirmation layout and enhance button styling for better user experience -- *(Server)* Remove debug logging from isReachableChanged method to clean up code and improve performance - -### 📚 Documentation - -- Update changelog -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Update nightly version to 4.0.0-beta.410 -- *(pre-commit)* Remove OpenAPI generation command from pre-commit hook -- *(versions)* Update realtime version to 1.0.7 and bump dependencies in package.json - -## [4.0.0-beta.407] - 2025-04-09 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.406] - 2025-04-05 - -### 🚀 Features - -- *(Deploy)* Add info dispatch for proxy check initiation -- *(EnvironmentVariable)* Add handling for Redis credentials in the environment variable component -- *(EnvironmentVariable)* Implement protection for critical environment variables and enhance deletion logic -- *(Application)* Add networkAliases attribute for handling network aliases as JSON or comma-separated values -- *(GithubApp)* Update default events to include 'pull_request' and streamline event handling -- *(CleanupDocker)* Add support for realtime image management in Docker cleanup process -- *(Deployment)* Enhance queue_application_deployment to handle existing deployments and return appropriate status messages -- *(SourceManagement)* Add functionality to change Git source and display current source in the application settings - -### 🐛 Bug Fixes - -- *(CheckProxy)* Update port conflict check to ensure accurate grep matching -- *(CheckProxy)* Refine port conflict detection with improved grep patterns -- *(CheckProxy)* Enhance port conflict detection by adjusting ss command for better output -- *(api)* Add back validateDataApplications (#5539) -- *(CheckProxy, Status)* Prevent proxy checks when force_stop is active; remove debug statement in General -- *(Status)* Conditionally check proxy status and refresh button based on force_stop state -- *(General)* Change redis_password property to nullable string -- *(DeployController)* Update request handling to use input method and enhance OpenAPI description for deployment endpoint - -### 💼 Other - -- Add missing UUID to openapi spec - -### 🚜 Refactor - -- *(Server)* Use data_get for safer access to settings properties in isFunctional method -- *(Application)* Rename network_aliases to custom_network_aliases across the application for clarity and consistency -- *(ApplicationDeploymentJob)* Streamline environment variable handling by introducing generate_coolify_env_variables method and consolidating logic for pull request and main branch scenarios -- *(ApplicationDeploymentJob, ApplicationDeploymentQueue)* Improve deployment status handling and log entry management with transaction support -- *(SourceManagement)* Sort sources by name and improve UI for changing Git source with better error handling -- *(Email)* Streamline SMTP and resend settings handling in copyFromInstanceSettings method -- *(Email)* Enhance error handling in SMTP and resend methods by passing context to handleError function -- *(DynamicConfigurations)* Improve handling of dynamic configuration content by ensuring fallback to empty string when content is null -- *(ServicesGenerate)* Update command signature from 'services:generate' to 'generate:services' for consistency; update Dockerfile to run service generation during build; update Odoo image version to 18 and add extra addons volume in compose configuration -- *(Dockerfile)* Streamline RUN commands for improved readability and maintainability by adding line continuations -- *(Dockerfile)* Reintroduce service generation command in the build process for consistency and ensure proper asset compilation - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Bump version to 406 -- *(versions)* Bump version to 407 and 408 for coolify and nightly -- *(versions)* Bump version to 408 for coolify and 409 for nightly - -## [4.0.0-beta.405] - 2025-04-04 - -### 🚀 Features - -- *(api)* Update OpenAPI spec for services (#5448) -- *(proxy)* Enhance proxy handling and port conflict detection - -### 🐛 Bug Fixes - -- *(api)* Used ssh keys can be deleted -- *(email)* Transactional emails not sending - -### 🚜 Refactor - -- *(CheckProxy)* Replace 'which' with 'command -v' for command availability checks - -### 📚 Documentation - -- Update changelog -- Update changelog -- Update changelog -- Update changelog -- Update changelog -- Update changelog -- Update changelog -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Bump version to 406 -- *(versions)* Bump version to 407 - -## [4.0.0-beta.404] - 2025-04-03 - -### 🚀 Features - -- *(lang)* Added Azerbaijani language updated turkish language. (#5497) -- *(lang)* Added Portuguese from Brazil language (#5500) -- *(lang)* Add Indonesian language translations (#5513) - -### 🐛 Bug Fixes - -- *(docs)* Comment out execute for now -- *(installation)* Mount the docker config -- *(installation)* Path to config file for docker login -- *(service)* Add health check to Bugsink service (#5512) -- *(email)* Emails are not sent in multiple cases -- *(deployments)* Use graceful shutdown instead of `rm` -- *(docs)* Contribute service url (#5517) -- *(proxy)* Proxy restart does not work on domain -- *(ui)* Only show copy button on https -- *(database)* Custom config for MongoDB (#5471) - -### 📚 Documentation - -- Update changelog -- Update changelog -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(service)* Remove unused code in Bugsink service -- *(versions)* Update version to 404 -- *(versions)* Bump version to 403 (#5520) -- *(versions)* Bump version to 404 - -## [4.0.0-beta.402] - 2025-04-01 - -### 🚀 Features - -- *(deployments)* Add list application deployments api route -- *(deploy)* Add pull request ID parameter to deploy endpoint -- *(api)* Add pull request ID parameter to applications endpoint -- *(api)* Add endpoints for retrieving application logs and deployments -- *(lang)* Added Norwegian language (#5280) -- *(dep)* Bump all dependencies - -### 🐛 Bug Fixes - -- Only get apps for the current team -- *(DeployController)* Cast 'pr' query parameter to integer -- *(deploy)* Validate team ID before deployment -- *(wakapi)* Typo in env variables and add some useful variables to wakapi.yaml (#5424) -- *(ui)* Instance Backup settings - -### 🚜 Refactor - -- *(dev)* Remove OpenAPI generation functionality -- *(migration)* Enhance local file volumes migration with logging - -### ⚙️ Miscellaneous Tasks - -- *(service)* Update minecraft service ENVs -- *(service)* Add more vars to infisical.yaml (#5418) -- *(service)* Add google variables to plausible.yaml (#5429) -- *(service)* Update authentik.yaml versions (#5373) -- *(core)* Remove redocs -- *(versions)* Update coolify version numbers to 4.0.0-beta.403 and 4.0.0-beta.404 - -## [4.0.0-beta.401] - 2025-03-28 - -### 📚 Documentation - -- Update changelog -- Update changelog - -## [4.0.0-beta.400] - 2025-03-27 - -### 🚀 Features - -- *(database)* Disable MongoDB SSL by default in migration -- *(database)* Add CA certificate generation for database servers -- *(application)* Add SPA configuration and update Nginx generation logic - -### 🐛 Bug Fixes - -- *(file-storage)* Double save on compose volumes -- *(parser)* Add logging support for applications in services - -### 🚜 Refactor - -- *(proxy)* Improve port availability checks with multiple methods -- *(database)* Update MongoDB SSL configuration for improved security -- *(database)* Enhance SSL configuration handling for various databases -- *(notifications)* Update Telegram button URL for staging environment -- *(models)* Remove unnecessary cloud check in isEnabled method -- *(database)* Streamline event listeners in Redis General component -- *(database)* Remove redundant database status display in MongoDB view -- *(database)* Update import statements for Auth in database components -- *(database)* Require PEM key file for SSL certificate regeneration -- *(database)* Change MySQL daemon command to MariaDB daemon -- *(nightly)* Update version numbers and enhance upgrade script -- *(versions)* Update version numbers for coolify and nightly -- *(email)* Validate team membership for email recipients -- *(shared)* Simplify deployment status check logic -- *(shared)* Add logging for running deployment jobs -- *(shared)* Enhance job status check to include 'reserved' -- *(email)* Improve error handling by passing context to handleError -- *(email)* Streamline email sending logic and improve configuration handling -- *(email)* Remove unnecessary whitespace in email sending logic -- *(email)* Allow custom email recipients in email sending logic -- *(email)* Enhance sender information formatting in email logic -- *(proxy)* Remove redundant stop call in restart method -- *(file-storage)* Add loadStorageOnServer method for improved error handling -- *(docker)* Parse and sanitize YAML compose file before encoding -- *(file-storage)* Improve layout and structure of input fields -- *(email)* Update label for test email recipient input -- *(database-backup)* Remove existing Docker container before backup upload -- *(database)* Improve decryption and deduplication of local file volumes -- *(database)* Remove debug output from volume update process - -### 📚 Documentation - -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Update version numbers for coolify and nightly - -### ◀️ Revert - -- Encrypting mount and fs_path - -## [4.0.0-beta.399] - 2025-03-25 - -### 🚀 Features - -- *(service)* Neon -- *(migration)* Add `ssl_certificates` table and model -- *(migration)* Add ssl setting to `standalone_postgresqls` table -- *(ui)* Add ssl settings to Postgres ui -- *(db)* Add ssl mode to Postgres URLs -- *(db)* Setup ssl during Postgres start -- *(migration)* Encrypt local file volumes content and paths -- *(ssl)* Ssl generation helper -- *(ssl)* Migrate to `ECC`certificates using `secp521r1` -- *(ssl)* Improve SSL helper -- *(ssl)* Add a Coolify CA Certificate to all servers -- *(seeder)* Call CA SSL seeder in prod and dev -- *(ssl)* Add Coolify CA Certificate when adding a new server -- *(installer)* Create CA folder during installation -- *(ssl)* Improve SSL helper -- *(ssl)* Use new improved helper for SSL generation -- *(ui)* Add CA cert UI -- *(ui)* New copy button component -- *(ui)* Use new copy button component everywhere -- *(ui)* Improve server advanced view -- *(migration)* Add CN and alternative names to DB -- *(databases)* Add CA SSL crt location to Postgres URLs -- *(ssl)* Improve ssl generation -- *(ssl)* Regenerate SSL certs job -- *(ssl)* Regenerate certificate and valid until UI -- *(ssl)* Regenerate CA cert and all other certs logic -- *(ssl)* Add full MySQL SSL Support -- *(ssl)* Add full MariaDB SSL support -- *(ssl)* Add `openssl.conf` to configure SSL extension properly -- *(ssl)* Improve SSL generation and security a lot -- *(ssl)* Check for SSL renewal twice daily -- *(ssl)* Add SSL relationships to all DBs -- Add full SSL support to MongoDB -- *(ssl)* Fix some issues and improve ssl generation helper -- *(ssl)* Ability to create `.pem` certs and add `clientAuth` to `extendedKeyUsage` -- *(ssl)* New modes for MongoDB and get `caCert` and `mountPath` correctly -- *(ssl)* Full SSL support for Redis -- New mode implementation for MongoDB -- *(ssl)* Improve Redis and remove modes -- Full SSL support for DrangonflyDB -- SSL notification -- *(github-source)* Enhance GitHub App configuration with manual and private key support -- *(ui)* Improve GitHub repository selection and styling -- *(database)* Implement two-step confirmation for database deletion -- *(assets)* Add new SVG logo for Coolify -- *(install)* Enhance Docker address pool configuration and validation -- *(install)* Improve Docker address pool management and service restart logic -- *(install)* Add missing env variable to install script -- *(LocalFileVolume)* Add binary file detection and update UI logic -- *(templates)* Change glance for v0.7 -- *(templates)* Add Freescout service template -- *(service)* Add Evolution API template -- *(service)* Add evolution-api and neon-ws-proxy templates -- *(svg)* Add coolify and evolution-api SVG logos -- *(api)* Add api to create custom services -- *(api)* Separate create and one-click routes -- *(api)* Update Services api routes and handlers -- *(api)* Unify service creation endpoint and enhance validation -- *(notifications)* Add discord ping functionality and settings -- *(user)* Implement session deletion on password reset -- *(github)* Enhance repository loading and validation in applications - -### 🐛 Bug Fixes - -- *(api)* Docker compose based apps creationg through api -- *(database)* Improve database type detection for Supabase Postgres images -- *(ssl)* Permission of ssl crt and key inside the container -- *(ui)* Make sure file mounts do not showing the encrypted values -- *(ssl)* Make default ssl mode require not verify-full as it does not need a ca cert -- *(ui)* Select component should not always uses title case -- *(db)* SSL certificates table and model -- *(migration)* Ssl certificates table -- *(databases)* Fix database name users new `uuid` instead of DB one -- *(database)* Fix volume and file mounts and naming -- *(migration)* Store subjectAlternativeNames as a json array in the db -- *(ssl)* Make sure the subjectAlternativeNames are unique and stored correctly -- *(ui)* Certificate expiration data is null before starting the DB -- *(deletion)* Fix DB deletion -- *(ssl)* Improve SSL cert file mounts -- *(ssl)* Always create ca crt on disk even if it is already there -- *(ssl)* Use mountPath parameter not a hardcoded path -- *(ssl)* Use 1 instead of on for mysql -- *(ssl)* Do not remove SSL directory -- *(ssl)* Wrong ssl cert is loaded to the server and UI error when regenerating SSL -- *(ssl)* Make sure when regenerating the CA cert it is not overwritten with a server cert -- *(ssl)* Regenerating certs for a specific DB -- *(ssl)* Fix MariaDB and MySQL need CA cert -- *(ssl)* Add mount path to DB to fix regeneration of certs -- *(ssl)* Fix SSL regeneration to sign with CA cert and use mount path -- *(ssl)* Get caCert correctly -- *(ssl)* Remove caCert even if it is a folder by accident -- *(ssl)* Ger caCert and `mountPath` correctly -- *(ui)* Only show Regenerate SSL Certificates button when there is a cert -- *(ssl)* Server id -- *(ssl)* When regenerating SSL certs the cert is not singed with the new CN -- *(ssl)* Adjust ca paths for MySQL -- *(ssl)* Remove mode selection for MariaDB as it is not supported -- *(ssl)* Permission issue with MariDB cert and key and paths -- *(ssl)* Rename Redis mode to verify-ca as it is not verify-full -- *(ui)* Remove unused mode for MongoDB -- *(ssl)* KeyDB port and caCert args are missing -- *(ui)* Enable SSL is not working correctly for KeyDB -- *(ssl)* Add `--tls` arg to DrangflyDB -- *(notification)* Always send SSL notifications -- *(database)* Change default value of enable_ssl to false for multiple tables -- *(ui)* Correct grammatical error in 404 page -- *(seeder)* Update GitHub app name in GithubAppSeeder -- *(plane)* Update APP_RELEASE to v0.25.2 in environment configuration -- *(domain)* Dispatch refreshStatus event after successful domain update -- *(database)* Correct container name generation for service databases -- *(database)* Limit container name length for database proxy -- *(database)* Handle unsupported database types in StartDatabaseProxy -- *(database)* Simplify container name generation in StartDatabaseProxy -- *(install)* Handle potential errors in Docker address pool configuration -- *(backups)* Retention settings -- *(redis)* Set default redis_username for new instances -- *(core)* Improve instantSave logic and error handling -- *(general)* Correct link to framework specific documentation -- *(core)* Redirect healthcheck route for dockercompose applications -- *(api)* Use name from request payload -- *(issue#4746)* Do not use setGitImportSettings inside of generateGitLsRemoteCommands -- Correct some spellings -- *(service)* Replace deprecated credentials env variables on keycloak service -- *(keycloak)* Update keycloak image version to 26.1 -- *(console)* Handle missing root user in password reset command -- *(ssl)* Handle missing CA certificate in SSL regeneration job -- *(copy-button)* Ensure text is safely passed to clipboard - -### 💼 Other - -- Bump Coolify to 4.0.0-beta.400 -- *(migration)* Add SSL fields to database tables -- SSL Support for KeyDB - -### 🚜 Refactor - -- *(ui)* Unhide log toggle in application settings -- *(nginx)* Streamline default Nginx configuration and improve error handling -- *(install)* Clean up install script and enhance Docker installation logic -- *(ScheduledTask)* Clean up code formatting and remove unused import -- *(app)* Remove unused MagicBar component and related code -- *(database)* Streamline SSL configuration handling across database types -- *(application)* Streamline healthcheck parsing from Dockerfile -- *(notifications)* Standardize getRecipients method signatures -- *(configuration)* Centralize configuration management in ConfigurationRepository -- *(docker)* Update image references to use centralized registry URL -- *(env)* Add centralized registry URL to environment configuration -- *(storage)* Simplify file storage iteration in Blade template -- *(models)* Add is_directory attribute to LocalFileVolume model -- *(modal)* Add ignoreWire attribute to modal-confirmation component -- *(invite-link)* Adjust layout for better responsiveness in form -- *(invite-link)* Enhance form layout for improved responsiveness -- *(network)* Enhance docker network creation with ipv6 fallback -- *(network)* Check for existing coolify network before creation -- *(database)* Enhance encryption process for local file volumes - -### 📚 Documentation - -- Update changelog -- Update changelog -- *(CONTRIBUTING)* Add note about Laravel Horizon accessibility -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(migration)* Remove unused columns -- *(ssl)* Improve code in ssl helper -- *(migration)* Ssl cert and key should not be nullable -- *(ssl)* Rename CA cert to `coolify-ca.crt` because of conflicts -- Rename ca crt folder to ssl -- *(ui)* Improve valid until handling -- Improve code quality suggested by code rabbit -- *(supabase)* Update Supabase service template and Postgres image version -- *(versions)* Update version numbers for coolify and nightly - -## [4.0.0-beta.398] - 2025-03-01 - -### 🚀 Features - -- *(billing)* Add Stripe past due subscription status tracking -- *(ui)* Add past due subscription warning banner - -### 🐛 Bug Fixes - -- *(billing)* Restrict Stripe subscription status update to 'active' only - -### 💼 Other - -- Bump Coolify to 4.0.0-beta.398 - -### 🚜 Refactor - -- *(billing)* Enhance Stripe subscription status handling and notifications - -## [4.0.0-beta.397] - 2025-02-28 - -### 🐛 Bug Fixes - -- *(billing)* Handle 'past_due' subscription status in Stripe processing -- *(revert)* Label parsing -- *(helpers)* Initialize command variable in parseCommandFromMagicEnvVariable - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.396] - 2025-02-28 - -### 🚀 Features - -- *(ui)* Add wire:key to two-step confirmation settings -- *(database)* Add index to scheduled task executions for improved query performance -- *(database)* Add index to scheduled database backup executions - -### 🐛 Bug Fixes - -- *(core)* Production dockerfile -- *(ui)* Update storage configuration guidance link -- *(ui)* Set default SMTP encryption to starttls -- *(notifications)* Correct environment URL path in application notifications -- *(config)* Update default PostgreSQL host to coolify-db instead of postgres -- *(docker)* Improve Docker compose file validation process -- *(ui)* Restrict service retrieval to current team -- *(core)* Only validate custom compose files -- *(mail)* Set default mailer to array when not specified -- *(ui)* Correct redirect routes after task deletion -- *(core)* Adding a new server should not try to make the default docker network -- *(core)* Clean up unnecessary files during application image build -- *(core)* Improve label generation and merging for applications and services - -### 💼 Other - -- Bump all dependencies (#5216) - -### 🚜 Refactor - -- *(ui)* Simplify file storage modal confirmations -- *(notifications)* Improve transactional email settings handling -- *(scheduled-tasks)* Improve scheduled task creation and management - -### 📚 Documentation - -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- Bump helper and realtime version - -## [4.0.0-beta.395] - 2025-02-22 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.394] - 2025-02-17 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.393] - 2025-02-15 - -### 📚 Documentation - -- Update changelog - -## [4.0.0-beta.392] - 2025-02-13 - -### 🚀 Features - -- *(ui)* Add top padding to pricing plans view -- *(core)* Add error logging and cron parsing to docker/server schedules -- *(core)* Prevent using servers with existing resources as build servers -- *(ui)* Add textarea switching option in service compose editor - -### 🐛 Bug Fixes - -- Pull latest image from registry when using build server -- *(deployment)* Improve server selection for deployment cancellation -- *(deployment)* Improve log line rendering and formatting -- *(s3-storage)* Optimize team admin notification query -- *(core)* Improve connection testing with dynamic disk configuration for s3 backups -- *(core)* Update service status refresh event handling -- *(ui)* Adjust polling intervals for database and service status checks -- *(service)* Update Fider service template healthcheck command -- *(core)* Improve server selection error handling in Docker component -- *(core)* Add server functionality check before dispatching container status -- *(ui)* Disable sticky scroll in Monaco editor -- *(ui)* Add literal and multiline env support to services. -- *(services)* Owncloud docs link -- *(template)* Remove db-migration step from `infisical.yaml` (#5209) -- *(service)* Penpot (#5047) - -### 🚜 Refactor - -- Use pull flag on docker compose up - -### 📚 Documentation - -- Update changelog -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- Rollback Coolify version to 4.0.0-beta.392 -- Bump Coolify version to 4.0.0-beta.393 -- Bump Coolify version to 4.0.0-beta.394 -- Bump Coolify version to 4.0.0-beta.395 -- Bump Coolify version to 4.0.0-beta.396 -- *(services)* Update zipline to use new Database env var. (#5210) -- *(service)* Upgrade authentik service -- *(service)* Remove unused env from zipline - -## [4.0.0-beta.391] - 2025-02-04 - -### 🚀 Features - -- Add application api route -- Container logs -- Remove ansi color from log -- Add lines query parameter -- *(changelog)* Add git cliff for automatic changelog generation -- *(workflows)* Improve changelog generation and workflows -- *(ui)* Add periodic status checking for services -- *(deployment)* Ensure private key is stored in filesystem before deployment -- *(slack)* Show message title in notification previews (#5063) -- *(i18n)* Add Arabic translations (#4991) -- *(i18n)* Add French translations (#4992) -- *(services)* Update `service-templates.json` - -### 🐛 Bug Fixes - -- *(core)* Improve deployment failure Slack notification formatting -- *(core)* Update Slack notification formatting to use bold correctly -- *(core)* Enhance Slack deployment success notification formatting -- *(ui)* Simplify service templates loading logic -- *(ui)* Align title and add button vertically in various views -- Handle pullrequest:updated for reliable preview deployments -- *(ui)* Fix typo on team page (#5105) -- Cal.com documentation link give 404 (#5070) -- *(slack)* Notification settings URL in `HighDiskUsage` message (#5071) -- *(ui)* Correct typo in Storage delete dialog (#5061) -- *(lang)* Add missing italian translations (#5057) -- *(service)* Improve duplicati.yaml (#4971) -- *(service)* Links in homepage service (#5002) -- *(service)* Added SMTP credentials to getoutline yaml template file (#5011) -- *(service)* Added `KEY` Variable to Beszel Template (#5021) -- *(cloudflare-tunnels)* Dead links to docs (#5104) -- System-wide GitHub apps (#5114) - -### 🚜 Refactor - -- Simplify service start and restart workflows - -### 📚 Documentation - -- *(services)* Reword nitropage url and slogan -- *(readme)* Add Convex to special sponsors section -- Update changelog - -### ⚙️ Miscellaneous Tasks - -- *(config)* Increase default PHP memory limit to 256M -- Add openapi response -- *(workflows)* Make naming more clear and remove unused code -- Bump Coolify version to 4.0.0-beta.392/393 -- *(ci)* Update changelog generation workflow to target 'next' branch -- *(ci)* Update changelog generation workflow to target main branch - -## [4.0.0-beta.390] - 2025-01-28 - -### 🚀 Features - -- *(template)* Add Open Web UI -- *(templates)* Add Open Web UI service template -- *(ui)* Update GitHub source creation advanced section label -- *(core)* Add dynamic label reset for application settings -- *(ui)* Conditionally enable advanced application settings based on label readonly status -- *(env)* Added COOLIFY_RESOURCE_UUID environment variable -- *(vite)* Add Cloudflare async script and style tag attributes -- *(meta)* Add comprehensive SEO and social media meta tags -- *(core)* Add name to default proxy configuration - -### 🐛 Bug Fixes - -- *(ui)* Update database control UI to check server functionality before displaying actions -- *(ui)* Typo in upgrade message -- *(ui)* Cloudflare tunnel configuration should be an info, not a warning -- *(s3)* DigitalOcean storage buckets do not work -- *(ui)* Correct typo in container label helper text -- Disable certain parts if readonly label is turned off -- Cleanup old scheduled_task_executions -- Validate cron expression in Scheduled Task update -- *(core)* Check cron expression on save -- *(database)* Detect more postgres database image types -- *(templates)* Update service templates -- Remove quotes in COOLIFY_CONTAINER_NAME -- *(templates)* Update Trigger.dev service templates with v3 configuration -- *(database)* Adjust MongoDB restore command and import view styling -- *(core)* Improve public repository URL parsing for branch and base directory -- *(core)* Increase HTTP/2 max concurrent streams to 250 (default) -- *(ui)* Update docker compose file helper text to clarify repository modification -- *(ui)* Skip SERVICE_FQDN and SERVICE_URL variables during update -- *(core)* Stopping database is not disabling db proxy -- *(core)* Remove --remove-orphans flag from proxy startup command to prevent other proxy deletions (db) -- *(api)* Domain check when updating domain -- *(ui)* Always redirect to dashboard after team switch -- *(backup)* Escape special characters in database backup commands - -### 💼 Other - -- Trigger.dev templates - wrong key length issue -- Trigger.dev template - missing ports and wrong env usage -- Trigger.dev template - fixed otel config -- Trigger.dev template - fixed otel config -- Trigger.dev template - fixed port config - -### 🚜 Refactor - -- *(s3)* Improve S3 bucket endpoint formatting -- *(vite)* Improve environment variable handling in Vite configuration -- *(ui)* Simplify GitHub App registration UI and layout - -### ⚙️ Miscellaneous Tasks - -- *(version)* Bump Coolify version to 4.0.0-beta.391 - -### ◀️ Revert - -- Remove Cloudflare async tag attributes - -## [4.0.0-beta.389] - 2025-01-23 - -### 🚀 Features - -- *(docs)* Update tech stack -- *(terminal)* Show terminal unavailable if the container does not have a shell on the global terminal UI -- *(ui)* Improve deployment UI - -### 🐛 Bug Fixes - -- *(service)* Infinite loading and lag with invoiceninja service (#4876) -- *(service)* Invoiceninja service -- *(workflows)* `Waiting for changes` label should also be considered and improved messages -- *(workflows)* Remove tags only if the PR has been merged into the main branch -- *(terminal)* Terminal shows that it is not available, even though it is -- *(labels)* Docker labels do not generated correctly -- *(helper)* Downgrade Nixpacks to v1.29.0 -- *(labels)* Generate labels when they are empty not when they are already generated -- *(storage)* Hetzner storage buckets not working - -### 📚 Documentation - -- Add TECH_STACK.md (#4883) - -### ⚙️ Miscellaneous Tasks - -- *(versions)* Update coolify versions to v4.0.0-beta.389 -- *(core)* EnvironmentVariable Model now extends BaseModel to remove duplicated code -- *(versions)* Update coolify versions to v4.0.0-beta.3909 - -## [4.0.0-beta.388] - 2025-01-22 - -### 🚀 Features - -- *(core)* Add SOURCE_COMMIT variable to build environment in ApplicationDeploymentJob -- *(service)* Update affine.yaml with AI environment variables (#4918) -- *(service)* Add new service Flipt (#4875) - -### 🐛 Bug Fixes - -- *(core)* Update environment variable generation logic in ApplicationDeploymentJob to handle different build packs -- *(env)* Shared variables can not be updated -- *(ui)* Metrics stuck in loading state -- *(ui)* Use `wire:navigate` to navigate to the server settings page -- *(service)* Plunk API & health check endpoint (#4925) - -## [4.0.0-beta.386] - 2025-01-22 - -### 🐛 Bug Fixes - -- *(redis)* Update environment variable keys from standalone_redis_id to resourceable_id -- *(routes)* Local API docs not available on domain or IP -- *(routes)* Local API docs not available on domain or IP -- *(core)* Update application_id references to resourable_id and resourable_type for Nixpacks configuration -- *(core)* Correct spelling of 'resourable' to 'resourceable' in Nixpacks configuration for ApplicationDeploymentJob -- *(ui)* Traefik dashboard url not working -- *(ui)* Proxy status badge flashing during navigation - -### 🚜 Refactor - -- *(workflows)* Replace jq with PHP script for version retrieval in workflows - -### ⚙️ Miscellaneous Tasks - -- *(dep)* Bump helper version to 1.0.5 -- *(docker)* Add blank line for readability in Dockerfile -- *(versions)* Update coolify versions to v4.0.0-beta.388 -- *(versions)* Update coolify versions to v4.0.0-beta.389 and add helper version retrieval script - -## [4.0.0-beta.385] - 2025-01-21 - -### 🚀 Features - -- *(core)* Wip version of coolify.json - -### 🐛 Bug Fixes - -- *(email)* Transactional email sending -- *(ui)* Add missing save button for new Docker Cleanup page -- *(ui)* Show preview deployment environment variables -- *(ui)* Show error on terminal if container has no shell (bash/sh) -- *(parser)* Resource URL should only be parsed if there is one -- *(core)* Compose parsing for apps - -### ⚙️ Miscellaneous Tasks - -- *(dep)* Bump nixpacks version -- *(dep)* Version++ - -## [4.0.0-beta.384] - 2025-01-21 - -### 🐛 Bug Fixes - -- *(ui)* Backups link should not redirected to general -- Envs with special chars during build -- *(db)* `finished_at` timestamps are not set for existing deployments -- Load service templates on cloud - -## [4.0.0-beta.383] - 2025-01-20 - -### 🐛 Bug Fixes - -- *(service)* Add healthcheck to Cloudflared service (#4859) -- Remove wire:navigate from import backups - -## [4.0.0-beta.382] - 2025-01-17 - -### 🚀 Features - -- Add log file check message in upgrade script for better troubleshooting -- Add root user details to install script - -### 🐛 Bug Fixes - -- Create the private key before the server in the prod seeder -- Update ProductionSeeder to check for private key instead of server's private key -- *(ui)* Missing underline for docs link in the Swarm section (#4860) -- *(service)* Change chatwoot service postgres image from `postgres:12` to `pgvector/pgvector:pg12` -- Docker image parser -- Add public key attribute to privatekey model -- Correct service update logic in Docker Compose parser -- Update CDN URL in install script to point to nightly version - -### 🚜 Refactor - -- Comment out RootUserSeeder call in ProductionSeeder for clarity -- Streamline ProductionSeeder by removing debug logs and unnecessary checks, while ensuring essential seeding operations remain intact -- Remove debug echo statements from Init command to clean up output and improve readability - -## [4.0.0-beta.381] - 2025-01-17 - -### 🚀 Features - -- Able to import full db backups for pg/mysql/mariadb -- Restore backup from server file -- Docker volume data cloning -- Move volume data cloning to a Job -- Volume cloning for ResourceOperations -- Remote server volume cloning -- Add horizon server details to queue -- Enhance horizon:manage command with worker restart check -- Add is_coolify_host to the server api responses -- DB migration for Backup retention -- UI for backup retention settings -- New global s3 and local backup deletion function -- Use new backup deletion functions -- Add calibre-web service -- Add actual-budget service -- Add rallly service -- Template for Gotenberg, a Docker-powered stateless API for PDF files -- Enhance import command options with additional guidance and improved checkbox label -- Purify for better sanitization -- Move docker cleanup to its own tab -- DB and Model for docker cleanup executions -- DockerCleanupExecutions relationship -- DockerCleanupDone event -- Get command and output for logs from CleanupDocker -- New sidebar menu and order -- Docker cleanup executions UI -- Add execution log to dockerCleanupJob -- Improve deployment UI -- Root user envs and seeding -- Email, username and password validation when they are set via envs -- Improved error handling and log output -- Add root user configuration variables to production environment - -### 🐛 Bug Fixes - -- Compose envs -- Scheduled tasks and backups are executed by server timezone. -- Show backup timezone on the UI -- Disappearing UI after livewire event received -- Add default vector db for anythingllm -- We need XSRF-TOKEN for terminal -- Prevent default link behavior for resource and settings actions in dashboard -- Increase default php memory limit -- Show if only build servers are added to your team -- Update Livewire button click method to use camelCase -- Local dropzonejs -- Import backups due to js stuff should not be navigated -- Install inetutils on Arch Linux -- Use ip in place of hostname from inetutils in arch -- Update import command to append file redirection for database restoration -- Ui bug on pw confirmation -- Exclude system and computed fields from model replication -- Service cloning on a separate server -- Application cloning -- `Undefined variable $fs_path` for databases -- Service and database cloning and label generation -- Labels and URL generation when cloning -- Clone naming for different database data volumes -- Implement all the cloneMe changes for ResourceOperations as well -- Volume and fileStorages cloning -- View text and helpers -- Teable -- Trigger with external db -- Set `EXPERIMENTAL_FEATURES` to false for labelstudio -- Monaco editor disabled state -- Edge case where executions could be null -- Create destination properly -- Getcontainer status should timeout after 30s -- Enable response for temporary unavailability in sentinel push endpoint -- Use timeout in cleanup resources -- Add timeout to sentinel process checks for improved reliability -- Horizon job checker -- Update response message for sentinel push route -- Add own servers on cloud -- Application deployment -- Service update statsu -- If $SERVICE found in the service specific configuration, then search for it in the db -- Instance wide GitHub apps are not available on other teams then the source team -- Function calls -- UI -- Deletion of single backup -- Backup job deletion - delete all backups from s3 and local -- Use new removeOldBackups function -- Retention functions and folder deletion for local backups -- Storage retention setting -- Db without s3 should still backup -- Wording -- `Undefined variable $service` when creating a new service -- Nodebb service -- Calibre-web service -- Rallly and actualbudget service -- Removed container_name -- Added healthcheck for gotenberg template -- Gotenberg -- *(template)* Gotenberg healthcheck, use /health instead of /version -- Use wire:navigate on sidebar -- Use wire:navigate on dashboard -- Use wire:navigate on projects page -- More wire:navigate -- Even more wire:navigate -- Service navigation -- Logs icons everywhere + terminal -- Redis DB should use the new resourceable columns -- Joomla service -- Add back letters to prod password requirement -- Check System and GitHub time and throw and error if it is over 50s out of sync -- Error message and server time getting -- Error rendering -- Render html correctly now -- Indent -- Potential fix for permissions update -- Expiration time claim ('exp') must be a numeric value -- Sanitize html error messages -- Production password rule and cleanup code -- Use json as it is just better than string for huge amount of logs -- Use `wire:navigate` on server sidebar -- Use finished_at for the end time instead of created_at -- Cancelled deployments should not show end and duration time -- Redirect to server index instead of show on error in Advanced and DockerCleanup components -- Disable registration after creating the root user -- RootUserSeeder -- Regex username validation -- Add spacing around echo outputs -- Success message -- Silent return if envs are empty or not set. - -### 💼 Other - -- Arrrrr -- Dep -- Docker dep - -### 🚜 Refactor - -- Rename parameter in DatabaseBackupJob for clarity -- Improve checkbox component accessibility and styling -- Remove unused tags method from ApplicationDeploymentJob -- Improve deployment status check in isAnyDeploymentInprogress function -- Extend HorizonServiceProvider from HorizonApplicationServiceProvider -- Streamline job status retrieval and clean up repository interface -- Enhance ApplicationDeploymentJob and HorizonServiceProvider for improved job handling -- Remove commented-out unsubscribe route from API -- Update redirect calls to use a consistent navigation method in deployment functions -- AppServiceProvider -- Github.php -- Improve data formatting and UI - -### ⚙️ Miscellaneous Tasks - -- Improve Penpot healthchecks -- Switch up readonly lables to make more sense -- Remove unused computed fields -- Use the new job dispatch -- Disable volume data cloning for now -- Improve code -- Lowcoder service naming -- Use new functions -- Improve error styling -- Css -- More css as it still looks like shit -- Final css touches -- Ajust time to 50s (tests done) -- Remove debug log, finally found it -- Remove more logging -- Remove limit on commit message -- Remove dayjs -- Remove unused code and fix import - -## [4.0.0-beta.380] - 2024-12-27 - -### 🚀 Features - -- New ServerReachabilityChanged event -- Use new ServerReachabilityChanged event instead of isDirty -- Add infomaniak oauth -- Add server disk usage check frequency -- Add environment_uuid support and update API documentation -- Add service/resource/project labels -- Add coolify.environment label -- Add database subtype -- Migrate to new encryption options -- New encryption options - -### 🐛 Bug Fixes - -- Render html on error page correctly -- Invalid API response on missing project -- Applications API response code + schema -- Applications API writing to unavailable models -- If an init script is renamed the old version is still on the server -- Oauthseeder -- Compose loading seq -- Resource clone name + volume name generation -- Update Dockerfile entrypoint path to /etc/entrypoint.d -- Debug mode -- Unreachable notifications -- Remove duplicated ServerCheckJob call -- Few fixes and use new ServerReachabilityChanged event -- Use serverStatus not just status -- Oauth seeder -- Service ui structure -- Check port 8080 and fallback to 80 -- Refactor database view -- Always use docker cleanup frequency -- Advanced server UI -- Html css -- Fix domain being override when update application -- Use nixpacks predefined build variables, but still could update the default values from Coolify -- Use local monaco-editor instead of Cloudflare -- N8n timezone -- Smtp encryption -- Bind() to 0.0.0.0:80 failed -- Oauth seeder -- Unreachable notifications -- Instance settings migration -- Only encrypt instance email settings if there are any -- Error message -- Update healthcheck and port configurations to use port 8080 - -### 🚜 Refactor - -- Rename `coolify.environment` to `coolify.environmentName` - -### ⚙️ Miscellaneous Tasks - -- Regenerate API spec, removing notification fields -- Remove ray debugging -- Version ++ - -## [4.0.0-beta.378] - 2024-12-13 - -### 🐛 Bug Fixes - -- Monaco editor light and dark mode switching -- Service status indicator + oauth saving -- Socialite for azure and authentik -- Saving oauth -- Fallback for copy button -- Copy the right text -- Maybe fallback is now working -- Only show copy button on secure context - -## [4.0.0-beta.377] - 2024-12-13 - -### 🚀 Features - -- Add deploy-only token permission -- Able to deploy without cache on every commit -- Update private key nam with new slug as well -- Allow disabling default redirect, set status to 503 -- Add TLS configuration for default redirect in Server model -- Slack notifications -- Introduce root permission -- Able to download schedule task logs -- Migrate old email notification settings from the teams table -- Migrate old discord notification settings from the teams table -- Migrate old telegram notification settings from the teams table -- Add slack notifications to a new table -- Enable success messages again -- Use new notification stuff inside team model -- Some more notification settings and better defaults -- New email notification settings -- New shared function name `is_transactional_emails_enabled()` -- New shared notifications functions -- Email Notification Settings Model -- Telegram notification settings Model -- Discord notification settings Model -- Slack notification settings Model -- New Discord notification UI -- New Slack notification UI -- New telegram UI -- Use new notification event names -- Always sent notifications -- Scheduled task success notification -- Notification trait -- Get discord Webhook form new table -- Get Slack Webhook form new table -- Use new table or instance settings for email -- Use new place for settings and topic IDs for telegram -- Encrypt instance email settings -- Use encryption in instance settings model -- Scheduled task success and failure notifications -- Add docker cleanup success and failure notification settings columns -- UI for docker cleanup success and failure notification -- Docker cleanup email views -- Docker cleanup success and failure notification files -- Scheduled task success email -- Send new docker cleanup notifications -- :passport_control: integrate Authentik authentication with Coolify -- *(notification)* Add Pushover -- Add seeder command and configuration for database seeding -- Add new password magic env with symbols -- Add documenso service - -### 🐛 Bug Fixes - -- Resolve undefined searchInput reference in Alpine.js component -- URL and sync new app name -- Typos and naming -- Client and webhook secret disappear after sync -- Missing `mysql_password` API property -- Incorrect MongoDB init API property -- Old git versions does not have --cone implemented properly -- Don't allow editing traefik config -- Restart proxy -- Dev mode -- Ui -- Display actual values for disk space checks in installer script -- Proxy change behaviour -- Add warning color -- Import NotificationSlack correctly -- Add middleware to new abilities, better ux for selecting permissions, etc. -- Root + read:sensive could read senstive data with a middlewarew -- Always have download logs button on scheduled tasks -- Missing css -- Development image -- Dockerignore -- DB migration error -- Drop all unused smtp columns -- Backward compatibility -- Email notification channel enabled function -- Instance email settins -- Make sure resend is false if SMTP is true and vice versa -- Email Notification saving -- Slack and discord url now uses text filed because encryption makes the url very long -- Notification trait -- Encryption fixes -- Docker cleanup email template -- Add missing deployment notifications to telegram -- New docker cleanup settings are now saved to the DB correctly -- Ui + migrations -- Docker cleanup email notifications -- General notifications does not go through email channel -- Test notifications to only send it to the right channel -- Remove resale_license from db as well -- Nexus service -- Fileflows volume names -- --cone -- Provider error -- Database migration -- Seeder -- Migration call -- Slack helper -- Telegram helper -- Discord helper -- Telegram topic IDs -- Make pushover settings more clear -- Typo in pushover user key -- Use Livewire refresh method and lock properties -- Create pushover settings for existing teams -- Update token permission check from 'write' to 'root' -- Pushover -- Oauth seeder -- Correct heading display for OAuth settings in settings-oauth.blade.php -- Adjust spacing in login form for improved layout -- Services env values should be sensitive -- Documenso -- Dolibarr -- Typo -- Update OauthSettingSeeder to handle new provider definitions and ensure authentik is recreated if missing -- Improve OauthSettingSeeder to correctly delete non-existent providers and ensure proper handling of provider definitions -- Encrypt resend API key in instance settings -- Resend api key is already a text column - -### 💼 Other - -- Test rename GitHub app -- Checkmate service and fix prowlar slogan (too long) - -### 🚜 Refactor - -- Update Traefik configuration for improved security and logging -- Improve proxy configuration and code consistency in Server model -- Rename name method to sanitizedName in BaseModel for clarity -- Improve migration command and enhance application model with global scope and status checks -- Unify notification icon -- Remove unused Azure and Authentik service configurations from services.php -- Change email column types in instance_settings migration from string to text -- Change OauthSetting creation to updateOrCreate for better handling of existing records - -### ⚙️ Miscellaneous Tasks - -- Regenerate openapi spec -- Composer dep bump -- Dep bump -- Upgrade cloudflared and minio -- Remove comments and improve DB column naming -- Remove unused seeder -- Remove unused waitlist stuff -- Remove wired.php (not used anymore) -- Remove unused resale license job -- Remove commented out internal notification -- Remove more waitlist stuff -- Remove commented out notification -- Remove more waitlist stuff -- Remove unused code -- Fix typo -- Remove comment out code -- Some reordering -- Remove resale license reference -- Remove functions from shared.php -- Public settings for email notification -- Remove waitlist redirect -- Remove log -- Use new notification trait -- Remove unused route -- Remove unused email component -- Comment status changes as it is disabled for now -- Bump dep -- Reorder navbar -- Rename topicID to threadId like in the telegram API response -- Update PHP configuration to set memory limit using environment variable - -## [4.0.0-beta.376] - 2024-12-07 - -### 🐛 Bug Fixes - -- Api endpoint - -## [4.0.0-beta.374] - 2024-12-03 - -### 🐛 Bug Fixes - -- Application view loading -- Postiz service -- Only able to select the right keys -- Test email should not be required -- A few inputs - -### 🧪 Testing - -- Setup database for upcoming tests - -## [4.0.0-beta.372] - 2024-11-26 - -### 🚀 Features - -- Add MacOS template -- Add Windows template -- *(service)* :sparkles: add mealie -- Add hex magic env var - -### 🐛 Bug Fixes - -- Service generate includes yml files as well (haha) -- ServercheckJob should run every 5 minutes on cloud -- New resource icons -- Search should be more visible on scroll on new resource -- Logdrain settings -- Ui -- Email should be retried with backoff -- Alpine in body layout - -### 💼 Other - -- Caddy docker labels do not honor "strip prefix" option - -## [4.0.0-beta.371] - 2024-11-22 - -### 🐛 Bug Fixes - -- Improve helper text for metrics input fields -- Refine helper text for metrics input fields -- If mux conn fails, still use it without mux + save priv key with better logic -- Migration -- Always validate ssh key -- Make sure important jobs/actions are running on high prio queue -- Do not send internal notification for backups and status jobs -- Validateconnection -- View issue -- Heading -- Remove mux cleanup -- Db backup for services -- Version should come from constants + fix stripe webhook error reporting -- Undefined variable -- Remove version.php as everything is coming from constants.php -- Sentry error -- Websocket connections autoreconnect -- Sentry error -- Sentry -- Empty server API response -- Incorrect server API patch response -- Missing `uuid` parameter on server API patch -- Missing `settings` property on servers API -- Move servers API `delete_unused_*` properties -- Servers API returning `port` as a string -> integer -- Only return server uuid on server update - -## [4.0.0-beta.370] - 2024-11-15 - -### 🐛 Bug Fixes - -- Modal (+ add) on dynamic config was not opening, removed x-cloak -- AUTOUPDATE + checkbox opacity - -## [4.0.0-beta.369] - 2024-11-15 - -### 🐛 Bug Fixes - -- Modal-input - -## [4.0.0-beta.368] - 2024-11-15 - -### 🚀 Features - -- Check local horizon scheduler deployments -- Add internal api docs to /docs/api with auth -- Add proxy type change to create/update apis - -### 🐛 Bug Fixes - -- Show proper error message on invalid Git source -- Convert HTTP to SSH source when using deploy key on GitHub -- Cloud + stripe related -- Terminal view loading in async -- Cool 500 error (thanks hugodos) -- Update schema in code decorator -- Openapi docs -- Add tests for git url converts -- Minio / logto url generation -- Admin view -- Min docker version 26 -- Pull latest service-templates.json on init -- Workflow files for coolify build -- Autocompletes -- Timezone settings validation -- Invalid tz should not prevent other jobs to be executed -- Testing-host should be built locally -- Poll with modal issue -- Terminal opening issue -- If service img not found, use github as a source -- Fallback to local coolify.png -- Gather private ips -- Cf tunnel menu should be visible when server is not validated -- Deployment optimizations -- Init script + optimize laravel -- Default docker engine version + fix install script -- Pull helper image on init -- SPA static site default nginx conf - -### 💼 Other - -- Https://github.com/coollabsio/coolify/issues/4186 -- Separate resources by type in projects view -- Improve s3 add view - -### ⚙️ Miscellaneous Tasks - -- Update dep - -## [4.0.0-beta.365] - 2024-11-11 - -### 🚀 Features - -- Custom nginx configuration for static deployments + fix 404 redirects in nginx conf - -### 🐛 Bug Fixes - -- Trigger.dev db host & sslmode=disable -- Manual update should be executed only once + better UX -- Upgrade.sh -- Missing privateKey - -## [4.0.0-beta.364] - 2024-11-08 - -### 🐛 Bug Fixes - -- Define separate volumes for mattermost service template -- Github app name is too long -- ServerTimezone update - -### ⚙️ Miscellaneous Tasks - -- Edit www helper - -## [4.0.0-beta.363] - 2024-11-08 - -### 🚀 Features - -- Add Firefox template -- Add template for Wiki.js -- Add upgrade logs to /data/coolify/source - -### 🐛 Bug Fixes - -- Saving resend api key -- Wildcard domain save -- Disable cloudflare tunnel on "localhost" - -## [4.0.0-beta.362] - 2024-11-08 - -### 🐛 Bug Fixes - -- Notifications ui -- Disable wire:navigate -- Confirmation Settings css for light mode -- Server wildcard - -## [4.0.0-beta.361] - 2024-11-08 - -### 🚀 Features - -- Add Transmission template -- Add transmission healhcheck -- Add zipline template -- Dify template -- Required envs -- Add EdgeDB -- Show warning if people would like to use sslip with https -- Add is shared to env variables -- Variabel sync and support shared vars -- Add notification settings to server_disk_usage -- Add coder service tamplate and logo -- Debug mode for sentinel -- Add jitsi template -- Add --gpu support for custom docker command - -### 🐛 Bug Fixes - -- Make sure caddy is not removed by cleanup -- Libretranslate -- Do not allow to change number of lines when streaming logs -- Plunk -- No manual timezones -- Helper push -- Format -- Add port metadata and Coolify magic to generate the domain -- Sentinel -- Metrics -- Generate sentinel url -- Only enable Sentinel for new servers -- Is_static through API -- Allow setting standalone redis variables via ENVs (team variables...) -- Check for username separately form password -- Encrypt all existing redis passwords -- Pull helper image on helper_version change -- Redis database user and password -- Able to update ipv4 / ipv6 instance settings -- Metrics for dbs -- Sentinel start fixed -- Validate sentinel custom URL when enabling sentinel -- Should be able to reset labels in read-only mode with manual click -- No sentinel for swarm yet -- Charts ui -- Volume -- Sentinel config changes restarts sentinel -- Disable sentinel for now -- Disable Sentinel temporarily -- Disable Sentinel temporarily for non-dev environments -- Access team's github apps only -- Admins should now invite owner -- Add experimental flag -- GenerateSentinelUrl method -- NumberOfLines could be null -- Login / register view -- Restart sentinel once a day -- Changing private key manually won't trigger a notification -- Grammar for helper -- Fix my own grammar -- Add telescope only in dev mode -- New way to update container statuses -- Only run server storage every 10 mins if sentinel is not active -- Cloud admin view -- Queries in kernel.php -- Lower case emails only -- Change emails to lowercase on init -- Do not error on update email -- Always authenticate with lowercase emails -- Dashboard refactor -- Add min/max length to input/texarea -- Remove livewire legacy from help view -- Remove unnecessary endpoints (magic) -- Transactional email livewire -- Destinations livewire refactor -- Refactor destination/docker view -- Logdrains validation -- Reworded -- Use Auth(), add new db proxy stop event refactor clickhouse view -- Add user/pw to db view -- Sort servers by name -- Keydb view -- Refactor tags view / remove obsolete one -- Send discord/telegram notifications on high job queue -- Server view refresh on validation -- ShowBoarding -- Show docker installation logs & ubuntu 24.10 notification -- Do not overlap servercheckjob -- Server limit check -- Server validation -- Clear route / view -- Only skip docker installation on 24.10 if its not installed -- For --gpus device support -- Db/service start should be on high queue -- Do not stop sentinel on Coolify restart -- Run resourceCheck after new serviceCheckJob -- Mongodb in dev -- Better invitation errors -- Loading indicator for db proxies -- Do not execute gh workflow on template changes -- Only use sentry in cloud -- Update packagejson of coolify-realtime + add lock file -- Update last online with old function -- Seeder should not start sentinel -- Start sentinel on seeder - -### 💼 Other - -- Add peppermint -- Loggy -- Add UI for redis password and username -- Wireguard-easy template - -### 📚 Documentation - -- Update link to deploy api docs - -### ⚙️ Miscellaneous Tasks - -- Add transmission template desc -- Update transmission docs link -- Update version numbers to 4.0.0-beta.360 in configuration files -- Update AWS environment variable names in unsend.yaml -- Update AWS environment variable names in unsend.yaml -- Update livewire/livewire dependency to version 3.4.9 -- Update version to 4.0.0-beta.361 -- Update Docker build and push actions to v6 -- Update Docker build and push actions to v6 -- Update Docker build and push actions to v6 -- Sync coolify-helper to dockerhub as well -- Push realtime to dockerhub -- Sync coolify-realtime to dockerhub -- Rename workflows -- Rename development to staging build -- Sync coolify-testing-host to dockerhbu -- Sync coolify prod image to dockerhub as well -- Update Docker version to 26.0 -- Update project resource index page -- Update project service configuration view - -## [4.0.0-beta.360] - 2024-10-11 - -### ⚙️ Miscellaneous Tasks - -- Update livewire/livewire dependency to version 3.4.9 - -## [4.0.0-beta.359] - 2024-10-11 - -### 🐛 Bug Fixes - -- Use correct env variable for invoice ninja password - -### ⚙️ Miscellaneous Tasks - -- Update laravel/horizon dependency to version 5.29.1 -- Update service extra fields to use dynamic keys - -## [4.0.0-beta.358] - 2024-10-10 - -### 🚀 Features - -- Add customHelper to stack-form -- Add cloudbeaver template -- Add ntfy template -- Add qbittorrent template -- Add Homebox template -- Add owncloud service and logo -- Add immich service -- Auto generate url -- Refactored to work with coolify auto env vars -- Affine service template and logo -- Add LibreTranslate template -- Open version in a new tab - -### 🐛 Bug Fixes - -- Signup -- Application domains should be http and https only -- Validate and sanitize application domains -- Sanitize and validate application domains - -### 💼 Other - -- Other DB options for freshrss -- Nextcloud MariaDB and MySQL versions - -### ⚙️ Miscellaneous Tasks - -- Fix form submission and keydown event handling in modal-confirmation.blade.php -- Update version numbers to 4.0.0-beta.359 in configuration files -- Disable adding default environment variables in shared.php - -## [4.0.0-beta.357] - 2024-10-08 - -### 🚀 Features - -- Add Mautic 4 and 5 to service templates -- Add keycloak template -- Add onedev template -- Improve search functionality in project selection - -### 🐛 Bug Fixes - -- Update mattermost image tag and add default port -- Remove env, change timezone -- Postgres healthcheck -- Azimutt template - still not working haha -- New parser with SERVICE_URL_ envs -- Improve service template readability -- Update password variables in Service model -- Scheduled database server -- Select server view - -### 💼 Other - -- Keycloak - -### ⚙️ Miscellaneous Tasks - -- Add mattermost logo as svg -- Add mattermost svg to compose -- Update version to 4.0.0-beta.357 - -## [4.0.0-beta.356] - 2024-10-07 - -### 🚀 Features - -- Add Argilla service configuration to Service model -- Add Invoice Ninja service configuration to Service model -- Project search on frontend -- Add ollama service with open webui and logo -- Update setType method to use slug value for type -- Refactor setType method to use slug value for type -- Refactor setType method to use slug value for type -- Add Supertokens template -- Add easyappointments service template -- Add dozzle template -- Adds forgejo service with runners - -### 🐛 Bug Fixes - -- Reset description and subject fields after submitting feedback -- Tag mass redeployments -- Service env orders, application env orders -- Proxy conf in dev -- One-click services -- Use local service-templates in dev -- New services -- Remove not used extra host -- Chatwoot service -- Directus -- Database descriptions -- Update services -- Soketi -- Select server view - -### 💼 Other - -- Update helper version -- Outline -- Directus -- Supertokens -- Supertokens json -- Rabbitmq -- Easyappointments -- Soketi -- Dozzle -- Windmill -- Coolify.json - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.356 -- Remove commented code for shared variable type validation -- Update MariaDB image to version 11 and fix service environment variable orders -- Update anythingllm.yaml volumes configuration -- Update proxy configuration paths for Caddy and Nginx in dev -- Update password form submission in modal-confirmation component -- Update project query to order by name in uppercase -- Update project query to order by name in lowercase -- Update select.blade.php with improved search functionality -- Add Nitropage service template and logo -- Bump coolify-helper version to 1.0.2 -- Refactor loadServices2 method and remove unused code -- Update version to 4.0.0-beta.357 -- Update service names and volumes in windmill.yaml -- Update version to 4.0.0-beta.358 -- Ignore .ignition.json files in Docker and Git - -## [4.0.0-beta.355] - 2024-10-03 - -### 🐛 Bug Fixes - -- Scheduled backup for services view -- Parser, espacing container labels - -### ⚙️ Miscellaneous Tasks - -- Update homarr service template and remove unnecessary code -- Update version to 4.0.0-beta.355 - -## [4.0.0-beta.354] - 2024-10-03 - -### 🚀 Features - -- Add it-tools service template and logo -- Add homarr service tamplate and logo - -### 🐛 Bug Fixes - -- Parse proxy config and check the set ports usage -- Update FQDN - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.354 -- Remove debug statement in Service model -- Remove commented code in Server model -- Fix application deployment queue filter logic -- Refactor modal-confirmation component -- Update it-tools service template and port configuration -- Update homarr service template and remove unnecessary code - -## [4.0.0-beta.353] - 2024-10-03 - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.353 -- Update service application view - -## [4.0.0-beta.352] - 2024-10-03 - -### 🐛 Bug Fixes - -- Service application view -- Add new supported database images - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.352 -- Refactor DatabaseBackupJob to handle missing team - -## [4.0.0-beta.351] - 2024-10-03 - -### 🚀 Features - -- Add strapi template - -### 🐛 Bug Fixes - -- Able to support more database dynamically from Coolify's UI -- Strapi template -- Bitcoin core template -- Api useBuildServer - -## [4.0.0-beta.349] - 2024-10-01 - -### 🚀 Features - -- Add command to check application deployment queue -- Support Hetzner S3 -- Handle HTTPS domain in ConfigureCloudflareTunnels -- Backup all databases for mysql,mariadb,postgresql -- Restart service without pulling the latest image - -### 🐛 Bug Fixes - -- Remove autofocuses -- Ipv6 scp should use -6 flag -- Cleanup stucked applicationdeploymentqueue -- Realtime watch in development mode -- Able to select root permission easier - -### 💼 Other - -- Show backup button on supported db service stacks - -### 🚜 Refactor - -- Remove deployment queue when deleting an application -- Improve SSH command generation in Terminal.php and terminal-server.js -- Fix indentation in modal-confirmation.blade.php -- Improve parsing of commands for sudo in parseCommandsByLineForSudo -- Improve popup component styling and button behavior -- Encode delimiter in SshMultiplexingHelper -- Remove inactivity timer in terminal-server.js -- Improve socket reconnection interval in terminal.js -- Remove unnecessary watch command from soketi service entrypoint - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.350 in configuration files -- Update command signature and description for cleanup application deployment queue -- Add missing import for Attribute class in ApplicationDeploymentQueue model -- Update modal input in server form to prevent closing on outside click -- Remove unnecessary command from SshMultiplexingHelper -- Remove commented out code for uploading to S3 in DatabaseBackupJob -- Update soketi service image to version 1.0.3 - -## [4.0.0-beta.348] - 2024-10-01 - -### 🚀 Features - -- Update resource deletion job to allow configurable options through API -- Add query parameters for deleting configurations, volumes, docker cleanup, and connected networks - -### 🐛 Bug Fixes - -- In dev mode do not ask confirmation on delete -- Mixpost -- Handle deletion of 'hello' in confirmation modal for dev environment - -### 💼 Other - -- Server storage check - -### 🚜 Refactor - -- Update search input placeholder in resource index view - -### ⚙️ Miscellaneous Tasks - -- Fix docs link in running state -- Update Coolify Realtime workflow to only trigger on the main branch -- Refactor instanceSettings() function to improve code readability -- Update Coolify Realtime image to version 1.0.2 -- Remove unnecessary code in DatabaseBackupJob.php -- Add "Not Usable" indicator for storage items -- Refactor instanceSettings() function and improve code readability -- Update version numbers to 4.0.0-beta.349 and 4.0.0-beta.350 - -## [4.0.0-beta.347] - 2024-09-28 - -### 🚀 Features - -- Allow specify use_build_server when creating/updating an application -- Add support for `use_build_server` in API endpoints for creating/updating applications -- Add Mixpost template - -### 🐛 Bug Fixes - -- Filebrowser template -- Edit is_build_server_enabled upon creating application on other application type -- Save settings after assigning value - -### 💼 Other - -- Remove memlock as it caused problems for some users - -### ⚙️ Miscellaneous Tasks - -- Update Mailpit logo to use SVG format - -## [4.0.0-beta.346] - 2024-09-27 - -### 🚀 Features - -- Add ContainerStatusTypes enum for managing container status - -### 🐛 Bug Fixes - -- Proxy fixes -- Proxy -- *(templates)* Filebrowser FQDN env variable -- Handle edge case when build variables and env variables are in different format -- Compose based terminal - -### 💼 Other - -- Manual cleanup button and unused volumes and network deletion -- Force helper image removal -- Use the new confirmation flow -- Typo -- Typo in install script -- If API is disabeled do not show API token creation stuff -- Disable API by default -- Add debug bar - -### 🚜 Refactor - -- Update environment variable name for uptime-kuma service -- Improve start proxy script to handle existing containers gracefully -- Update delete server confirmation modal buttons -- Remove unnecessary code - -### ⚙️ Miscellaneous Tasks - -- Add autocomplete attribute to input fields -- Refactor API Tokens component to use isApiEnabled flag -- Update versions.json file -- Remove unused .env.development.example file -- Update API Tokens view to include link to Settings menu -- Update web.php to cast server port as integer -- Update backup deletion labels to use language files -- Update database startup heading title -- Update database startup heading title -- Custom vite envs -- Update version numbers to 4.0.0-beta.348 -- Refactor code to improve SSH key handling and storage - -## [4.0.0-beta.343] - 2024-09-25 - -### 🐛 Bug Fixes - -- Parser -- Exited services statuses -- Make sure to reload window if app status changes -- Deploy key based deployments - -### 🚜 Refactor - -- Remove commented out code and improve environment variable handling in newParser function -- Improve label positioning in input and checkbox components -- Group and sort fields in StackForm by service name and password status -- Improve layout and add checkbox for task enablement in scheduled task form -- Update checkbox component to support full width option -- Update confirmation label in danger.blade.php template -- Fix typo in execute-container-command.blade.php -- Update OS_TYPE for Asahi Linux in install.sh script -- Add localhost as Server if it doesn't exist and not in cloud environment -- Add localhost as Server if it doesn't exist and not in cloud environment -- Update ProductionSeeder to fix issue with coolify_key assignment -- Improve modal confirmation titles and button labels -- Update install.sh script to remove redirection of upgrade output to /dev/null -- Fix modal input closeOutside prop in configuration.blade.php -- Add support for IPv6 addresses in sslip function - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.343 -- Update version numbers to 4.0.0-beta.344 -- Update version numbers to 4.0.0-beta.345 -- Update version numbers to 4.0.0-beta.346 - -## [4.0.0-beta.342] - 2024-09-24 - -### 🚀 Features - -- Add nullable constraint to 'fingerprint' column in private_keys table -- *(api)* Add an endpoint to execute a command -- *(api)* Add endpoint to execute a command - -### 🐛 Bug Fixes - -- Proxy status -- Coolify-db should not be in the managed resources -- Store original root key in the original location -- Logto service -- Cloudflared service -- Migrations -- Cloudflare tunnel configuration, ui, etc - -### 💼 Other - -- Volumes on development environment -- Clean new volume name for dev volumes -- Persist DBs, services and so on stored in data/coolify -- Add SSH Key fingerprint to DB -- Add a fingerprint to every private key on save, create... -- Make sure invalid private keys can not be added -- Encrypt private SSH keys in the DB -- Add is_sftp and is_server_ssh_key coloums -- New ssh key file name on disk -- Store all keys on disk by default -- Populate SSH key folder -- Populate SSH keys in dev -- Use new function names and logic everywhere -- Create a Multiplexing Helper -- SSH multiplexing -- Remove unused code form multiplexing -- SSH Key cleanup job -- Private key with ID 2 on dev -- Move more functions to the PrivateKey Model -- Add ssh key fingerprint and generate one for existing keys -- ID issues on dev seeders -- Server ID 0 -- Make sure in use private keys are not deleted -- Do not delete SSH Key from disk during server validation error -- UI bug, do not write ssh key to disk in server dialog -- SSH Multiplexing for Jobs -- SSH algorhytm text -- Few multiplexing things -- Clear mux directory -- Multiplexing do not write file manually -- Integrate tow step process in the modal component WIP -- Ability to hide labels -- DB start, stop confirm -- Del init script -- General confirm -- Preview deployments and typos -- Service confirmation -- Confirm file storage -- Stop service confirm -- DB image cleanup -- Confirm ressource operation -- Environment variabel deletion -- Confirm scheduled tasks -- Confirm API token -- Confirm private key -- Confirm server deletion -- Confirm server settings -- Proxy stop and restart confirmation -- GH app deletion confirmation -- Redeploy all confirmation -- User deletion confirmation -- Team deletion confirmation -- Backup job confirmation -- Delete volume confirmation -- More conformations and fixes -- Delete unused private keys button -- Ray error because port is not uncommented -- #3322 deploy DB alterations before updating -- Css issue with advanced settings and remove cf tunnel in onboarding -- New cf tunnel install flow -- Made help text more clear -- Cloudflare tunnel -- Make helper text more clean to use a FQDN and not an URL - -### 🚜 Refactor - -- Update Docker cleanup label in Heading.php and Navbar.php -- Remove commented out code in Navbar.php -- Remove CleanupSshKeysJob from schedule in Kernel.php -- Update getAJoke function to exclude offensive jokes -- Update getAJoke function to use HTTPS for API request -- Update CleanupHelperContainersJob to use more efficient Docker command -- Update PrivateKey model to improve code readability and maintainability -- Remove unnecessary code in PrivateKey model -- Update PrivateKey model to use ownedByCurrentTeam() scope for cleanupUnusedKeys() -- Update install.sh script to check if coolify-db volume exists before generating SSH key -- Update ServerSeeder and PopulateSshKeysDirectorySeeder -- Improve attribute sanitization in Server model -- Update confirmation button text for deletion actions -- Remove unnecessary code in shared.php file -- Update environment variables for services in compose files -- Update select.blade.php to improve trademarks policy display -- Update select.blade.php to improve trademarks policy display -- Fix typo in subscription URLs -- Add Postiz service to compose file (disabled for now) -- Update shared.php to include predefined ports for services -- Simplify SSH key synchronization logic -- Remove unused code in DatabaseBackupStatusJob and PopulateSshKeysDirectorySeeder - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.342 -- Update remove-labels-and-assignees-on-close.yml -- Add SSH key for localhost in ProductionSeeder -- Update SSH key generation in install.sh script -- Update ProductionSeeder to call OauthSettingSeeder and PopulateSshKeysDirectorySeeder -- Update install.sh to support Asahi Linux -- Update install.sh version to 1.6 -- Remove unused middleware and uniqueId method in DockerCleanupJob -- Refactor DockerCleanupJob to remove unused middleware and uniqueId method -- Remove unused migration file for populating SSH keys and clearing mux directory -- Add modified files to the commit -- Refactor pre-commit hook to improve performance and readability -- Update CONTRIBUTING.md with troubleshooting note about database migrations -- Refactor pre-commit hook to improve performance and readability -- Update cleanup command to use Redis instead of queue -- Update Docker commands to start proxy - -## [4.0.0-beta.341] - 2024-09-18 - -### 🚀 Features - -- Add buddy logo - -## [4.0.0-beta.336] - 2024-09-16 - -### 🚀 Features - -- Make coolify full width by default -- Fully functional terminal for command center -- Custom terminal host - -### 🐛 Bug Fixes - -- Keep-alive ws connections -- Add build.sh to debug logs -- Update Coolify installer -- Terminal -- Generate https for minio -- Install script -- Handle WebSocket connection close in terminal.blade.php -- Able to open terminal to any containers -- Refactor run-command -- If you exit a container manually, it should close the underlying tty as well -- Move terminal to separate view on services -- Only update helper image in DB -- Generated fqdn for SERVICE_FQDN_APP_3000 magic envs - -### 💼 Other - -- Remove labels and assignees on issue close -- Make sure this action is also triggered on PR issue close - -### 🚜 Refactor - -- Remove unnecessary code in ExecuteContainerCommand.php -- Improve Docker network connection command in StartService.php -- Terminal / run command -- Add authorization check in ExecuteContainerCommand mount method -- Remove unnecessary code in Terminal.php -- Remove unnecessary code in Terminal.blade.php -- Update WebSocket connection initialization in terminal.blade.php -- Remove unnecessary console.log statements in terminal.blade.php - -### ⚙️ Miscellaneous Tasks - -- Update release version to 4.0.0-beta.336 -- Update coolify environment variable assignment with double quotes -- Update shared.php to fix issues with source and network variables -- Update terminal styling for better readability -- Update button text for container connection form -- Update Dockerfile and workflow for Coolify Realtime (v4) -- Remove unused entrypoint script and update volume mapping -- Update .env file and docker-compose configuration -- Update APP_NAME environment variable in docker-compose.prod.yml -- Update WebSocket URL in terminal.blade.php -- Update Dockerfile and workflow for Coolify Realtime (v4) -- Update Dockerfile and workflow for Coolify Realtime (v4) -- Update Dockerfile and workflow for Coolify Realtime (v4) -- Rename Command Center to Terminal in code and views -- Update branch restriction for push event in coolify-helper.yml -- Update terminal button text and layout in application heading view -- Refactor terminal component and select form layout -- Update coolify nightly version to 4.0.0-beta.335 -- Update helper version to 1.0.1 -- Fix syntax error in versions.json -- Update version numbers to 4.0.0-beta.337 -- Update Coolify installer and scripts to include a function for fetching programming jokes -- Update docker network connection command in ApplicationDeploymentJob.php -- Add validation to prevent selecting 'default' server or container in RunCommand.php -- Update versions.json to reflect latest version of realtime container -- Update soketi image to version 1.0.1 -- Nightly - Update soketi image to version 1.0.1 and versions.json to reflect latest version of realtime container -- Update version numbers to 4.0.0-beta.339 -- Update version numbers to 4.0.0-beta.340 -- Update version numbers to 4.0.0-beta.341 - -### ◀️ Revert - -- Databasebackup - -## [4.0.0-beta.335] - 2024-09-12 - -### 🐛 Bug Fixes - -- Cloudflare tunnel with new multiplexing feature - -### 💼 Other - -- SSH Multiplexing on docker desktop on Windows - -### ⚙️ Miscellaneous Tasks - -- Update release version to 4.0.0-beta.335 -- Update constants.ssh.mux_enabled in remoteProcess.php -- Update listeners and proxy settings in server form and new server components -- Remove unnecessary null check for proxy_type in generate_default_proxy_configuration -- Remove unnecessary SSH command execution time logging - -## [4.0.0-beta.334] - 2024-09-12 - -### ⚙️ Miscellaneous Tasks - -- Remove itsgoingd/clockwork from require-dev in composer.json -- Update 'key' value of gitlab in Service.php to use environment variable - -## [4.0.0-beta.333] - 2024-09-11 - -### 🐛 Bug Fixes - -- Disable mux_enabled during server validation -- Move mc command to coolify image from helper -- Keydb. add `:` delimiter for connection string - -### 💼 Other - -- Remote servers with port and user -- Do not change localhost server name on revalidation -- Release.md file - -### 🚜 Refactor - -- Improve handling of environment variable merging in upgrade script - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.333 -- Copy .env file to .env-{DATE} if it exists -- Update .env file with new values -- Update server check job middleware to use server ID instead of UUID -- Add reminder to backup .env file before running install script again -- Copy .env file to backup location during installation script -- Add reminder to backup .env file during installation script -- Update permissions in pr-build.yml and version numbers -- Add minio/mc command to Dockerfile - -## [4.0.0-beta.332] - 2024-09-10 - -### 🚀 Features - -- Expose project description in API response -- Add elixir finetunes to the deployment job - -### 🐛 Bug Fixes - -- Reenable overlapping servercheckjob -- Appwrite template + parser -- Don't add `networks` key if `network_mode` is used -- Remove debug statement in shared.php -- Scp through cloudflare -- Delete older versions of the helper image other than the latest one -- Update remoteProcess.php to handle null values in logItem properties - -### 💼 Other - -- Set a default server timezone -- Implement SSH Multiplexing -- Enabel mux -- Cleanup stale multiplexing connections - -### 🚜 Refactor - -- Improve environment variable handling in shared.php - -### ⚙️ Miscellaneous Tasks - -- Set timeout for ServerCheckJob to 60 seconds -- Update appwrite.yaml to include OpenSSL key variable assignment - -## [4.0.0-beta.330] - 2024-09-06 - -### 🐛 Bug Fixes - -- Parser -- Plunk NEXT_PUBLIC_API_URI - -### 💼 Other - -- Pull helper image if not available otherwise s3 backup upload fails - -### 🚜 Refactor - -- Improve handling of server timezones in scheduled backups and tasks -- Improve handling of server timezones in scheduled backups and tasks -- Improve handling of server timezones in scheduled backups and tasks -- Update cleanup schedule to run daily at midnight -- Skip returning volume if driver type is cifs or nfs - -### ⚙️ Miscellaneous Tasks - -- Update coolify-helper.yml to get version from versions.json -- Disable Ray by default -- Enable Ray by default and update Dockerfile with latest versions of PACK and NIXPACKS -- Update Ray configuration and Dockerfile -- Add middleware for updating environment variables by UUID in `api.php` routes -- Expose port 3000 in browserless.yaml template -- Update Ray configuration and Dockerfile -- Update coolify version to 4.0.0-beta.331 -- Update versions.json and sentry.php to 4.0.0-beta.332 -- Update version to 4.0.0-beta.332 -- Update DATABASE_URL in plunk.yaml to use plunk database -- Add coolify.managed=true label to Docker image builds -- Update docker image pruning command to exclude managed images -- Update docker cleanup schedule to run daily at midnight -- Update versions.json to version 1.0.1 -- Update coolify-helper.yml to include "next" branch in push trigger - -## [4.0.0-beta.326] - 2024-09-03 - -### 🚀 Features - -- Update server_settings table to force docker cleanup -- Update Docker Compose file with DB_URL environment variable -- Refactor shared.php to improve environment variable handling - -### 🐛 Bug Fixes - -- Wrong executions order -- Handle project not found error in environment_details API endpoint -- Deployment running for - without "ago" -- Update helper image pulling logic to only pull if the version is newer - -### 💼 Other - -- Plunk svg - -### 📚 Documentation - -- Update Plunk documentation link in compose/plunk.yaml - -### ⚙️ Miscellaneous Tasks - -- Update UI for displaying no executions found in scheduled task list -- Update UI for displaying deployment status in deployment list -- Update UI for displaying deployment status in deployment list -- Ignore unnecessary files in production build workflow -- Update server form layout and settings -- Update Dockerfile with latest versions of PACK and NIXPACKS - -## [4.0.0-beta.324] - 2024-09-02 - -### 🚀 Features - -- Preserve git repository with advanced file storages -- Added Windmill template -- Added Budibase template -- Add shm-size for custom docker commands -- Add custom docker container options to all databases -- Able to select different postgres database -- Add new logos for jobscollider and hostinger -- Order scheduled task executions -- Add Code Server environment variables to Service model -- Add coolify build env variables to building phase -- Add new logos for GlueOps, Ubicloud, Juxtdigital, Saasykit, and Massivegrid -- Add new logos for GlueOps, Ubicloud, Juxtdigital, Saasykit, and Massivegrid - -### 🐛 Bug Fixes - -- Timezone not updated when systemd is missing -- If volumes + file mounts are defined, should merge them together in the compose file -- All mongo v4 backups should use the different backup command -- Database custom environment variables -- Connect compose apps to the right predefined network -- Docker compose destination network -- Server status when there are multiple servers -- Sync fqdn change on the UI -- Pr build names in case custom name is used -- Application patch request instant_deploy -- Canceling deployment on build server -- Backup of password protected postgresql database -- Docker cleanup job -- Storages with preserved git repository -- Parser parser parser -- New parser only in dev -- Parser parser -- Numberoflines should be number -- Docker cleanup job -- Fix directory and file mount headings in file-storage.blade.php -- Preview fqdn generation -- Revert a few lines -- Service ui sync bug -- Setup script doesn't work on rhel based images with some curl variant already installed -- Let's wait for healthy container during installation and wait an extra 20 seconds (for migrations) -- Infra files -- Log drain only for Applications -- Copy large compose files through scp (not ssh) -- Check if array is associative or not -- Openapi endpoint urls -- Convert environment variables to one format in shared.php -- Logical volumes could be overwritten with new path -- Env variable in value parsed -- Pull coolify image only when the app needs to be updated - -### 💼 Other - -- Actually update timezone on the server -- Cron jobs are executed based on the server timezone -- Server timezone seeder -- Recent backups UI -- Use apt-get instead of apt -- Typo -- Only pull helper image if the version is newer than the one - -### 🚜 Refactor - -- Update event listeners in Show components -- Refresh application to get latest database changes -- Update RabbitMQ configuration to use environment variable for port -- Remove debug statement in parseDockerComposeFile function -- ParseServiceVolumes -- Update OpenApi command to generate documentation -- Remove unnecessary server status check in destination view -- Remove unnecessary admin user email and password in budibase.yaml -- Improve saving of custom internal name in Advanced.php -- Add conditional check for volumes in generate_compose_file() -- Improve storage mount forms in add.blade.php -- Load environment variables based on resource type in sortEnvironmentVariables() -- Remove unnecessary network cleanup in Init.php -- Remove unnecessary environment variable checks in parseDockerComposeFile() -- Add null check for docker_compose_raw in parseCompose() -- Update dockerComposeParser to use YAML data from $yaml instead of $compose -- Convert service variables to key-value pairs in parseDockerComposeFile function -- Update database service name from mariadb to mysql -- Remove unnecessary code in DatabaseBackupJob and BackupExecutions -- Update Docker Compose parsing function to convert service variables to key-value pairs -- Update Docker Compose parsing function to convert service variables to key-value pairs -- Remove unused server timezone seeder and related code -- Remove unused server timezone seeder and related code -- Remove unused PullCoolifyImageJob from schedule -- Update parse method in Advanced, All, ApplicationPreview, General, and ApplicationDeploymentJob classes -- Remove commented out code for getIptables() in Dashboard.php -- Update .env file path in install.sh script -- Update SELF_HOSTED environment variable in docker-compose.prod.yml -- Remove unnecessary code for creating coolify network in upgrade.sh -- Update environment variable handling in StartClickhouse.php and ApplicationDeploymentJob.php -- Improve handling of COOLIFY_URL in shared.php -- Update build_args property type in ApplicationDeploymentJob -- Update background color of sponsor section in README.md -- Update Docker Compose location handling in PublicGitRepository -- Upgrade process of Coolify - -### 🧪 Testing - -- More tests - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.324 -- New compose parser with tests -- Update version to 1.3.4 in install.sh and 1.0.6 in upgrade.sh -- Update memory limit to 64MB in horizon configuration -- Update php packages -- Update axios npm dependency to version 1.7.5 -- Update Coolify version to 4.0.0-beta.324 and fix file paths in upgrade script -- Update Coolify version to 4.0.0-beta.324 -- Update Coolify version to 4.0.0-beta.325 -- Update Coolify version to 4.0.0-beta.326 -- Add cd command to change directory before removing .env file -- Update Coolify version to 4.0.0-beta.327 -- Update Coolify version to 4.0.0-beta.328 -- Update sponsor links in README.md -- Update version.json to versions.json in GitHub workflow -- Cleanup stucked resources and scheduled backups -- Update GitHub workflow to use versions.json instead of version.json -- Update GitHub workflow to use versions.json instead of version.json -- Update GitHub workflow to use versions.json instead of version.json -- Update GitHub workflow to use jq container for version extraction -- Update GitHub workflow to use jq container for version extraction - -## [4.0.0-beta.323] - 2024-08-08 - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.323 - -## [4.0.0-beta.322] - 2024-08-08 - -### 🐛 Bug Fixes - -- Manual update process - -### 🚜 Refactor - -- Update Server model getContainers method to use collect() for containers and containerReplicates -- Import ProxyTypes enum and use TRAEFIK instead of TRAEFIK_V2 - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.322 - -## [4.0.0-beta.321] - 2024-08-08 - -### 🐛 Bug Fixes - -- Scheduledbackup not found - -### 🚜 Refactor - -- Update StandalonePostgresql database initialization and backup handling -- Update cron expressions and add helper text for scheduled tasks - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.321 - -## [4.0.0-beta.320] - 2024-08-08 - -### 🚀 Features - -- Delete team in cloud without subscription -- Coolify init should cleanup stuck networks in proxy -- Add manual update check functionality to settings page -- Update auto update and update check frequencies in settings -- Update Upgrade component to check for latest version of Coolify -- Improve homepage service template -- Support map fields in Directus -- Labels by proxy type -- Able to generate only the required labels for resources - -### 🐛 Bug Fixes - -- Only append docker network if service/app is running -- Remove lazy load from scheduled tasks -- Plausible template -- Service_url should not have a trailing slash -- If usagebefore cannot be determined, cleanup docker with force -- Async remote command -- Only run logdrain if necessary -- Remove network if it is only connected to coolify proxy itself -- Dir mounts should have proper dirs -- File storages (dir/file mount) handled properly -- Do not use port exposes on docker compose buildpacks -- Minecraft server template fixed -- Graceful shutdown -- Stop resources gracefully -- Handle null and empty disk usage in DockerCleanupJob -- Show latest version on manual update view -- Empty string content should be saved as a file -- Update Traefik labels on init -- Add missing middleware for server check job - -### 🚜 Refactor - -- Update CleanupDatabase.php to adjust keep_days based on environment -- Adjust keep_days in CleanupDatabase.php based on environment -- Remove commented out code for cleaning up networks in CleanupDocker.php -- Update livewire polling interval in heading.blade.php -- Remove unused code for checking server status in Heading.php -- Simplify log drain installation in ServerCheckJob -- Remove unnecessary debug statement in ServerCheckJob -- Simplify log drain installation and stop log drain if necessary -- Cleanup unnecessary dynamic proxy configuration in Init command -- Remove unnecessary debug statement in ApplicationDeploymentJob -- Update timeout for graceful_shutdown_container in ApplicationDeploymentJob -- Remove unused code and optimize CheckForUpdatesJob -- Update ProxyTypes enum values to use TRAEFIK instead of TRAEFIK_V2 -- Update Traefik labels on init and cleanup unnecessary dynamic proxy configuration - -### 🎨 Styling - -- Linting - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.320 -- Add pull_request image builds to GH actions -- Add comment explaining the purpose of disconnecting the network in cleanup_unused_network_from_coolify_proxy() -- Update formbricks template -- Update registration view to display a notice for first user that it will be an admin -- Update server form to use password input for IP Address/Domain field -- Update navbar to include service status check -- Update navbar and configuration to improve service status check functionality -- Update workflows to include PR build and merge manifest steps -- Update UpdateCoolifyJob timeout to 10 minutes -- Update UpdateCoolifyJob to dispatch CheckForUpdatesJob synchronously - -## [4.0.0-beta.319] - 2024-07-26 - -### 🐛 Bug Fixes - -- Parse docker composer -- Service env parsing -- Service env variables -- Activity type invalid -- Update env on ui - -### 💼 Other - -- Service env parsing - -### ⚙️ Miscellaneous Tasks - -- Collect/create/update volumes in parseDockerComposeFile function - -## [4.0.0-beta.318] - 2024-07-24 - -### 🚀 Features - -- Create/delete project endpoints -- Add patch request to projects -- Add server api endpoints -- Add branddev logo to README.md -- Update API endpoint summaries -- Update Caddy button label in proxy.blade.php -- Check custom internal name through server's applications. -- New server check job - -### 🐛 Bug Fixes - -- Preview deployments should be stopped properly via gh webhook -- Deleting application should delete preview deployments -- Plane service images -- Fix issue with deployment start command in ApplicationDeploymentJob -- Directory will be created by default for compose host mounts -- Restart proxy does not work + status indicator on the UI -- Uuid in api docs type -- Raw compose deployment .env not found -- Api -> application patch endpoint -- Remove pull always when uploading backup to s3 -- Handle array env vars -- Link in task failed job notifications -- Random generated uuid will be full length (not 7 characters) -- Gitlab service -- Gitlab logo -- Bitbucket repository url -- By default volumes that we cannot determine if they are directories or files are treated as directories -- Domain update on services on the UI -- Update SERVICE_FQDN/URL env variables when you change the domain -- Several shared environment variables in one value, parsed correctly -- Members of root team should not see instance admin stuff - -### 💼 Other - -- Formbricks template add required CRON_SECRET -- Add required CRON_SECRET to Formbricks template - -### ⚙️ Miscellaneous Tasks - -- Update APP_BASE_URL to use SERVICE_FQDN_PLANE -- Update resource-limits.blade.php with improved input field helpers -- Update version numbers to 4.0.0-beta.319 -- Remove commented out code for docker image pruning - -## [4.0.0-beta.314] - 2024-07-15 - -### 🚀 Features - -- Improve error handling in loadComposeFile method -- Add readonly labels -- Preserve git repository -- Force cleanup server - -### 🐛 Bug Fixes - -- Typo in is_literal helper -- Env is_literal helper text typo -- Update docker compose pull command with --policy always -- Plane service template -- Vikunja -- Docmost template -- Drupal -- Improve github source creation -- Tag deployments -- New docker compose parsing -- Handle / in preselecting branches -- Handle custom_internal_name check in ApplicationDeploymentJob.php -- If git limit reached, ignore it and continue with a default selection -- Backup downloads -- Missing input for api endpoint -- Volume detection (dir or file) is fixed -- Supabase -- Create file storage even if content is empty - -### 💼 Other - -- Add basedir + compose file in new compose based apps - -### 🚜 Refactor - -- Remove unused code and fix storage form layout -- Update Docker Compose build command to include --pull flag -- Update DockerCleanupJob to handle nullable usageBefore property -- Server status job and docker cleanup job -- Update DockerCleanupJob to use server settings for force cleanup -- Update DockerCleanupJob to use server settings for force cleanup -- Disable health check for Rust applications during deployment - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.315 -- Update version to 4.0.0-beta.316 -- Update bug report template -- Update repository form with simplified URL input field -- Update width of container in general.blade.php -- Update checkbox labels in general.blade.php -- Update general page of apps -- Handle JSON parsing errors in format_docker_command_output_to_json -- Update Traefik image version to v2.11 -- Update version to 4.0.0-beta.317 -- Update version to 4.0.0-beta.318 -- Update helper message with link to documentation -- Disable health check by default -- Remove commented out code for sending internal notification - -### ◀️ Revert - -- Pull policy -- Advanced dropdown - -## [4.0.0-beta.308] - 2024-07-11 - -### 🚀 Features - -- Cleanup unused docker networks from proxy -- Compose parser v2 -- Display time interval for rollback images -- Add security and storage access key env to twenty template -- Add new logo for Latitude -- Enable legacy model binding in Livewire configuration - -### 🐛 Bug Fixes - -- Do not overwrite hardcoded variables if they rely on another variable -- Remove networks when deleting a docker compose based app -- Api -- Always set project name during app deployments -- Remove volumes as well -- Gitea pr previews -- Prevent instance fqdn persisting to other servers dynamic proxy configs -- Better volume cleanups -- Cleanup parameter -- Update redirect URL in unauthenticated exception handler -- Respect top-level configs and secrets -- Service status changed event -- Disable sentinel until a few bugs are fixed -- Service domains and envs are properly updated -- *(reactive-resume)* New healthcheck command for MinIO -- *(MinIO)* New command healthcheck -- Update minio hc in services -- Add validation for missing docker compose file - -### 🚜 Refactor - -- Add force parameter to StartProxy handle method -- Comment out unused code for network cleanup -- Reset default labels when docker_compose_domains is modified -- Webhooks view -- Tags view -- Only get instanceSettings once from db -- Update Dockerfile to set CI environment variable to true -- Remove unnecessary code in AppServiceProvider.php -- Update Livewire configuration views -- Update Webhooks.php to use nullable type for webhook URLs -- Add lazy loading to tags in Livewire configuration view -- Update metrics.blade.php to improve alert message clarity -- Update version numbers to 4.0.0-beta.312 -- Update version numbers to 4.0.0-beta.314 - -### ⚙️ Miscellaneous Tasks - -- Update Plausible docker compose template to Plausible 2.1.0 -- Update Plausible docker compose template to Plausible 2.1.0 -- Update livewire/livewire dependency to version 3.4.9 -- Refactor checkIfDomainIsAlreadyUsed function -- Update storage.blade.php view for livewire project service -- Update version to 4.0.0-beta.310 -- Update composer dependencies -- Add new logo for Latitude -- Bump version to 4.0.0-beta.311 - -### ◀️ Revert - -- Instancesettings - -## [4.0.0-beta.301] - 2024-06-24 - -### 🚀 Features - -- Local fonts -- More API endpoints -- Bulk env update api endpoint -- Update server settings metrics history days to 7 -- New app API endpoint -- Private gh deployments through api -- Lots of api endpoints -- Api api api api api api -- Rename CloudCleanupSubs to CloudCleanupSubscriptions -- Early fraud warning webhook -- Improve internal notification message for early fraud warning webhook -- Add schema for uuid property in app update response - -### 🐛 Bug Fixes - -- Run user commands on high prio queue -- Load js locally -- Remove lemon + paddle things -- Run container commands on high priority -- Image logo -- Remove both option for api endpoints. it just makes things complicated -- Cleanup subs in cloud -- Show keydbs/dragonflies/clickhouses -- Only run cloud clean on cloud + remove root team -- Force cleanup on busy servers -- Check domain on new app via api -- Custom container name will be the container name, not just internal network name -- Api updates -- Yaml everywhere -- Add newline character to private key before saving -- Add validation for webhook endpoint selection -- Database input validators -- Remove own app from domain checks -- Return data of app update - -### 💼 Other - -- Update process -- Glances service -- Glances -- Able to update application - -### 🚜 Refactor - -- Update Service model's saveComposeConfigs method -- Add default environment to Service model's saveComposeConfigs method -- Improve handling of default environment in Service model's saveComposeConfigs method -- Remove commented out code in Service model's saveComposeConfigs method -- Update stack-form.blade.php to include wire:target attribute for submit button -- Update code to use str() instead of Str::of() for string manipulation -- Improve formatting and readability of source.blade.php -- Add is_build_time property to nixpacks_php_fallback_path and nixpacks_php_root_dir -- Simplify code for retrieving subscription in Stripe webhook - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.302 -- Update version to 4.0.0-beta.303 -- Update version to 4.0.0-beta.305 -- Update version to 4.0.0-beta.306 -- Add log1x/laravel-webfonts package -- Update version to 4.0.0-beta.307 -- Refactor ServerStatusJob constructor formatting -- Update Monaco Editor for Docker Compose and Proxy Configuration -- More details -- Refactor shared.php helper functions - -## [4.0.0-beta.298] - 2024-06-24 - -### 🚀 Features - -- Spanish translation -- Cancelling a deployment will check if new could be started. -- Add supaguide logo to donations section -- Nixpacks now could reach local dbs internally -- Add Tigris logo to other/logos directory -- COOLIFY_CONTAINER_NAME predefined variable -- Charts -- Sentinel + charts -- Container metrics -- Add high priority queue -- Add metrics warning for servers without Sentinel enabled -- Add blacksmith logo to donations section -- Preselect server and destination if only one found -- More api endpoints -- Add API endpoint to update application by UUID -- Update statusnook logo filename in compose template - -### 🐛 Bug Fixes - -- Stripprefix middleware correctly labeled to http -- Bitbucket link -- Compose generator -- Do no truncate repositories wtih domain (git) in it -- In services should edit compose file for volumes and envs -- Handle laravel deployment better -- Db proxy status shown better in the UI -- Show commit message on webhooks + prs -- Metrics parsing -- Charts -- Application custom labels reset after saving -- Static build with new nixpacks build process -- Make server charts one livewire component with one interval selector -- You can now add env variable from ui to services -- Update compose environment with UI defined variables -- Refresh deployable compose without reload -- Remove cloud stripe notifications -- App deployment should be in high queue -- Remove zoom from modals -- Get envs before sortby -- MB is % lol -- Projects with 0 envs - -### 💼 Other - -- Unnecessary notification - -### 🚜 Refactor - -- Update text color for stderr output in deployment show view -- Update text color for stderr output in deployment show view -- Remove debug code for saving environment variables -- Update Docker build commands for better performance and flexibility -- Update image sizes and add new logos to README.md -- Update README.md with new logos and fix styling -- Update shared.php to use correct key for retrieving sentinel version -- Update container name assignment in Application model -- Remove commented code for docker container removal -- Update Application model to include getDomainsByUuid method -- Update Project/Show component to sort environments by created_at -- Update profile index view to display 2FA QR code in a centered container -- Update dashboard.blade.php to use project's default environment for redirection -- Update gitCommitLink method to handle null values in source.html_url -- Update docker-compose generation to use multi-line literal block - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.298 -- Switch to database sessions from redis -- Update dependencies and remove unused code -- Update tailwindcss and vue versions in package.json -- Update service template URL in constants.php -- Update sentinel version to 0.0.8 -- Update chart styling and loading text -- Update sentinel version to 0.0.9 -- Update Spanish translation for failed authentication messages -- Add portuguese traslation -- Add Turkish translations -- Add Vietnamese translate -- Add Treive logo to donations section -- Update README.md with latest release version badge -- Update latest release version badge in README.md -- Update version to 4.0.0-beta.299 -- Move server delete component to the bottom of the page -- Update version to 4.0.0-beta.301 - -## [4.0.0-beta.297] - 2024-06-11 - -### 🚀 Features - -- Easily redirect between www-and-non-www domains -- Add logos for new sponsors -- Add homepage template -- Update homepage.yaml with environment variables and volumes - -### 🐛 Bug Fixes - -- Multiline build args -- Setup script doesnt link to the correct source code file -- Install.sh do not reinstall packages on arch -- Just restart - -### 🚜 Refactor - -- Replaces duplications in code with a single function - -### ⚙️ Miscellaneous Tasks - -- Update page title in resource index view -- Update logo file path in logto.yaml -- Update logo file path in logto.yaml -- Remove commented out code for docker container removal -- Add isAnyDeploymentInprogress function to check if any deployments are in progress -- Add ApplicationDeploymentJob and pint.json - -## [4.0.0-beta.295] - 2024-06-10 - -### 🚀 Features - -- Able to change database passwords on the UI. It won't sync to the database. -- Able to add several domains to compose based previews -- Add bounty program link to bug report template -- Add titles -- Db proxy logs - -### 🐛 Bug Fixes - -- Custom docker compose commands, add project dir if needed -- Autoupdate process -- Backup executions view -- Handle previously defined compose previews -- Sort backup executions -- Supabase service, newest versions -- Set default name for Docker volumes if it is null -- Multiline variable should be literal + should be multiline in bash with \ -- Gitlab merge request should close PR - -### 💼 Other - -- Rocketchat -- New services based git apps - -### 🚜 Refactor - -- Append utm_source parameter to documentation URL -- Update save_environment_variables method to use application's environment_variables instead of environment_variables_preview -- Update deployment previews heading to "Deployments" -- Remove unused variables and improve code readability -- Initialize null properties in Github Change component -- Improve pre and post deployment command inputs -- Improve handling of Docker volumes in parseDockerComposeFile function - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.295 -- Update supported OS list with almalinux -- Update install.sh to support PopOS -- Update install.sh script to version 1.3.2 and handle Linux Mint as Ubuntu - -## [4.0.0-beta.294] - 2024-06-04 - -### ⚙️ Miscellaneous Tasks - -- Update Dockerfile with latest versions of Docker, Docker Compose, Docker Buildx, Pack, and Nixpacks - -## [4.0.0-beta.289] - 2024-05-29 - -### 🚀 Features - -- Add PHP memory limit environment variable to docker-compose.prod.yml -- Add manual update option to UpdateCoolify handle method -- Add port configuration for Vaultwarden service - -### 🐛 Bug Fixes - -- Sync upgrade process -- Publish horizon -- Add missing team model -- Test new upgrade process? -- Throw exception -- Build server dirs not created on main server -- Compose load with non-root user -- Able to redeploy dockerfile based apps without cache -- Compose previews does have env variables -- Fine-tune cdn pulls -- Spamming :D -- Parse docker version better -- Compose issues -- SERVICE_FQDN has source port in it -- Logto service -- Allow invitations via email -- Sort by defined order + fixed typo -- Only ignore volumes with driver_opts -- Check env in args for compose based apps - -### 🚜 Refactor - -- Update destination.blade.php to add group class for better styling -- Applicationdeploymentjob -- Improve code structure in ApplicationDeploymentJob.php -- Remove unnecessary debug statement in ApplicationDeploymentJob.php -- Remove unnecessary debug statements and improve code structure in RunRemoteProcess.php and ApplicationDeploymentJob.php -- Remove unnecessary logging statements from UpdateCoolify -- Update storage form inputs in show.blade.php -- Improve Docker Compose parsing for services -- Remove unnecessary port appending in updateCompose function -- Remove unnecessary form class in profile index.blade.php -- Update form layout in invite-link.blade.php -- Add log entry when starting new application deployment -- Improve Docker Compose parsing for services -- Update Docker Compose parsing for services -- Update slogan in shlink.yaml -- Improve display of deployment time in index.blade.php -- Remove commented out code for clearing Ray logs -- Update save_environment_variables method to use application's environment_variables instead of environment_variables_preview - -### ⚙️ Miscellaneous Tasks - -- Update for version 289 -- Fix formatting issue in deployment index.blade.php file -- Remove unnecessary wire:navigate attribute in breadcrumbs.blade.php -- Rename docker dirs -- Update laravel/socialite to version v5.14.0 and livewire/livewire to version 3.4.9 -- Update modal styles for better user experience -- Update deployment index.blade.php script for better performance -- Update version numbers to 4.0.0-beta.290 -- Update version numbers to 4.0.0-beta.291 -- Update version numbers to 4.0.0-beta.292 -- Update version numbers to 4.0.0-beta.293 -- Add upgrade guide link to upgrade.blade.php -- Improve upgrade.blade.php with clearer instructions and formatting -- Update version numbers to 4.0.0-beta.294 -- Add Lightspeed.run as a sponsor -- Update Dockerfile to install vim - -## [4.0.0-beta.288] - 2024-05-28 - -### 🐛 Bug Fixes - -- Do not allow service storage mount point modifications -- Volume adding - -### ⚙️ Miscellaneous Tasks - -- Update Sentry release version to 4.0.0-beta.288 - -## [4.0.0-beta.287] - 2024-05-27 - -### 🚀 Features - -- Handle incomplete expired subscriptions in Stripe webhook -- Add more persistent storage types - -### 🐛 Bug Fixes - -- Force load services from cdn on reload list - -### ⚙️ Miscellaneous Tasks - -- Update Sentry release version to 4.0.0-beta.287 -- Add Thompson Edolo as a sponsor -- Add null checks for team in Stripe webhook - -## [4.0.0-beta.286] - 2024-05-27 - -### 🚀 Features - -- If the time seems too long it remains at 0s -- Improve Docker Engine start logic in ServerStatusJob -- If proxy stopped manually, it won't start back again -- Exclude_from_hc magic -- Gitea manual webhooks -- Add container logs in case the container does not start healthy - -### 🐛 Bug Fixes - -- Wrong time during a failed deployment -- Removal of the failed deployment condition, addition of since started instead of finished time -- Use local versions + service templates and query them every 10 minutes -- Check proxy functionality before removing unnecessary coolify.yaml file and checking Docker Engine -- Show first 20 users only in admin view -- Add subpath for services -- Ghost subdir -- Do not pull templates in dev -- Templates -- Update error message for invalid token to mention invalid signature -- Disable containerStopped job for now -- Disable unreachable/revived notifications for now -- JSON_UNESCAPED_UNICODE -- Add wget to nixpacks builds -- Pre and post deployment commands -- Bitbucket commits link -- Better way to add curl/wget to nixpacks -- Root team able to download backups -- Build server should not have a proxy -- Improve build server functionalities -- Sentry issue -- Sentry -- Sentry error + livewire downgrade -- Sentry -- Sentry -- Sentry error -- Sentry - -### 🚜 Refactor - -- Update edit-domain form in project service view -- Add Huly services to compose file -- Remove redundant heading in backup settings page -- Add isBuildServer method to Server model -- Update docker network creation in ApplicationDeploymentJob - -### ⚙️ Miscellaneous Tasks - -- Change pre and post deployment command length in applications table -- Refactor container name logic in GetContainersStatus.php and ForcePasswordReset.php -- Remove unnecessary content from Docker Compose file - -## [4.0.0-beta.285] - 2024-05-21 - -### 🚀 Features - -- Add SerpAPI as a Github Sponsor -- Admin view for deleting users -- Scheduled task failed notification - -### 🐛 Bug Fixes - -- Optimize new resource creation -- Show it docker compose has syntax errors - -### 💼 Other - -- Responsive here and there - -## [4.0.0-beta.284] - 2024-05-19 - -### 🚀 Features - -- Add hc logs to healthchecks - -### ◀️ Revert - -- Hc return code check - -## [4.0.0-beta.283] - 2024-05-17 - -### 🚀 Features - -- Update healthcheck test in StartMongodb action -- Add pull_request_id filter to get_last_successful_deployment method in Application model - -### 🐛 Bug Fixes - -- PR deployments have good predefined envs - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.283 - -## [4.0.0-beta.281] - 2024-05-17 - -### 🚀 Features - -- Shows the latest deployment commit + message on status -- New manual update process + remove next_channel -- Add lastDeploymentInfo and lastDeploymentLink props to breadcrumbs and status components -- Sort envs alphabetically and creation date -- Improve sorting of environment variables in the All component - -### 🐛 Bug Fixes - -- Hc from localhost to 127.0.0.1 -- Use rc in hc -- Telegram group chat notifications - -## [4.0.0-beta.280] - 2024-05-16 - -### 🐛 Bug Fixes - -- Commit message length - -## [4.0.0-beta.279] - 2024-05-16 - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.279 -- Limit commit message length to 50 characters in ApplicationDeploymentJob - -## [4.0.0-beta.278] - 2024-05-16 - -### 🚀 Features - -- Adding new COOLIFY_ variables -- Save commit message and better view on deployments -- Toggle label escaping mechanism - -### 🐛 Bug Fixes - -- Use commit hash on webhooks - -### ⚙️ Miscellaneous Tasks - -- Refactor Service.php to handle missing admin user in extraFields() method -- Update twenty CRM template with environment variables and dependencies -- Refactor applications.php to remove unused imports and improve code readability -- Refactor deployment index.blade.php for improved readability and rollback handling -- Refactor GitHub app selection UI in project creation form -- Update ServerLimitCheckJob.php to handle missing serverLimit value -- Remove unnecessary code for saving commit message -- Update DOCKER_VERSION to 26.0 in install.sh script -- Update Docker and Docker Compose versions in Dockerfiles - -## [4.0.0-beta.277] - 2024-05-10 - -### 🚀 Features - -- Add AdminRemoveUser command to remove users from the database - -### 🐛 Bug Fixes - -- Color for resource operation server and project name -- Only show realtime error on non-cloud instances -- Only allow push and mr gitlab events -- Improve scheduled task adding/removing -- Docker compose dependencies for pr previews -- Properly populating dependencies - -### 💼 Other - -- Fix a few boxes here and there - -### ⚙️ Miscellaneous Tasks - -- Update version numbers to 4.0.0-beta.278 -- Update hover behavior and cursor style in scheduled task executions view -- Refactor scheduled task view to improve code readability and maintainability -- Skip scheduled tasks if application or service is not running -- Remove debug logging statements in Kernel.php -- Handle invalid cron strings in Kernel.php - -## [4.0.0-beta.275] - 2024-05-06 - -### 🚀 Features - -- Add container name to network aliases in ApplicationDeploymentJob -- Add lazy loading for images in General.php and improve Docker Compose file handling in Application.php -- Experimental sentinel -- Start Sentinel on servers. -- Pull new sentinel image and restart container -- Init metrics - -### 🐛 Bug Fixes - -- Typo in tags.blade.php -- Install.sh error -- Env file -- Comment out internal notification in email_verify method -- Confirmation for custom labels -- Change permissions on newly created dirs - -### 💼 Other - -- Fix tag view - -### 🚜 Refactor - -- Add SCHEDULER environment variable to StartSentinel.php - -### ⚙️ Miscellaneous Tasks - -- Dark mode should be the default -- Improve menu item styling and spacing in service configuration and index views -- Improve menu item styling and spacing in service configuration and index views -- Improve menu item styling and spacing in project index and show views -- Remove docker compose versions -- Add Listmonk service template and logo -- Refactor GetContainersStatus.php for improved readability and maintainability -- Refactor ApplicationDeploymentJob.php for improved readability and maintainability -- Add metrics and logs directories to installation script -- Update sentinel version to 0.0.2 in versions.json -- Update permissions on metrics and logs directories -- Comment out server sentinel check in ServerStatusJob - -## [4.0.0-beta.273] - 2024-05-03 - -### 🐛 Bug Fixes - -- Formbricks image origin -- Add port even if traefik is used - -### ⚙️ Miscellaneous Tasks - -- Update version to 4.0.0-beta.275 -- Update DNS server validation helper text - -## [4.0.0-beta.267] - 2024-04-26 - -### 🚀 Features - -- Initial datalist -- Update service contribution docs URL -- The final pricing plan, pay-as-you-go - -### 🐛 Bug Fixes - -- Move s3 storages to separate view -- Mongo db backup -- Backups -- Autoupdate -- Respect start period and chekc interval for hc -- Parse HEALTHCHECK from dockerfile -- Make s3 name and endpoint required -- Able to update source path for predefined volumes -- Get logs with non-root user -- Mongo 4.0 db backup - -### 💼 Other - -- Update resource operations view - -### ◀️ Revert - -- Variable parsing - -## [4.0.0-beta.266] - 2024-04-24 - -### 🐛 Bug Fixes - -- Refresh public ips on start - -## [4.0.0-beta.259] - 2024-04-17 - -### 🚀 Features - -- Literal env variables -- Lazy load stuffs + tell user if compose based deployments have missing envs -- Can edit file/dir volumes from ui in compose based apps -- Upgrade Appwrite service template to 1.5 -- Upgrade Appwrite service template to 1.5 -- Add db name to backup notifications - -### 🐛 Bug Fixes - -- Helper image only pulled if required, not every 10 mins -- Make sure that confs when checking if it is changed sorted -- Respect .env file (for default values) -- Remove temporary cloudflared config -- Remove lazy loading until bug figured out -- Rollback feature -- Base64 encode .env -- $ in labels escaped -- .env saved to deployment server, not to build server -- Do no able to delete gh app without deleting resources -- 500 error on edge case -- Able to select server when creating new destination -- N8n template - -### 💼 Other - -- Non-root user for remote servers -- Non-root - -## [4.0.0-beta.258] - 2024-04-12 - -### 🚀 Features - -- Dynamic mux time - -### 🐛 Bug Fixes - -- Check each required binaries one-by-one - -## [4.0.0-beta.256] - 2024-04-12 - -### 🚀 Features - -- Upload large backups -- Edit domains easier for compose -- Able to delete configuration from server -- Configuration checker for all resources -- Allow tab in textarea - -### 🐛 Bug Fixes - -- Service config hash update -- Redeploy if image not found in restart only mode - -### 💼 Other - -- New pricing -- Fix allowTab logic -- Use 2 space instead of tab - -## [4.0.0-beta.252] - 2024-04-09 - -### 🚀 Features - -- Add amazon linux 2023 - -### 🐛 Bug Fixes - -- Git submodule update -- Unintended left padding on sidebar -- Hashed random delimeter in ssh commands + make sure to remove the delimeter from the command - -## [4.0.0-beta.250] - 2024-04-05 - -### 🚀 Features - -- *(application)* Update submodules after git checkout - -## [4.0.0-beta.249] - 2024-04-03 - -### 🚀 Features - -- Able to make rsa/ed ssh keys - -### 🐛 Bug Fixes - -- Warning if you use multiple domains for a service -- New github app creation -- Always rebuild Dockerfile / dockerimage buildpacks -- Do not rebuild dockerfile based apps twice -- Make sure if envs are changed, rebuild is needed -- Members cannot manage subscriptions -- IsMember -- Storage layout -- How to update docker-compose, environment variables and fqdns - -### 💼 Other - -- Light buttons -- Multiple server view - -## [4.0.0-beta.242] - 2024-03-25 - -### 🚀 Features - -- Change page width -- Watch paths - -### 🐛 Bug Fixes - -- Compose env has SERVICE, but not defined for Coolify -- Public service database -- Make sure service db proxy restarted -- Restart service db proxies -- Two factor -- Ui for tags -- Update resources view -- Realtime connection check -- Multline env in dev mode -- Scheduled backup for other service databases (supabase) -- PR deployments should not be distributed to 2 servers -- Name/from address required for resend -- Autoupdater -- Async service loads -- Disabled inputs are not trucated -- Duplicated generated fqdns are now working -- Uis -- Ui for cftunnels -- Search services -- Trial users subscription page -- Async public key loading -- Unfunctional server should see resources - -### 💼 Other - -- Run cleanup every day -- Fix -- Fix log outputs -- Automatic cloudflare tunnels -- Backup executions - -## [4.0.0-beta.241] - 2024-03-20 - -### 🚀 Features - -- Able to run scheduler/horizon programatically - -### 🐛 Bug Fixes - -- Volumes for prs -- Shared env variable parsing - -### 💼 Other - -- Redesign -- Redesign - -## [4.0.0-beta.240] - 2024-03-18 - -### 🐛 Bug Fixes - -- Empty get logs number of lines -- Only escape envs after v239+ -- 0 in env value -- Consistent container name -- Custom ip address should turn off rolling update -- Multiline input -- Raw compose deployment -- Dashboard view if no project found - -## [4.0.0-beta.239] - 2024-03-14 - -### 🐛 Bug Fixes - -- Duplicate dockerfile -- Multiline env variables -- Server stopped, service page not reachable - -## [4.0.0-beta.237] - 2024-03-14 - -### 🚀 Features - -- Domains api endpoint -- Resources api endpoint -- Team api endpoint -- Add deployment details to deploy endpoint -- Add deployments api -- Experimental caddy support -- Dynamic configuration for caddy -- Reset password -- Show resources on source page - -### 🐛 Bug Fixes - -- Deploy api messages -- Fqdn null in case docker compose bp -- Reload caddy issue -- /realtime endpoint -- Proxy switch -- Service ports for services + caddy -- Failed deployments should send failed email/notification -- Consider custom healthchecks in dockerfile -- Create initial files async -- Docker compose validation - -## [4.0.0-beta.235] - 2024-03-05 - -### 🐛 Bug Fixes - -- Should note delete personal teams -- Make sure to show some buttons -- Sort repositories by name - -## [4.0.0-beta.224] - 2024-02-23 - -### 🚀 Features - -- Custom server limit -- Delay container/server jobs -- Add static ipv4 ipv6 support -- Server disabled by overflow -- Preview deployment logs -- Collect webhooks during maintenance -- Logs and execute commands with several servers - -### 🐛 Bug Fixes - -- Subscription / plan switch, etc -- Firefly service -- Force enable/disable server in case ultimate package quantity decreases -- Server disabled -- Custom dockerfile location always checked -- Import to mysql and mariadb -- Resource tab not loading if server is not reachable -- Load unmanaged async -- Do not show n/a networsk -- Service container status updates -- Public prs should not be commented -- Pull request deployments + build servers -- Env value generation -- Sentry error -- Service status updated - -### 💼 Other - -- Change + icon to hamburger. - -## [4.0.0-beta.222] - 2024-02-22 - -### 🚀 Features - -- Able to add dynamic configurations from proxy dashboard - -### 🐛 Bug Fixes - -- Connections being stuck and not processed until proxy restarts -- Use latest image if nothing is specified -- No coolify.yaml found -- Server validation -- Statuses -- Unknown image of service until it is uploaded - -## [4.0.0-beta.220] - 2024-02-19 - -### 🚀 Features - -- Save github app permission locally -- Minversion for services - -### 🐛 Bug Fixes - -- Add openbsd ssh server check -- Resources -- Empty build variables -- *(server)* Revalidate server button not showing in server's page -- Fluent bit ident level -- Submodule cloning -- Database status -- Permission change updates from webhook -- Server validation - -### 💼 Other - -- Updates - -## [4.0.0-beta.213] - 2024-02-12 - -### 🚀 Features - -- Magic for traefik redirectregex in services -- Revalidate server -- Disable gzip compression on service applications - -### 🐛 Bug Fixes - -- Cleanup scheduled tasks -- Padding left on input boxes -- Use ls / command instead ls -- Do not add the same server twice -- Only show redeployment required if status is not exited - -## [4.0.0-beta.212] - 2024-02-08 - -### 🚀 Features - -- Cleanup queue - -### 🐛 Bug Fixes - -- New menu on navbar -- Make sure resources are deleted in async mode -- Go to prod env from dashboard if there is no other envs defined -- User proper image_tag, if set -- New menu ui -- Lock logdrain configuration when one of them are enabled -- Add docker compose check during server validation -- Get service stack as uuid, not name -- Menu -- Flex wrap deployment previews -- Boolean docker options -- Only add 'networks' key if 'network_mode' is absent - -## [4.0.0-beta.206] - 2024-02-05 - -### 🚀 Features - -- Clone to env -- Multi deployments - -### 🐛 Bug Fixes - -- Wrap tags and avoid horizontal overflow -- Stripe webhooks -- Feedback from self-hosted envs to discord - -### 💼 Other - -- Specific about newrelic logdrains - -## [4.0.0-beta.201] - 2024-01-29 - -### 🚀 Features - -- Added manual webhook support for bitbucket -- Add initial support for custom docker run commands -- Cleanup unreachable servers -- Tags and tag deploy webhooks - -### 🐛 Bug Fixes - -- Bitbucket manual deployments -- Webhooks for multiple apps -- Unhealthy deployments should be failed -- Add env variables for wordpress template without database -- Service deletion function -- Service deletion fix -- Dns validation + duplicated fqdns -- Validate server navbar upated -- Regenerate labels on application clone -- Service deletion -- Not able to use other shared envs -- Sentry fix -- Sentry -- Sentry error -- Sentry -- Sentry error -- Create dynamic directory -- Migrate to new modal -- Duplicate domain check -- Tags - -### 💼 Other - -- New modal component - -## [4.0.0-beta.188] - 2024-01-11 - -### 🚀 Features - -- Search between resources -- Move resources between projects / environments -- Clone any resource -- Shared environments -- Concurrent builds / server -- Able to deploy multiple resources with webhook -- Add PR comments -- Dashboard live deployment view - -### 🐛 Bug Fixes - -- Preview deployments with nixpacks -- Cleanup docker stuffs before upgrading -- Service deletion command -- Cpuset limits was determined in a way that apps only used 1 CPU max, ehh, sorry. -- Service stack view -- Change proxy view -- Checkbox click -- Git pull command for deploy key based previews -- Server status job -- Service deletion bug! -- Links -- Redis custom conf -- Sentry error -- Restrict concurrent deployments per server -- Queue -- Change env variable length - -### 💼 Other - -- Send notification email if payment - -### 🚜 Refactor - -- Compose file and install script - -## [4.0.0-beta.186] - 2024-01-11 - -### 🚀 Features - -- Import backups - -### 🐛 Bug Fixes - -- Do not include thegameplan.json into build image -- Submit error on postgresql -- Email verification / forgot password -- Escape build envs properly for nixpacks + docker build -- Undead endpoint -- Upload limit on ui -- Save cmd output propely (merge) -- Load profile on remote commands -- Load profile and set envs on remote cmd -- Restart should not update config hash - -## [4.0.0-beta.184] - 2024-01-09 - -### 🐛 Bug Fixes - -- Healthy status -- Show framework based notification in build logs -- Traefik labels -- Use ip for sslip in dev if remote server is used -- Service labels without ports (unknown ports) -- Sort and rename (unique part) of labels -- Settings menu -- Remove traefik debug in dev mode -- Php pgsql to 8.2 -- Static buildpack should set port 80 -- Update navbar on build_pack change - -## [4.0.0-beta.183] - 2024-01-06 - -### 🚀 Features - -- Add www-non-www redirects to traefik - -### 🐛 Bug Fixes - -- Database env variables - -## [4.0.0-beta.182] - 2024-01-04 - -### 🐛 Bug Fixes - -- File storage save - -## [4.0.0-beta.181] - 2024-01-03 - -### 🐛 Bug Fixes - -- Nixpacks buildpack - -## [4.0.0-beta.180] - 2024-01-03 - -### 🐛 Bug Fixes - -- Nixpacks cache -- Only add restart policy if its empty (compose) - -## [4.0.0-beta.179] - 2024-01-02 - -### 🐛 Bug Fixes - -- Set deployment failed if new container is not healthy - -## [4.0.0-beta.177] - 2024-01-02 - -### 🚀 Features - -- Raw docker compose deployments - -### 🐛 Bug Fixes - -- Duplicate compose variable - -## [4.0.0-beta.176] - 2023-12-31 - -### 🐛 Bug Fixes - -- Horizon - -## [4.0.0-beta.175] - 2023-12-30 - -### 🚀 Features - -- Add environment description + able to change name - -### 🐛 Bug Fixes - -- Sub -- Wrong env variable parsing -- Deploy key + docker compose - -## [4.0.0-beta.174] - 2023-12-27 - -### 🐛 Bug Fixes - -- Restore falsely deleted coolify-db-backup - -## [4.0.0-beta.173] - 2023-12-27 - -### 🐛 Bug Fixes - -- Cpu limit to float from int -- Add source commit to final envs -- Routing, switch back to old one -- Deploy instead of restart in case swarm is used -- Button title - -## [4.0.0-beta.163] - 2023-12-15 - -### 🚀 Features - -- Custom docker compose commands - -### 🐛 Bug Fixes - -- Domains for compose bp -- No action in webhooks -- Add debug output to gitlab webhooks -- Do not push dockerimage -- Add alpha to swarm -- Server not found -- Do not autovalidate server on mount -- Server update schedule -- Swarm support ui -- Server ready -- Get swarm service logs -- Docker compose apps env rewritten -- Storage error on dbs -- Why?! -- Stay tuned - -### 💼 Other - -- Swarm -- Swarm - -## [4.0.0-beta.155] - 2023-12-11 - -### 🚀 Features - -- Autoupdate env during seed -- Disable autoupdate -- Randomly sleep between executions -- Pull latest images for services - -### 🐛 Bug Fixes - -- Do not send telegram noti on intent payment failed -- Database ui is realtime based -- Live mode for github webhooks -- Ui -- Realtime connection popup could be disabled -- Realtime check -- Add new destination -- Proxy logs -- Db status check -- Pusher host -- Add ipv6 -- Realtime connection?! -- Websocket -- Better handling of errors with install script -- Install script parse version -- Only allow to modify in .env file if AUTOUPDATE is set -- Is autoupdate not null -- Run init command after production seeder -- Init -- Comma in traefik custom labels -- Ignore if dynamic config could not be set -- Service env variable ovewritten if it has a default value -- Labelling -- Non-ascii chars in labels -- Labels -- Init script echos -- Update Coolify script -- Null notify -- Check queued deployments as well -- Copy invitation -- Password reset / invitation link requests -- Add catch all route -- Revert random container job delay -- Backup executions view -- Only check server status in container status job -- Improve server status check times -- Handle other types of generated values -- Server checking status -- Ui for adding new destination -- Reset domains on compose file change - -### 💼 Other - -- Fix for comma in labels -- Add image name to service stack + better options visibility - -### 🚜 Refactor - -- Service logs are now on one page -- Application status changed realtime -- Custom labels -- Clone project - -## [4.0.0-beta.154] - 2023-12-07 - -### 🚀 Features - -- Execute command in container - -### 🐛 Bug Fixes - -- Container selection -- Service navbar using new realtime events -- Do not create duplicated networks -- Live event -- Service start + event -- Service deletion job -- Double ws connection -- Boarding view - -### 💼 Other - -- Env vars -- Migrate to livewire 3 - -## [4.0.0-beta.124] - 2023-11-13 - -### 🚀 Features - -- Log drain (wip) -- Enable/disable log drain by service -- Log drainer container check -- Add docker engine support install script to rhel based systems -- Save timestamp configuration for logs -- Custom log drain endpoints -- Auto-restart tcp proxies for databases - -### 🐛 Bug Fixes - -- *(fider template)* Use the correct docs url -- Fqdn for minio -- Generate service fields -- Mariadb backups -- When to pull image -- Do not allow to enter local ip addresses -- Reset password -- Only report nonruntime errors -- Handle different label formats in services -- Server adding process -- Show defined resources in server tab, so you will know what you need to delete before you can delete the server. -- Lots of regarding git + docker compose deployments -- Pull request build variables -- Double default password length -- Do not remove deployment in case compose based failed -- No container servers -- Sentry issue -- Dockercompose save ./ volumes under /data/coolify -- Server view for link() -- Default value do not overwrite existing env value -- Use official install script with rancher (one will work for sure) -- Add cf tunnel to boarding server view -- Prevent autorefresh of proxy status -- Missing docker image thing -- Add hc for soketi -- Deploy the right compose file -- Bind volumes for compose bp -- Use hc port 80 in case of static build -- Switching to static build - -### 💼 Other - -- New deployment jobs -- Compose based apps -- Swarm -- Swarm -- Swarm -- Swarm -- Disable trial -- Meilisearch -- Broadcast -- 🌮 - -### 🚜 Refactor - -- Env variable generator - -### ◀️ Revert - -- Wip - -## [4.0.0-beta.109] - 2023-11-06 - -### 🚀 Features - -- Deployment logs fullscreen -- Service database backups -- Make service databases public - -### 🐛 Bug Fixes - -- Missing environment variables prevewi on service -- Invoice.paid should sleep for 5 seconds -- Local dev repo -- Deployments ui -- Dockerfile build pack fix -- Set labels on generate domain -- Network service parse -- Notification url in containerstatusjob -- Gh webhook response 200 to installation_repositories -- Delete destination -- No id found -- Missing $mailMessage -- Set default from/sender names -- No environments -- Telegram text -- Private key not found error -- UI -- Resourcesdelete command -- Port number should be int -- Separate delete with validation of server -- Add nixpacks info -- Remove filter -- Container logs are now followable in full-screen and sorted by timestamp -- Ui for labels -- Ui -- Deletions -- Build_image not found -- Github source view -- Github source view -- Dockercleanupjob should be released back -- Ui -- Local ip address -- Revert workdir to basedir -- Container status jobs for old pr deployments -- Service updates - -## [4.0.0-beta.99] - 2023-10-24 - -### 🚀 Features - -- Improve deployment time by a lot - -### 🐛 Bug Fixes - -- Space in build args -- Lock SERVICE_FQDN envs -- If user is invited, that means its email is verified -- Force password reset on invited accounts -- Add ssh options to git ls-remote -- Git ls-remote -- Remove coolify labels from ui - -### 💼 Other - -- Fix subs - -## [4.0.0-beta.97] - 2023-10-20 - -### 🚀 Features - -- Standalone mongodb -- Cloning project -- Api tokens + deploy webhook -- Start all kinds of things -- Simple search functionality -- Mysql, mariadb -- Lock environment variables -- Download local backups - -### 🐛 Bug Fixes - -- Service docs links -- Add PGUSER to prevent HC warning -- Preselect s3 storage if available -- Port exposes change, shoud regenerate label -- Boarding -- Clone to with the same environment name -- Cleanup stucked resources on start -- Do not allow to delete env if a resource is defined -- Service template generator + appwrite -- Mongodb backup -- Make sure coolfiy network exists on install -- Syncbunny command -- Encrypt mongodb password -- Mongodb healtcheck command -- Rate limit for api + add mariadb + mysql -- Server settings guarded - -### 💼 Other - -- Generate services -- Mongodb backup -- Mongodb backup -- Updates - -## [4.0.0-beta.93] - 2023-10-18 - -### 🚀 Features - -- Able to customize docker labels on applications -- Show if config is not applied - -### 🐛 Bug Fixes - -- Setup:dev script & contribution guide -- Do not show configuration changed if config_hash is null -- Add config_hash if its null (old deployments) -- Label generation -- Labels -- Email channel no recepients -- Limit horizon processes to 2 by default -- Add custom port as ssh option to deploy_key based commands -- Remove custom port from git repo url -- ContainerStatus job - -### 💼 Other - -- PAT by team - -## [4.0.0-beta.92] - 2023-10-17 - -### 🐛 Bug Fixes - -- Proxy start process - -## [4.0.0-beta.91] - 2023-10-17 - -### 🐛 Bug Fixes - -- Always start proxy if not NONE is selected - -### 💼 Other - -- Add helper to service domains - -## [4.0.0-beta.90] - 2023-10-17 - -### 🐛 Bug Fixes - -- Only include config.json if its exists and a file - -### 💼 Other - -- Wordpress - -## [4.0.0-beta.89] - 2023-10-17 - -### 🐛 Bug Fixes - -- Noindex meta tag -- Show docker build logs - -## [4.0.0-beta.88] - 2023-10-17 - -### 🚀 Features - -- Use docker login credentials from server - -## [4.0.0-beta.87] - 2023-10-17 - -### 🐛 Bug Fixes - -- Service status check is a bit better -- Generate fqdn if you deleted a service app, but it requires fqdn -- Cancel any deployments + queue next -- Add internal domain names during build process - -## [4.0.0-beta.86] - 2023-10-15 - -### 🐛 Bug Fixes - -- Build image before starting dockerfile buildpacks - -## [4.0.0-beta.85] - 2023-10-14 - -### 🐛 Bug Fixes - -- Redis URL generated - -## [4.0.0-beta.83] - 2023-10-13 - -### 🐛 Bug Fixes - -- Docker hub URL - -## [4.0.0-beta.70] - 2023-10-09 - -### 🚀 Features - -- Add email verification for cloud -- Able to deploy docker images -- Add dockerfile location -- Proxy logs on the ui -- Add custom redis conf - -### 🐛 Bug Fixes - -- Server validation process -- Fqdn could be null -- Small -- Server unreachable count -- Do not reset unreachable count -- Contact docs -- Check connection -- Server saving -- No env goto envs from dashboard -- Goto -- Tcp proxy for dbs -- Database backups -- Only send email if transactional email set -- Backupfailed notification is forced -- Use port exposed for reverse proxy -- Contact link -- Use only ip addresses for servers -- Deleted team and it is the current one -- Add new team button -- Transactional email link -- Dashboard goto link -- Only require registry image in case of dockerimage bp -- Instant save build pack change -- Public git -- Cannot remove localhost -- Check localhost connection -- Send unreachable/revived notifications -- Boarding + verification -- Make sure proxy wont start in NONE mode -- Service check status 10 sec -- IsCloud in production seeder -- Make sure to use IP address -- Dockerfile location feature -- Server ip could be hostname in self-hosted -- Urls should be password fields -- No backup for redis -- Show database logs in case of its not healthy and running -- Proxy check for ports, do not kill anything listening on port 80/443 -- Traefik dashboard ip -- Db labels -- Docker cleanup jobs -- Timeout for instant remote processes -- Dev containerjobs -- Backup database one-by-one. -- Turn off static deployment if you switch buildpacks - -### 💼 Other - -- Dockerimage -- Updated dashboard -- Fix -- Fix -- Coolify proxy access logs exposed in dev -- Able to select environment on new resource -- Delete server -- Redis - -## [4.0.0-beta.58] - 2023-10-02 - -### 🚀 Features - -- Reset root password -- Attach Coolify defined networks to services -- Delete resource command -- Multiselect removable resources -- Disable service, required version -- Basedir / monorepo initial support -- Init version of any git deployment -- Deploy private repo with ssh key - -### 🐛 Bug Fixes - -- If waitlist is disabled, redirect to register -- Add destination to new services -- Predefined content for files -- Move /data to ./_data in dev -- UI -- Show all storages in one place for services -- Ui -- Add _data to vite ignore -- Only use _ in volume names for services -- Volume names in services -- Volume names -- Service logs visible if the whole service stack is not running -- Ui -- Compose magic -- Compose parser updated -- Dev compose files -- Traefik labels for multiport deployments -- Visible version number -- Remove SERVICE_ from deployable compose -- Delete event to deleting -- Move dev data to volumes to prevent permission issues -- Traefik labelling in case of several http and https domain added -- PR deployments use the first fqdn as base -- Email notifications subscription fixed -- Services - do not remove unnecessary things for now -- Decrease max horizon processes to get lower memory usage -- Test emails only available for user owned smtp/resend -- Ui for self-hosted email settings -- Set smtp notifications on by default -- Select branch on other git -- Private repository -- Contribution guide -- Public repository names -- *(create)* Flex wrap on server & network selection -- Better unreachable/revived server statuses -- Able to set base dir for Dockerfile build pack - -### 💼 Other - -- Uptime kume hc updated -- Switch back to /data (volume errors) -- Notifications -- Add shared email option to everyone - -## [4.0.0-beta.57] - 2023-10-02 - -### 🚀 Features - -- Container logs - -### 🐛 Bug Fixes - -- Always pull helper image in dev -- Only show last 1000 lines -- Service status - -## [4.0.0-beta.47] - 2023-09-28 - -### 🐛 Bug Fixes - -- Next helper image -- Service templates -- Sync:bunny -- Update process if server has been renamed -- Reporting handler -- Localhost privatekey update -- Remove private key in case you removed a github app -- Only show manually added private keys on server view -- Show source on all type of applications -- Docker cleanup should be a job by server -- File/dir based volumes are now read from the server -- Respect server fqdn -- If public repository does not have a main branch -- Preselect branc on private repos -- Deploykey branch -- Backups are now working again -- Not found base_branch in git webhooks -- Coolify db backup -- Preview deployments name, status etc -- Services should have destination as well -- Dockerfile expose is not overwritten -- If app settings is not saved to db -- Do not show subscription cancelled noti -- Show real volume names -- Only parse expose in dockerfiles if ports_exposes is empty -- Add uuid to volume names -- New volumes for services should have - instead of _ - -### 💼 Other - -- Fix previews to preview - -## [4.0.0-beta.46] - 2023-09-28 - -### 🐛 Bug Fixes - -- Containerstatusjob -- Aaaaaaaaaaaaaaaaa -- Services view -- Services -- Manually create network for services -- Disable early updates -- Sslip for localhost -- ContainerStatusJob -- Cannot delete env with available services -- Sync command -- Install script drops an error -- Prevent sync version (it needs an option) -- Instance fqdn setting -- Sentry 4510197209 -- Sentry 4504136641 -- Sentry 4502634789 - -## [4.0.0-beta.45] - 2023-09-24 - -### 🚀 Features - -- Services -- Image tag for services - -### 🐛 Bug Fixes - -- Applications with port mappins do a normal update (not rolling update) -- Put back build pack chooser -- Proxy configuration + starter -- Show real storage name on services -- New service template layout - -### 💼 Other - -- Fixed z-index for version link. -- Add source button -- Fixed z-index for magicbar -- A bit better error -- More visible feedback button -- Update help modal -- Help -- Marketing emails - -## [4.0.0-beta.28] - 2023-09-08 - -### 🚀 Features - -- Telegram topics separation -- Developer view for env variables -- Cache team settings -- Generate public key from private keys -- Able to invite more people at once -- Trial -- Dynamic trial period -- Ssh-agent instead of filesystem based ssh keys -- New container status checks -- Generate ssh key -- Sentry add email for better support -- Healthcheck for apps -- Add cloudflare tunnel support - -### 🐛 Bug Fixes - -- Db backup job -- Sentry 4459819517 -- Sentry 4451028626 -- Ui -- Retry notifications -- Instance email settings -- Ui -- Test email on for admins or custom smtp -- Coolify already exists should not throw error -- Delete database related things when delete database -- Remove -q from docker compose -- Errors in views -- Only send internal notifcations to enabled channels -- Recovery code -- Email sending error -- Sentry 4469575117 -- Old docker version error -- Errors -- Proxy check, reduce jobs, etc -- Queue after commit -- Remove nixpkgarchive -- Remove nixpkgarchive from ui -- Webhooks should not run if server is not functional -- Server is functional check -- Confirm email before sending -- Help should send cc on email -- Sub type -- Show help modal everywhere -- Forgot password -- Disable dockerfile based healtcheck for now -- Add timeout for ssh commands -- Prevent weird ui bug for validateServer -- Lowercase email in forgot password -- Lower case email on waitlist -- Encrypt jobs -- ProcessWithEnv()->run -- Plus boarding step about Coolify -- SaveConfigurationSync -- Help uri -- Sub for root -- Redirect on server not found -- Ip check -- Uniqueips -- Simply reply to help messages -- Help -- Rate limit -- Collect billing address -- Invitation -- Smtp view -- Ssh-agent revert -- Restarting container state on ui -- Generate new key -- Missing upgrade js -- Team error -- 4.0.0-beta.37 -- Localhost -- Proxy start (if not proxy defined, use Traefik) -- Do not remove localhost in boarding -- Allow non ip address (DNS) -- InstallDocker id not found -- Boarding -- Errors -- Proxy container status -- Proxy configuration saving -- Convert startProxy to action -- Stop/start UI on apps and dbs -- Improve localhost boarding process -- Try to use old docker-compose -- Boarding again -- Send internal notifications of email errors -- Add github app change on new app view -- Delete environment variables on app/db delete -- Save proxy configuration -- Add proxy to network with periodic check -- Proxy connections -- Delete persistent storages on resource deletion -- Prevent overwrite already existing env variables in services -- Mappings -- Sentry issue 4478125289 -- Make sure proxy path created -- StartProxy -- Server validation with cf tunnels -- Only show traefik dashboard if its available -- Services -- Database schema -- Report livewire errors -- Links with path -- Add traefik labels no matter if traefik is selected or not -- Add expose port for containers -- Also check docker socks permission on validation - -### 💼 Other - -- User should know that the public key -- Services are not availble yet -- Show registered users on waitlist page -- Nixpacksarchive -- Add Plausible analytics -- Global env variables -- Fix -- Trial emails -- Server check instead of app check -- Show trial instead of sub -- Server lost connection -- Services -- Services -- Services -- Ui for services -- Services -- Services -- Services -- Fixes -- Fix typo - -## [4.0.0-beta.27] - 2023-09-08 - -### 🐛 Bug Fixes - -- Bug - -## [4.0.0-beta.26] - 2023-09-08 - -### 🚀 Features - -- Public database - -## [4.0.0-beta.25] - 2023-09-07 - -### 🐛 Bug Fixes - -- SaveModel email settings - -## [4.0.0-beta.24] - 2023-09-06 - -### 🚀 Features - -- Send request in cloud -- Add discord notifications - -### 🐛 Bug Fixes - -- Form address -- Show hosted email service, just disable for non pro subs -- Add navbar for source + keys -- Add docker network to build process -- Overlapping apps -- Do not show system wide git on cloud -- Lowercase image names -- Typo - -### 💼 Other - -- Backup existing database - -## [4.0.0-beta.23] - 2023-09-01 - -### 🐛 Bug Fixes - -- Sentry bug -- Button loading animation - -## [4.0.0-beta.22] - 2023-09-01 - -### 🚀 Features - -- Add resend as transactional emails - -### 🐛 Bug Fixes - -- DockerCleanupjob -- Validation -- Webhook endpoint in cloud and no system wide gh app -- Subscriptions -- Password confirmation -- Proxy start job -- Dockerimage jobs are not overlapping - -## [4.0.0-beta.21] - 2023-08-27 - -### 🚀 Features - -- Invite by email from waitlist -- Rolling update - -### 🐛 Bug Fixes - -- Limits & server creation page -- Fqdn on apps - -### 💼 Other - -- Boarding - -## [4.0.0-beta.20] - 2023-08-17 - -### 🚀 Features - -- Send internal notification to discord -- Monitor server connection - -### 🐛 Bug Fixes - -- Make coolify-db backups unique dir - -## [4.0.0-beta.19] - 2023-08-15 - -### 🚀 Features - -- Pricing plans ans subs -- Add s3 storages -- Init postgresql database -- Add backup notifications -- Dockerfile build pack -- Cloud -- Force password reset + waitlist - -### 🐛 Bug Fixes - -- Remove buggregator from dev -- Able to change localhost's private key -- Readonly input box -- Notifications -- Licensing -- Subscription link -- Migrate db schema for smtp + discord -- Text field -- Null fqdn notifications -- Remove old modal -- Proxy stop/start ui -- Proxy UI -- Empty description -- Input and textarea -- Postgres_username name to not name, lol -- DatabaseBackupJob.php -- No storage -- Backup now button -- Ui + subscription -- Self-hosted - -### 💼 Other - -- Scheduled backups - -## [4.0.0-beta.18] - 2023-07-14 - -### 🚀 Features - -- Able to control multiplexing -- Add runRemoteCommandSync -- Github repo with deployment key -- Add persistent volumes -- Debuggable executeNow commands -- Add private gh repos -- Delete gh app -- Installation/update github apps -- Auto-deploy -- Deploy key based deployments -- Resource limits -- Long running queue with 1 hour of timeout -- Add arm build to dev -- Disk cleanup threshold by server -- Notify user of disk cleanup init - -### 🐛 Bug Fixes - -- Logo of CCCareers -- Typo -- Ssh -- Nullable name on deploy_keys -- Enviroments -- Remove dd - oops -- Add inprogress activity -- Application view -- Only set status in case the last command block is finished -- Poll activity -- Small typo -- Show activity on load -- Deployment should fail on error -- Tests -- Version -- Status not needed -- No project redirect -- Gh actions -- Set status -- Seeders -- Do not modify localhost -- Deployment_uuid -> type_uuid -- Read env from config, bc of cache -- Private key change view -- New destination -- Do not update next channel all the time -- Cancel deployment button -- Public repo limit shown + branch should be preselected. -- Better status on ui for apps -- Arm coolify version -- Formatting -- Gh actions -- Show github app secrets -- Do not force next version updates -- Debug log button -- Deployment key based works -- Deployment cancel/debug buttons -- Upgrade button -- Changing static build changes port -- Overwrite default nginx configuration -- Do not overlap docker image names -- Oops -- Found image name -- Name length -- Semicolons encoding by traefik -- Base_dir wip & outputs -- Cleanup docker images -- Nginx try_files -- Master is the default, not main -- No ms in rate limit resets -- Loading after button text -- Default value -- Localhost is usable -- Update docker-compose prod -- Cloud/checkoutid/lms -- Type of license code -- More verbose error -- Version lol -- Update prod compose -- Version - -### 💼 Other - -- Extract process handling from async job. -- Extract process handling from async job. -- Extract process handling from async job. -- Extract process handling from async job. -- Extract process handling from async job. -- Extract process handling from async job. -- Extract process handling from async job. -- Persisting data - -## [3.12.28] - 2023-03-16 - -### 🐛 Bug Fixes - -- Revert from dockerhub if ghcr.io does not exists - -## [3.12.27] - 2023-03-07 - -### 🐛 Bug Fixes - -- Show ip address as host in public dbs - -## [3.12.24] - 2023-03-04 - -### 🐛 Bug Fixes - -- Nestjs buildpack - -## [3.12.22] - 2023-03-03 - -### 🚀 Features - -- Add host path to any container - -### 🐛 Bug Fixes - -- Set PACK_VERSION to 0.27.0 -- PublishDirectory -- Host volumes -- Replace . & .. & $PWD with ~ -- Handle log format volumes - -## [3.12.19] - 2023-02-20 - -### 🚀 Features - -- Github raw icon url -- Remove svg support - -### 🐛 Bug Fixes - -- Typos in docs -- Url -- Network in compose files -- Escape new line chars in wp custom configs -- Applications cannot be deleted -- Arm servics -- Base directory not found -- Cannot delete resource when you are not on root team -- Empty port in docker compose - -## [3.12.18] - 2023-01-24 - -### 🐛 Bug Fixes - -- CleanupStuckedContainers -- CleanupStuckedContainers - -## [3.12.16] - 2023-01-20 - -### 🐛 Bug Fixes - -- Stucked containers - -## [3.12.15] - 2023-01-20 - -### 🐛 Bug Fixes - -- Cleanup function -- Cleanup stucked containers -- Deletion + cleanupStuckedContainers - -## [3.12.14] - 2023-01-19 - -### 🐛 Bug Fixes - -- Www redirect - -## [3.12.13] - 2023-01-18 - -### 🐛 Bug Fixes - -- Secrets - -## [3.12.12] - 2023-01-17 - -### 🚀 Features - -- Init h2c (http2/grpc) support -- Http + h2c paralel - -### 🐛 Bug Fixes - -- Build args docker compose -- Grpc - -## [3.12.11] - 2023-01-16 - -### 🐛 Bug Fixes - -- Compose file location -- Docker log sequence -- Delete apps with previews -- Do not cleanup compose applications as unconfigured -- Build env variables with docker compose -- Public gh repo reload compose - -### 💼 Other - -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc - -## [3.12.10] - 2023-01-11 - -### 💼 Other - -- Add missing variables - -## [3.12.9] - 2023-01-11 - -### 🚀 Features - -- Add Openblocks icon -- Adding icon for whoogle -- *(ui)* Add libretranslate service icon -- Handle invite_only plausible analytics - -### 🐛 Bug Fixes - -- Custom gitlab git user -- Add documentation link again -- Remove prefetches -- Doc link -- Temporary disable dns check with dns servers -- Local images for reverting -- Secrets - -## [3.12.8] - 2022-12-27 - -### 🐛 Bug Fixes - -- Parsing secrets -- Read-only permission -- Read-only iam -- $ sign in secrets - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.12.5] - 2022-12-26 - -### 🐛 Bug Fixes - -- Remove unused imports - -### 💼 Other - -- Conditional on environment - -## [3.12.2] - 2022-12-19 - -### 🐛 Bug Fixes - -- Appwrite tmp volume -- Do not replace secret -- Root user for dbs on arm -- Escape secrets -- Escape env vars -- Envs -- Docker buildpack env -- Secrets with newline -- Secrets -- Add default node_env variable -- Add default node_env variable -- Secrets -- Secrets -- Gh actions -- Duplicate env variables -- Cleanupstorage - -### 💼 Other - -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc -- Trpc - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.12.1] - 2022-12-13 - -### 🐛 Bug Fixes - -- Build commands -- Migration file -- Adding missing appwrite volume - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.12.0] - 2022-12-09 - -### 🚀 Features - -- Use registry for building -- Docker registries working -- Custom docker compose file location in repo -- Save doNotTrackData to db -- Add default sentry -- Do not track in settings -- System wide git out of beta -- Custom previewseparator -- Sentry frontend -- Able to host static/php sites on arm -- Save application data before deploying -- SimpleDockerfile deployment -- Able to push image to docker registry -- Revert to remote image -- *(api)* Name label - -### 🐛 Bug Fixes - -- 0 destinations redirect after creation -- Seed -- Sentry dsn update -- Dnt -- Ui -- Only visible with publicrepo -- Migrations -- Prevent webhook errors to be logged -- Login error -- Remove beta from systemwide git -- Git checkout -- Remove sentry before migration -- Webhook previewseparator -- Apache on arm -- Update PR/MRs with new previewSeparator -- Static for arm -- Failed builds should not push images -- Turn off autodeploy for simpledockerfiles -- Security hole -- Rde -- Delete resource on dashboard -- Wrong port in case of docker compose -- Public db icon on dashboard -- Cleanup - -### 💼 Other - -- Pocketbase release - -## [3.11.10] - 2022-11-16 - -### 🚀 Features - -- Only show expose if no proxy conf defined in template -- Custom/private docker registries - -### 🐛 Bug Fixes - -- Local dev api/ws urls -- Wrong template/type -- Gitea icon is svg -- Gh actions -- Gh actions -- Replace $$generate vars -- Webhook traefik -- Exposed ports -- Wrong icons on dashboard -- Escape % in secrets -- Move debug log settings to build logs -- Storage for compose bp + debug on -- Hasura admin secret -- Logs -- Mounts -- Load logs after build failed -- Accept logged and not logged user in /base -- Remote haproxy password/etc -- Remove hardcoded sentry dsn -- Nope in database strings - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Version++ -- Version++ - -## [3.11.9] - 2022-11-15 - -### 🐛 Bug Fixes - -- IsBot issue - -## [3.11.8] - 2022-11-14 - -### 🐛 Bug Fixes - -- Default icon for new services - -## [3.11.1] - 2022-11-08 - -### 🚀 Features - -- Rollback coolify - -### 🐛 Bug Fixes - -- Remove contribution docs -- Umami template -- Compose webhooks fixed -- Variable replacements -- Doc links -- For rollback -- N8n and weblate icon -- Expose ports for services -- Wp + mysql on arm -- Show rollback button loading -- No tags error -- Update on mobile -- Dashboard error -- GetTemplates -- Docker compose persistent volumes -- Application persistent storage things -- Volume names for undefined volume names in compose -- Empty secrets on UI -- Ports for services - -### 💼 Other - -- Secrets on apps -- Fix -- Fixes -- Reload compose loading - -### 🚜 Refactor - -- Code - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Add jda icon for lavalink service -- Version++ - -### ◀️ Revert - -- Revert: revert - -## [3.11.0] - 2022-11-07 - -### 🚀 Features - -- Initial support for specific git commit -- Add default to latest commit and support for gitlab -- Redirect catch-all rule - -### 🐛 Bug Fixes - -- Secret errors -- Service logs -- Heroku bp -- Expose port is readonly on the wrong condition -- Toast -- Traefik proxy q 10s -- App logs view -- Tooltip -- Toast, rde, webhooks -- Pathprefix -- Load public repos -- Webhook simplified -- Remote webhooks -- Previews wbh -- Webhooks -- Websecure redirect -- Wb for previews -- Pr stopps main deployment -- Preview wbh -- Wh catchall for all -- Remove old minio proxies -- Template files -- Compose icon -- Templates -- Confirm restart service -- Template -- Templates -- Templates -- Plausible analytics things -- Appwrite webhook -- Coolify instance proxy -- Migrate template -- Preview webhooks -- Simplify webhooks -- Remove ghost-mariadb from the list -- More simplified webhooks -- Umami + ghost issues - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.10.16] - 2022-10-12 - -### 🐛 Bug Fixes - -- Single container logs and usage with compose - -### 💼 Other - -- New resource label - -## [3.10.15] - 2022-10-12 - -### 🚀 Features - -- Monitoring by container - -### 🐛 Bug Fixes - -- Do not show nope as ip address for dbs -- Add git sha to build args -- Smart search for new services -- Logs for not running containers -- Update docker binaries -- Gh release -- Dev container -- Gitlab auth and compose reload -- Check compose domains in general -- Port required if fqdn is set -- Appwrite v1 missing containers -- Dockerfile -- Pull does not work remotely on huge compose file - -### ⚙️ Miscellaneous Tasks - -- Update staging release - -## [3.10.14] - 2022-10-05 - -### 🚀 Features - -- Docker compose support -- Docker compose -- Docker compose - -### 🐛 Bug Fixes - -- Do not use npx -- Pure docker based development - -### 💼 Other - -- Docker-compose support -- Docker compose -- Remove worker jobs -- One less worker thread - -### 🧪 Testing - -- Remove prisma - -## [3.10.5] - 2022-09-26 - -### 🚀 Features - -- Add migration button to appwrite -- Custom certificate -- Ssl cert on traefik config -- Refresh resource status on dashboard -- Ssl certificate sets custom ssl for applications -- System-wide github apps -- Cleanup unconfigured applications -- Cleanup unconfigured services and databases - -### 🐛 Bug Fixes - -- Ui -- Tooltip -- Dropdown -- Ssl certificate distribution -- Db migration -- Multiplex ssh connections -- Able to search with id -- Not found redirect -- Settings db requests -- Error during saving logs -- Consider base directory in heroku bp -- Basedirectory should be empty if null -- Allow basedirectory for heroku -- Stream logs for heroku bp -- Debug log for bp -- Scp without host verification & cert copy -- Base directory & docker bp -- Laravel php chooser -- Multiplex ssh and ssl copy -- Seed new preview secret types -- Error notification -- Empty preview value -- Error notification -- Seed -- Service logs -- Appwrite function network is not the default -- Logs in docker bp -- Able to delete apps in unconfigured state -- Disable development low disk space -- Only log things to console in dev mode -- Do not get status of more than 10 resources defined by category -- BaseDirectory -- Dashboard statuses -- Default buildImage and baseBuildImage -- Initial deploy status -- Show logs better -- Do not start tcp proxy without main container -- Cleanup stucked tcp proxies -- Default 0 pending invitations -- Handle forked repositories -- Typo -- Pr branches -- Fork pr previews -- Remove unnecessary things -- Meilisearch data dir -- Verify and configure remote docker engines -- Add buildkit features -- Nope if you are not logged in - -### 💼 Other - -- Responsive! -- Fixes -- Fix git icon -- Dropdown as infobox -- Small logs on mobile -- Improvements -- Fix destination view -- Settings view -- More UI improvements -- Fixes -- Fixes -- Fix -- Fixes -- Beta features -- Fix button -- Service fixes -- Fix basedirectory meaning -- Resource button fix -- Main resource search -- Dev logs -- Loading button -- Fix gitlab importer view -- Small fix -- Beta flag -- Hasura console notification -- Fix -- Fix -- Fixes -- Inprogress version of iam -- Fix indicato -- Iam & settings update -- Send 200 for ping and installation wh -- Settings icon - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Version++ -- Version++ -- Version++ -- Version++ -- Version++ - -### ◀️ Revert - -- Show usage everytime - -## [3.10.2] - 2022-09-11 - -### 🚀 Features - -- Add queue reset button -- Previewapplications init -- PreviewApplications finalized -- Fluentbit -- Show remote servers -- *(layout)* Added drawer when user is in mobile -- Re-apply ui improves -- *(ui)* Improve header of pages -- *(styles)* Make header css component -- *(routes)* Improve ui for apps, databases and services logs - -### 🐛 Bug Fixes - -- Changing umami image URL to get latest version -- Gitlab importer for public repos -- Show error logs -- Umami init sql -- Plausible analytics actions -- Login -- Dev url -- UpdateMany build logs -- Fallback to db logs -- Fluentbit configuration -- Coolify update -- Fluentbit and logs -- Canceling build -- Logging -- Load more -- Build logs -- Versions of appwrite -- Appwrite?! -- Get building status -- Await -- Await #2 -- Update PR building status -- Appwrite default version 1.0 -- Undead endpoint does not require JWT -- *(routes)* Improve design of application page -- *(routes)* Improve design of git sources page -- *(routes)* Ui from destinations page -- *(routes)* Ui from databases page -- *(routes)* Ui from databases page -- *(routes)* Ui from databases page -- *(routes)* Ui from services page -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- *(routes)* Ui from settings page -- *(routes)* Duplicates classes in services page -- *(routes)* Searchbar ui -- Github conflicts -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- *(routes)* More ui tweaks -- Ui with headers -- *(routes)* Header of settings page in databases -- *(routes)* Ui from secrets table - -### 💼 Other - -- Fix plausible -- Fix cleanup button -- Fix buttons - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Minor changes -- Minor changes -- Minor changes -- Whoops - -## [3.10.1] - 2022-09-10 - -### 🐛 Bug Fixes - -- Show restarting apps -- Show restarting application & logs -- Remove unnecessary gitlab group name -- Secrets for PR -- Volumes for services -- Build secrets for apps -- Delete resource use window location - -### 💼 Other - -- Fix button -- Fix follow button -- Arm should be on next all the time - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.10.0] - 2022-09-08 - -### 🚀 Features - -- New servers view - -### 🐛 Bug Fixes - -- Change to execa from utils -- Save search input -- Ispublic status on databases -- Port checkers -- Ui variables -- Glitchtip env to pyhton boolean -- Autoupdater - -### 💼 Other - -- Dashboard updates -- Fix tooltip - -## [3.9.4] - 2022-09-07 - -### 🐛 Bug Fixes - -- DnsServer formatting -- Settings for service - -## [3.9.3] - 2022-09-07 - -### 🐛 Bug Fixes - -- Pr previews - -## [3.9.2] - 2022-09-07 - -### 🚀 Features - -- Add traefik acme json to coolify container -- Database secrets - -### 🐛 Bug Fixes - -- Gitlab webhook -- Use ip address instead of window location -- Use ip instead of window location host -- Service state update -- Add initial DNS servers -- Revert last change with domain check -- Service volume generation -- Minio default env variables -- Add php 8.1/8.2 -- Edgedb ui -- Edgedb stuff -- Edgedb - -### 💼 Other - -- Fix login/register page -- Update devcontainer -- Add debug log -- Fix initial loading icon bg -- Fix loading start/stop db/services -- Dashboard updates and a lot more - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ - -## [3.9.0] - 2022-09-06 - -### 🐛 Bug Fixes - -- Debug api logging + gh actions -- Workdir -- Move restart button to settings - -## [3.9.1-rc.1] - 2022-09-06 - -### 🚀 Features - -- *(routes)* Rework ui from login and register page - -### 🐛 Bug Fixes - -- Ssh pid agent name -- Repository link trim -- Fqdn or expose port required -- Service deploymentEnabled -- Expose port is not required -- Remote verification -- Dockerfile - -### 💼 Other - -- Database_branches -- Login page - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ - -## [3.9.0-rc.1] - 2022-09-02 - -### 🚀 Features - -- New service - weblate -- Restart application -- Show elapsed time on running builds -- Github allow fual branches -- Gitlab dual branch -- Taiga - -### 🐛 Bug Fixes - -- Glitchtip things -- Loading state on start -- Ui -- Submodule -- Gitlab webhooks -- UI + refactor -- Exposedport on save -- Appwrite letsencrypt -- Traefik appwrite -- Traefik -- Finally works! :) -- Rename components + remove PR/MR deployment from public repos -- Settings missing id -- Explainer component -- Database name on logs view -- Taiga - -### 💼 Other - -- Fixes -- Change tooltips and info boxes -- Added rc release - -### 🧪 Testing - -- Native binary target -- Dockerfile - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.8.9] - 2022-08-30 - -### 🐛 Bug Fixes - -- Oh god Prisma - -## [3.8.8] - 2022-08-30 - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.8.6] - 2022-08-30 - -### 🐛 Bug Fixes - -- Pr deployment -- CompareVersions -- Include -- Include -- Gitlab apps - -### 💼 Other - -- Fixes -- Route to the correct path when creating destination from db config - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.8.5] - 2022-08-27 - -### 🐛 Bug Fixes - -- Copy all files during install process -- Typo -- Process -- White labeled icon on navbar -- Whitelabeled icon -- Next/nuxt deployment type -- Again - -## [3.8.4] - 2022-08-27 - -### 🐛 Bug Fixes - -- UI thinkgs -- Delete team while it is active -- Team switching -- Queue cleanup -- Decrypt secrets -- Cleanup build cache as well -- Pr deployments + remove public gits - -### 💼 Other - -- Dashbord fixes -- Fixes - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.8.3] - 2022-08-26 - -### 🐛 Bug Fixes - -- Secrets decryption - -## [3.8.2] - 2022-08-26 - -### 🚀 Features - -- *(ui)* Rework home UI and with responsive design - -### 🐛 Bug Fixes - -- Never stop deplyo queue -- Build queue system -- High cpu usage -- Worker -- Better worker system - -### 💼 Other - -- Dashboard fine-tunes -- Fine-tune -- Fixes -- Fix - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.8.1] - 2022-08-24 - -### 🐛 Bug Fixes - -- Ui buttons -- Clear queue on cancelling jobs -- Cancelling jobs -- Dashboard for admins - -## [3.8.0] - 2022-08-23 - -### 🚀 Features - -- Searxng service - -### 🐛 Bug Fixes - -- Port checker -- Cancel build after 5 seconds -- ExposedPort checker -- Batch secret = -- Dashboard for non-root users -- Stream build logs -- Show build log start/end - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.7.0] - 2022-08-19 - -### 🚀 Features - -- Add GlitchTip service - -### 🐛 Bug Fixes - -- Missing commas -- ExposedPort is just optional - -### ⚙️ Miscellaneous Tasks - -- Add .pnpm-store in .gitignore -- Version++ - -## [3.6.0] - 2022-08-18 - -### 🚀 Features - -- Import public repos (wip) -- Public repo deployment -- Force rebuild + env.PORT for port + public repo build - -### 🐛 Bug Fixes - -- Bots without exposed ports - -### 💼 Other - -- Fixes here and there - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.5.2] - 2022-08-17 - -### 🐛 Bug Fixes - -- Restart containers on-failure instead of always -- Show that Ghost values could be changed - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.5.1] - 2022-08-17 - -### 🐛 Bug Fixes - -- Revert docker compose version to 2.6.1 -- Trim secrets - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.5.0] - 2022-08-17 - -### 🚀 Features - -- Deploy bots (no domains) -- Custom dns servers - -### 🐛 Bug Fixes - -- Dns button ui -- Bot deployments -- Bots -- AutoUpdater & cleanupStorage jobs - -### 💼 Other - -- Typing - -## [3.4.0] - 2022-08-16 - -### 🚀 Features - -- Appwrite service -- Heroku deployments - -### 🐛 Bug Fixes - -- Replace docker compose with docker-compose on CSB -- Dashboard ui -- Create coolify-infra, if it does not exists -- Gitpod conf and heroku buildpacks -- Appwrite -- Autoimport + readme -- Services import -- Heroku icon -- Heroku icon - -## [3.3.4] - 2022-08-15 - -### 🐛 Bug Fixes - -- Make it public button -- Loading indicator - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.3.3] - 2022-08-14 - -### 🐛 Bug Fixes - -- Decryption errors -- Postgresql on ARM - -## [3.3.2] - 2022-08-12 - -### 🐛 Bug Fixes - -- Debounce dashboard status requests - -### 💼 Other - -- Fider - -## [3.3.1] - 2022-08-12 - -### 🐛 Bug Fixes - -- Empty buildpack icons - -## [3.2.3] - 2022-08-12 - -### 🚀 Features - -- Databases on ARM -- Mongodb arm support -- New dashboard - -### 🐛 Bug Fixes - -- Cleanup stucked prisma-engines -- Toast -- Secrets -- Cleanup prisma engine if there is more than 1 -- !isARM to isARM -- Enterprise GH link - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.2.2] - 2022-08-11 - -### 🐛 Bug Fixes - -- Coolify-network on verification - -## [3.2.1] - 2022-08-11 - -### 🚀 Features - -- Init heroku buildpacks - -### 🐛 Bug Fixes - -- Follow/cancel buttons -- Only remove coolify managed containers -- White-labeled env -- Schema - -### 💼 Other - -- Fix - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.2.0] - 2022-08-11 - -### 🚀 Features - -- Persistent storage for all services -- Cleanup clickhouse db - -### 🐛 Bug Fixes - -- Rde local ports -- Empty remote destinations could be removed -- Tips -- Lowercase issues fider -- Tooltip colors -- Update clickhouse configuration -- Cleanup command -- Enterprise Github instance endpoint - -### 💼 Other - -- Local ssh port -- Redesign a lot -- Fixes -- Loading indicator for plausible buttons - -## [3.1.4] - 2022-08-01 - -### 🚀 Features - -- Moodle init -- Remote docker engine init -- Working on remote docker engine -- Rde -- Remote docker engine -- Ipv4 and ipv6 -- Contributors -- Add arch to database -- Stop preview deployment - -### 🐛 Bug Fixes - -- Settings from api -- Selectable destinations -- Gitpod hardcodes -- Typo -- Typo -- Expose port checker -- States and exposed ports -- CleanupStorage -- Remote traefik webhook -- Remote engine ip address -- RemoteipAddress -- Explanation for remote engine url -- Tcp proxy -- Lol -- Webhook -- Dns check for rde -- Gitpod -- Revert last commit -- Dns check -- Dns checker -- Webhook -- Df and more debug -- Webhooks -- Load previews async -- Destination icon -- Pr webhook -- Cache image -- No ssh key found -- Prisma migration + update of docker and stuffs -- Ui -- Ui -- Only 1 ssh-agent is needed -- Reuse ssh connection -- Ssh tunnel -- Dns checking -- Fider BASE_URL set correctly - -### 💼 Other - -- Error message https://github.com/coollabsio/coolify/issues/502 -- Changes -- Settings -- For removing app - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.1.3] - 2022-07-18 - -### 🚀 Features - -- Init moodle and separate stuffs to shared package - -### 🐛 Bug Fixes - -- More types for API -- More types -- Do not rebuild in case image exists and sha not changed -- Gitpod urls -- Remove new service start process -- Remove shared dir, deployment does not work -- Gitlab custom url -- Location url for services and apps - -## [3.1.2] - 2022-07-14 - -### 🐛 Bug Fixes - -- Admin password reset should not timeout -- Message for double branches -- Turn off autodeploy if double branch is configured - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.1.1] - 2022-07-13 - -### 🚀 Features - -- Gitpod integration - -### 🐛 Bug Fixes - -- Cleanup less often and can do it manually - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ - -## [3.1.0] - 2022-07-12 - -### 🚀 Features - -- Ability to change deployment type for nextjs -- Ability to change deployment type for nuxtjs -- Gitpod ready code(almost) -- Add Docker buildpack exposed port setting -- Custom port for git instances - -### 🐛 Bug Fixes - -- GitLab pagination load data -- Service domain checker -- Wp missing ftp solution -- Ftp WP issues -- Ftp?! -- Gitpod updates -- Gitpod -- Gitpod -- Wordpress FTP permission issues -- GitLab search fields -- GitHub App button -- GitLab loop on misconfigured source -- Gitpod - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [3.0.3] - 2022-07-06 - -### 🐛 Bug Fixes - -- Domain check -- Domain check -- TrustProxy for Fastify -- Hostname issue - -## [3.0.2] - 2022-07-06 - -### 🐛 Bug Fixes - -- New destination can be created -- Include post -- New destinations - -## [3.0.1] - 2022-07-06 - -### 🐛 Bug Fixes - -- Seeding -- Forgot that the version bump changed 😅 - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.11] - 2022-06-20 - -### 🐛 Bug Fixes - -- Be able to change database + service versions -- Lock file - -## [2.9.10] - 2022-06-17 - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.9] - 2022-06-10 - -### 🐛 Bug Fixes - -- Host and reload for uvicorn -- Remove package-lock - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.8] - 2022-06-10 - -### 🐛 Bug Fixes - -- Persistent nocodb -- Nocodb persistency - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.7] - 2022-06-09 - -### 🐛 Bug Fixes - -- Plausible custom script -- Plausible script and middlewares -- Remove console log -- Remove comments -- Traefik middleware - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.6] - 2022-06-02 - -### 🐛 Bug Fixes - -- Fider changed an env variable name -- Pnpm command - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.5] - 2022-06-02 - -### 🐛 Bug Fixes - -- Proxy stop missing argument - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.4] - 2022-06-01 - -### 🐛 Bug Fixes - -- Demo version forms -- Typo -- Revert gh and gl cloning - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.3] - 2022-05-31 - -### 🐛 Bug Fixes - -- Recurisve clone instead of submodule -- Versions -- Only reconfigure coolify proxy if its missconfigured - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.2] - 2022-05-31 - -### 🐛 Bug Fixes - -- TrustProxy -- Force restart proxy -- Only restart coolify proxy in case of version prior to 2.9.2 -- Force restart proxy on seeding -- Add GIT ENV variable for submodules - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.1] - 2022-05-31 - -### 🐛 Bug Fixes - -- GitHub fixes - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.9.0] - 2022-05-31 - -### 🚀 Features - -- PageLoader -- Database + service usage - -### 🐛 Bug Fixes - -- Service checks -- Remove console.log -- Traefik -- Remove debug things -- WIP Traefik -- Proxy for http -- PR deployments view -- Minio urls + domain checks -- Remove gh token on git source changes -- Do not fetch app state in case of missconfiguration -- Demo instance save domain instantly -- Instant save on demo instance -- New source canceled view -- Lint errors in database services -- Otherfqdns -- Host key verification -- Ftp connection - -### 💼 Other - -- Appwrite -- Testing WS -- Traefik?! -- Traefik -- Traefik -- Traefik migration -- Traefik -- Traefik -- Traefik -- Notifications and application usage -- *(fix)* Traefik -- Css - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.8.2] - 2022-05-16 - -### 🐛 Bug Fixes - -- Gastby buildpack - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.8.1] - 2022-05-10 - -### 🐛 Bug Fixes - -- WP custom db -- UI - -## [2.6.1] - 2022-05-03 - -### 🚀 Features - -- Basic server usage on dashboard -- Show usage trends -- Usage on dashboard -- Custom script path for Plausible -- WP could have custom db -- Python image selection - -### 🐛 Bug Fixes - -- ExposedPorts -- Logos for dbs -- Do not run SSL renew in development -- Check domain for coolify before saving -- Remove debug info -- Cancel jobs -- Cancel old builds in database -- Better DNS check to prevent errors -- Check DNS in prod only -- DNS check -- Disable sentry for now -- Cancel -- Sentry -- No image for Docker buildpack -- Default packagemanager -- Server usage only shown for root team -- Expose ports for services -- UI -- Navbar UI -- UI -- UI -- Remove RC python -- UI -- UI -- UI -- Default Python package - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Version++ -- Version++ - -## [2.6.0] - 2022-05-02 - -### 🚀 Features - -- Hasura as a service -- Gzip compression -- Laravel buildpack is working! -- Laravel -- Fider service -- Database and services logs -- DNS check settings for SSL generation -- Cancel builds! - -### 🐛 Bug Fixes - -- Unami svg size -- Team switching moved to IAM menu -- Always use IP address for webhooks -- Remove unnecessary test endpoint -- UI -- Migration -- Fider envs -- Checking low disk space -- Build image -- Update autoupdate env variable -- Renew certificates -- Webhook build images -- Missing node versions - -### 💼 Other - -- Laravel - -## [2.4.11] - 2022-04-20 - -### 🚀 Features - -- Deno DB migration -- Show exited containers on UI & better UX -- Query container state periodically -- Install svelte-18n and init setup -- Umami service -- Coolify auto-updater -- Autoupdater -- Select base image for buildpacks - -### 🐛 Bug Fixes - -- Deno configurations -- Text on deno buildpack -- Correct branch shown in build logs -- Vscode permission fix -- I18n -- Locales -- Application logs is not reversed and queried better -- Do not activate i18n for now -- GitHub token cleanup on team switch -- No logs found -- Code cleanups -- Reactivate posgtres password -- Contribution guide -- Simplify list services -- Contribution -- Contribution guide -- Contribution guide -- Packagemanager finder - -### 💼 Other - -- Umami service -- Base image selector - -### 📚 Documentation - -- How to add new services -- Update -- Update - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Version++ - -## [2.4.10] - 2022-04-17 - -### 🚀 Features - -- Add persistent storage for services -- Multiply dockerfile locations for docker buildpack -- Testing fluentd logging driver -- Fluentbit investigation -- Initial deno support - -### 🐛 Bug Fixes - -- Switch from bitnami/redis to normal redis -- Use redis-alpine -- Wordpress extra config -- Stop sFTP connection on wp stop -- Change user's id in sftp wp instance -- Use arm based certbot on arm -- Buildlog line number is not string -- Application logs paginated -- Switch to stream on applications logs -- Scroll to top for logs -- Pull new images for services all the time it's started. -- White-labeled custom logo -- Application logs - -### 💼 Other - -- Show extraconfig if wp is running - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ - -## [2.4.9] - 2022-04-14 - -### 🐛 Bug Fixes - -- Postgres root pw is pw field -- Teams view -- Improved tcp proxy monitoring for databases/ftp -- Add HTTP proxy checks -- Loading of new destinations -- Better performance for cleanup images -- Remove proxy container in case of dependent container is down -- Restart local docker coolify proxy in case of something happens to it -- Id of service container - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.8] - 2022-04-13 - -### 🐛 Bug Fixes - -- Register should happen if coolify proxy cannot be started -- GitLab typo -- Remove system wide pw reset - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.7] - 2022-04-13 - -### 🐛 Bug Fixes - -- Destinations to HAProxy - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.6] - 2022-04-13 - -### 🐛 Bug Fixes - -- Cleanup images older than a day -- Meilisearch service -- Load all branches, not just the first 30 -- ProjectID for Github -- DNS check before creating SSL cert -- Try catch me -- Restart policy for resources -- No permission on first registration -- Reverting postgres password for now - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.5] - 2022-04-12 - -### 🐛 Bug Fixes - -- Types -- Invitations -- Timeout values - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.4] - 2022-04-12 - -### 🐛 Bug Fixes - -- Haproxy build stuffs -- Proxy - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.3] - 2022-04-12 - -### 🐛 Bug Fixes - -- Remove unnecessary save button haha -- Update dockerfile - -### ⚙️ Miscellaneous Tasks - -- Update packages -- Version++ -- Update build scripts -- Update build packages - -## [2.4.2] - 2022-04-09 - -### 🐛 Bug Fixes - -- Missing install repositories GitHub -- Return own and other sources better -- Show config missing on sources - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.1] - 2022-04-09 - -### 🐛 Bug Fixes - -- Enable https for Ghost -- Postgres root passwor shown and set -- Able to change postgres user password from ui -- DB Connecting string generator - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.4.0] - 2022-04-08 - -### 🚀 Features - -- Wordpress on-demand SFTP -- Finalize on-demand sftp for wp -- PHP Composer support -- Working on-demand sftp to wp data -- Admin team sees everything -- Able to change service version/tag -- Basic white labeled version -- Able to modify database passwords - -### 🐛 Bug Fixes - -- Add openssl to image -- Permission issues -- On-demand sFTP for wp -- Fix for fix haha -- Do not pull latest image -- Updated db versions -- Only show proxy for admin team -- Team view for root team -- Do not trigger >1 webhooks on GitLab -- Possible fix for spikes in CPU usage -- Last commit -- Www or not-www, that's the question -- Fix for the fix that fixes the fix -- Ton of updates for users/teams -- Small typo -- Unique storage paths -- Self-hosted GitLab URL -- No line during buildLog -- Html/apiUrls cannot end with / -- Typo -- Missing buildpack - -### 💼 Other - -- Fix -- Better layout for root team -- Fix -- Fixes -- Fix -- Fix -- Fix -- Fix -- Fix -- Fix -- Fix -- Insane amount -- Fix -- Fixes -- Fixes -- Fix -- Fixes -- Fixes - -### 📚 Documentation - -- Contribution guide - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.3.3] - 2022-04-05 - -### 🐛 Bug Fixes - -- Add git lfs while deploying -- Try to update build status several times -- Update stucked builds -- Update stucked builds on startup -- Revert seed -- Lame fixing -- Remove asyncUntil - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.3.2] - 2022-04-04 - -### 🐛 Bug Fixes - -- *(php)* If .htaccess file found use apache -- Add default webhook domain for n8n - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.3.1] - 2022-04-04 - -### 🐛 Bug Fixes - -- Secrets build/runtime coudl be changed after save -- Default configuration - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.3.0] - 2022-04-04 - -### 🚀 Features - -- Initial python support -- Add loading on register button -- *(dev)* Allow windows users to use pnpm dev -- MeiliSearch service -- Add abilitry to paste env files - -### 🐛 Bug Fixes - -- Ignore coolify proxy error for now -- Python no wsgi -- If user not found -- Rename envs to secrets -- Infinite loop on www domains -- No need to paste clear text env for previews -- Build log fix attempt #1 -- Small UI fix on logs -- Lets await! -- Async progress -- Remove console.log -- Build log -- UI -- Gitlab & Github urls - -### 💼 Other - -- Improvements - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Lock file + fix packages - -## [2.2.7] - 2022-04-01 - -### 🐛 Bug Fixes - -- Haproxy errors -- Build variables -- Use NodeJS for sveltekit for now - -## [2.2.6] - 2022-03-31 - -### 🐛 Bug Fixes - -- Add PROTO headers - -## [2.2.5] - 2022-03-31 - -### 🐛 Bug Fixes - -- Registration enabled/disabled - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.2.4] - 2022-03-31 - -### 🐛 Bug Fixes - -- Gitlab repo url -- No need to dashify anymore - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.2.3] - 2022-03-31 - -### 🐛 Bug Fixes - -- List ghost services -- Reload window on settings saved -- Persistent storage on webhooks -- Add license -- Space in repo names - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ -- Version++ -- Fixed typo on New Git Source view - -## [2.2.0] - 2022-03-27 - -### 🚀 Features - -- Add n8n.io service -- Add update kuma service -- Ghost service - -### 🐛 Bug Fixes - -- Ghost logo size -- Ghost icon, remove console.log - -### 💼 Other - -- Colors on svelte-select - -### ⚙️ Miscellaneous Tasks - -- Version ++ - -## [2.1.1] - 2022-03-25 - -### 🐛 Bug Fixes - -- Cleanup only 2 hours+ old images - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.1.0] - 2022-03-23 - -### 🚀 Features - -- Use compose instead of normal docker cmd -- Be able to redeploy PRs - -### 🐛 Bug Fixes - -- Skip ssl cert in case of error -- Volumes - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.31] - 2022-03-20 - -### 🚀 Features - -- Add PHP modules - -### 🐛 Bug Fixes - -- Cleanup old builds -- Only cleanup same app -- Add nginx + htaccess files - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.30] - 2022-03-19 - -### 🐛 Bug Fixes - -- No cookie found -- Missing session data -- No error if GitSource is missing -- No webhook secret found? -- Basedir for dockerfiles -- Better queue system + more support on monorepos -- Remove build logs in case of app removed - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.29] - 2022-03-11 - -### 🚀 Features - -- Webhooks inititate all applications with the correct branch -- Check ssl for new apps/services first -- Autodeploy pause -- Install pnpm into docker image if pnpm lock file is used - -### 🐛 Bug Fixes - -- Personal Gitlab repos -- Autodeploy true by default for GH repos - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.28] - 2022-03-04 - -### 🚀 Features - -- Service secrets - -### 🐛 Bug Fixes - -- Do not error if proxy is not running - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.27] - 2022-03-02 - -### 🚀 Features - -- Send version with update request - -### 🐛 Bug Fixes - -- Check when a container is running -- Reload haproxy if new cert is added -- Cleanup coolify images -- Application state in UI - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.26] - 2022-03-02 - -### 🐛 Bug Fixes - -- Update process - -## [2.0.25] - 2022-03-02 - -### 🚀 Features - -- Languagetool service - -### 🐛 Bug Fixes - -- Reload proxy on ssl cert -- Volume name - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.24] - 2022-03-02 - -### 🐛 Bug Fixes - -- Better proxy check -- Ssl + sslrenew -- Null proxyhash on restart -- Reconfigure proxy on restart -- Update process - -## [2.0.23] - 2022-02-28 - -### 🐛 Bug Fixes - -- Be sure .env exists -- Missing fqdn for services -- Default npm command -- Add coolify-image label for build images -- Cleanup old images, > 3 days - -### 💼 Other - -- Colorful states -- Application start - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.22] - 2022-02-27 - -### 🐛 Bug Fixes - -- Coolify image pulls -- Remove wrong/stuck proxy configurations -- Always use a buildpack -- Add icons for eleventy + astro -- Fix proxy every 10 secs -- Do not remove coolify proxy -- Update version - -### 💼 Other - -- Remote docker engine - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.21] - 2022-02-24 - -### 🚀 Features - -- Random subdomain for demo -- Random domain for services -- Astro buildpack -- 11ty buildpack -- Registration page - -### 🐛 Bug Fixes - -- Http for demo, oops -- Docker scanner -- Improvement on image pulls - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.20] - 2022-02-23 - -### 🐛 Bug Fixes - -- Revert default network - -### 💼 Other - -- Dns check - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.19] - 2022-02-23 - -### 🐛 Bug Fixes - -- Random network name for demo -- Settings fqdn grr - -## [2.0.18] - 2022-02-22 - -### 🚀 Features - -- Ports range - -### 🐛 Bug Fixes - -- Email is lowercased in login -- Lowercase email everywhere -- Use normal docker-compose in dev - -### 💼 Other - -- Make copy/password visible - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.17] - 2022-02-21 - -### 🐛 Bug Fixes - -- Move tokens from session to cookie/store - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.14] - 2022-02-18 - -### 🚀 Features - -- Basic password reset form -- Scan for lock files and set right commands -- Public port range (WIP) - -### 🐛 Bug Fixes - -- SSL app off -- Local docker host -- Typo -- Lets encrypt -- Remove SSL with stop -- SSL off for services -- Grr -- Running state css -- Minor fixes -- Remove force SSL when doing let's encrypt request -- GhToken in session now -- Random port for certbot -- Follow icon -- Plausible volume fixed -- Database connection strings -- Gitlab webhooks fixed -- If DNS not found, do not redirect -- Github token - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version ++ - -## [2.0.13] - 2022-02-17 - -### 🐛 Bug Fixes - -- Login issues - -## [2.0.11] - 2022-02-15 - -### 🚀 Features - -- Follow logs -- Generate www & non-www SSL certs - -### 🐛 Bug Fixes - -- Window error in SSR -- GitHub sync PR's -- Load more button -- Small fixes -- Typo -- Error with follow logs -- IsDomainConfigured -- TransactionIds -- Coolify image cleanup -- Cleanup every 10 mins -- Cleanup images -- Add no user redis to uri -- Secure cookie disabled by default -- Buggy svelte-kit-cookie-session - -### 💼 Other - -- Only allow cleanup in production - -### ⚙️ Miscellaneous Tasks - -- Version++ -- Version++ - -## [2.0.10] - 2022-02-15 - -### 🐛 Bug Fixes - -- Typo -- Error handling -- Stopping service without proxy -- Coolify proxy start - -### ⚙️ Miscellaneous Tasks - -- Version++ - -## [2.0.8] - 2022-02-14 - -### 🐛 Bug Fixes - -- Validate secrets -- Truncate git clone errors -- Branch used does not throw error - -## [2.0.7] - 2022-02-13 - -### 🚀 Features - -- Www <-> non-www redirection for apps -- Www <-> non-www redirection - -### 🐛 Bug Fixes - -- Package.json -- Build secrets should be visible in runtime -- New secret should have default values - -## [2.0.5] - 2022-02-11 - -### 🚀 Features - -- VaultWarden service - -### 🐛 Bug Fixes - -- PreventDefault on a button, thats all -- Haproxy check should not throw error -- Delete all build files -- Cleanup images -- More error handling in proxy configuration + cleanups -- Local static assets -- Check sentry -- Typo - -### ⚙️ Miscellaneous Tasks - -- Version -- Version - -## [2.0.4] - 2022-02-11 - -### 🚀 Features - -- Use tags in update -- New update process (#115) - -### 🐛 Bug Fixes - -- Docker Engine bug related to live-restore and IPs -- Version - -## [2.0.3] - 2022-02-10 - -### 🐛 Bug Fixes - -- Capture non-error as error -- Only delete id.rsa in case of it exists -- Status is not available yet - -### ⚙️ Miscellaneous Tasks - -- Version bump - -## [2.0.2] - 2022-02-10 - -### 🐛 Bug Fixes - -- Secrets join -- ENV variables set differently - - From 24885164cbc5b60d6dcdab324a5d6c4ca55b8173 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 14:48:48 +0200 Subject: [PATCH 006/229] chore(versions): update version to 4.0.0-beta.419 --- config/constants.php | 2 +- other/nightly/versions.json | 4 ++-- versions.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/constants.php b/config/constants.php index be20736c0..2e54acade 100644 --- a/config/constants.php +++ b/config/constants.php @@ -2,7 +2,7 @@ return [ 'coolify' => [ - 'version' => '4.0.0-beta.418', + 'version' => '4.0.0-beta.419', 'helper_version' => '1.0.8', 'realtime_version' => '1.0.8', 'self_hosted' => env('SELF_HOSTED', true), diff --git a/other/nightly/versions.json b/other/nightly/versions.json index 106273897..6b41be267 100644 --- a/other/nightly/versions.json +++ b/other/nightly/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.418" + "version": "4.0.0-beta.419" }, "nightly": { - "version": "4.0.0-beta.419" + "version": "4.0.0-beta.420" }, "helper": { "version": "1.0.8" diff --git a/versions.json b/versions.json index 106273897..6b41be267 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.418" + "version": "4.0.0-beta.419" }, "nightly": { - "version": "4.0.0-beta.419" + "version": "4.0.0-beta.420" }, "helper": { "version": "1.0.8" From b704dadca03380e05106e09e9f992e04c4a6babd Mon Sep 17 00:00:00 2001 From: Datenschmutz <63157166+Datenschmutz@users.noreply.github.com> Date: Wed, 14 May 2025 14:55:35 +0200 Subject: [PATCH 007/229] feat(service): add Diun service (#5113) --- public/svgs/diun.svg | 38 +++++++++++++++++++++++++++++++++++++ templates/compose/diun.yaml | 31 ++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 public/svgs/diun.svg create mode 100644 templates/compose/diun.yaml diff --git a/public/svgs/diun.svg b/public/svgs/diun.svg new file mode 100644 index 000000000..6084a3cf3 --- /dev/null +++ b/public/svgs/diun.svg @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/templates/compose/diun.yaml b/templates/compose/diun.yaml new file mode 100644 index 000000000..3f36d1775 --- /dev/null +++ b/templates/compose/diun.yaml @@ -0,0 +1,31 @@ +# documentation: https://crazymax.dev/diun/ +# slogan: Docker Image Update Notifier is a CLI application to receive notifications when a Docker image is updated on a Docker registry. +# tags: docker, notifier, slack +# logo: svgs/diun.svg + + +services: + diun: + image: 'crazymax/diun:latest' + container_name: diun + command: serve + volumes: + - './data:/data' + - '/var/run/docker.sock:/var/run/docker.sock' + environment: + - TZ=${TIME_ZONE:-Europe/Vienna} + - LOG_LEVEL=info + - LOG_JSON=false + - DIUN_WATCH_WORKERS=20 + - DIUN_WATCH_SCHEDULE=${CRON_WATCH_SCHEDULE:- * */6 * * *} + - DIUN_WATCH_JITTER=30s + - DIUN_PROVIDERS_DOCKER=true + - DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true + #SLACK + - DIUN_NOTIF_SLACK_WEBHOOKURL=${WEB_HOOK_URL} + restart: always + healthcheck: + test: ["CMD", "diun", "--version"] + interval: 5s + timeout: 20s + retries: 3 \ No newline at end of file From 7789fbc521c6b0029ca12a81abd00b25aa57cf88 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 14:57:38 +0200 Subject: [PATCH 008/229] chore(service): diun formatting --- templates/compose/diun.yaml | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/templates/compose/diun.yaml b/templates/compose/diun.yaml index 3f36d1775..2894917e5 100644 --- a/templates/compose/diun.yaml +++ b/templates/compose/diun.yaml @@ -3,29 +3,25 @@ # tags: docker, notifier, slack # logo: svgs/diun.svg - services: diun: - image: 'crazymax/diun:latest' - container_name: diun + image: crazymax/diun:latest command: serve volumes: - - './data:/data' - - '/var/run/docker.sock:/var/run/docker.sock' + - "diun_data:/data" + - "/var/run/docker.sock:/var/run/docker.sock" environment: - TZ=${TIME_ZONE:-Europe/Vienna} - - LOG_LEVEL=info - - LOG_JSON=false - - DIUN_WATCH_WORKERS=20 + - LOG_LEVEL=${LOG_LEVEL:-info} + - LOG_JSON=${LOG_JSON:-false} + - DIUN_WATCH_WORKERS=${DIUN_WATCH_WORKERS:-20} - DIUN_WATCH_SCHEDULE=${CRON_WATCH_SCHEDULE:- * */6 * * *} - - DIUN_WATCH_JITTER=30s - - DIUN_PROVIDERS_DOCKER=true - - DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true - #SLACK - - DIUN_NOTIF_SLACK_WEBHOOKURL=${WEB_HOOK_URL} - restart: always + - DIUN_WATCH_JITTER=${DIUN_WATCH_JITTER:-30s} + - DIUN_PROVIDERS_DOCKER=${DIUN_PROVIDERS_DOCKER:-true} + - DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=${DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT:-true} + - DIUN_NOTIF_SLACK_WEBHOOKURL=${SERVICE_WEBHOOK_URL_SLACK} healthcheck: test: ["CMD", "diun", "--version"] interval: 5s timeout: 20s - retries: 3 \ No newline at end of file + retries: 3 From ea01788ac56b9d97c14443e8d1ab410275d143ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8F=94=EF=B8=8F=20Peak?= <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 15:00:54 +0200 Subject: [PATCH 009/229] chore(docs): Update CHANGELOG.md --- CHANGELOG.md | 7410 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7410 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..9fdf59683 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7410 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [4.0.0-beta.417] - 2025-05-07 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.416] - 2025-05-05 + +### 📚 Documentation + +- Update changelog +- Update changelog + +## [4.0.0-beta.415] - 2025-04-29 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.413] - 2025-04-28 + +### 💼 Other + +- Adjust Workflows for v5 (#5689) + +### 📚 Documentation + +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(workflows)* Adjust workflow for announcement + +## [4.0.0-beta.412] - 2025-04-23 + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Update coolify version to 4.0.0-beta.412 and nightly version to 4.0.0-beta.413 in configuration files + +## [4.0.0-beta.411] - 2025-04-23 + +### 🚀 Features + +- *(deployment)* Add repository_project_id handling for private GitHub apps and clean up unused Caddy label logic +- *(api)* Enhance OpenAPI specifications with token variable and additional key attributes +- *(docker)* Add HTTP Basic Authentication support and enhance hostname parsing in Docker run conversion +- *(api)* Add HTTP Basic Authentication fields to OpenAPI specifications and enhance PrivateKey model descriptions + +### 🐛 Bug Fixes + +- *(backup-edit)* Conditionally enable S3 checkbox based on available validated S3 storage +- *(source)* Update no sources found message for clarity +- *(api)* Correct middleware for service update route to ensure proper permissions +- *(api)* Handle JSON response in service creation and update methods for improved error handling +- Add 201 json code to servers validate api response +- *(docker)* Ensure password hashing only occurs when HTTP Basic Authentication is enabled +- *(docker)* Enhance hostname and GPU option validation in Docker run to compose conversion + +### 🚜 Refactor + +- *(jobs)* Comment out unused Caddy label handling in ApplicationDeploymentJob and simplify proxy path logic in Server model +- *(database)* Simplify database type checks in ServiceDatabase and enhance image validation in Docker helper +- *(shared)* Remove unused ray debugging statement from newParser function +- *(applications)* Remove redundant error response in create_env method +- *(api)* Restructure routes to include versioning and maintain existing feedback endpoint +- *(api)* Remove token variable from OpenAPI specifications for clarity +- *(environment-variables)* Remove protected variable checks from delete methods for cleaner logic +- *(http-basic-auth)* Rename 'http_basic_auth_enable' to 'http_basic_auth_enabled' across application files for consistency +- *(docker)* Remove debug statement and enhance hostname handling in Docker run conversion +- *(server)* Simplify proxy path logic and remove unnecessary conditions + +### 📚 Documentation + +- Update changelog +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Update coolify version to 4.0.0-beta.411 and nightly version to 4.0.0-beta.412 in configuration files + +## [4.0.0-beta.410] - 2025-04-18 + +### 🚀 Features + +- Add HTTP Basic Authentication +- *(readme)* Add new sponsors Supadata AI and WZ-IT to the README +- *(core)* Enable magic env variables for compose based applications + +### 🐛 Bug Fixes + +- *(application)* Append base directory to git branch URLs for improved path handling +- *(templates)* Correct casing of "denokv" to "denoKV" in service templates JSON +- *(navbar)* Update error message link to use route for environment variables navigation +- Unsend template +- Replace ports with expose +- *(templates)* Update Unsend compose configuration for improved service integration + +### 🚜 Refactor + +- *(jobs)* Update WithoutOverlapping middleware to use expireAfter for better queue management + +### 📚 Documentation + +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Bump coolify version to 4.0.0-beta.410 and update nightly version to 4.0.0-beta.411 in configuration files +- *(templates)* Update plausible and clickhouse images to latest versions and remove mail service + +## [4.0.0-beta.409] - 2025-04-16 + +### 🐛 Bug Fixes + +- *(parser)* Transform associative array labels into key=value format for better compatibility +- *(redis)* Update username and password input handling to clarify database sync requirements +- *(source)* Update connected source display to handle cases with no source connected + +### 🚜 Refactor + +- *(source)* Conditionally display connected source and change source options based on private key presence + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Bump coolify version to 4.0.0-beta.409 in configuration files + +## [4.0.0-beta.408] - 2025-04-14 + +### 🚀 Features + +- *(OpenApi)* Enhance OpenAPI specifications by adding UUID parameters for application, project, and service updates; improve deployment listing with pagination parameters; update command signature for OpenApi generation +- *(subscription)* Enhance subscription management with loading states and Stripe status checks + +### 🐛 Bug Fixes + +- *(pre-commit)* Correct input redirection for /dev/tty and add OpenAPI generation command +- *(pricing-plans)* Adjust grid class for improved layout consistency in subscription pricing plans +- *(migrations)* Make stripe_comment field nullable in subscriptions table +- *(mongodb)* Also apply custom config when SSL is enabled +- *(templates)* Correct casing of denoKV references in service templates and YAML files +- *(deployment)* Handle missing destination in deployment process to prevent errors + +### 💼 Other + +- Add missing openapi items to PrivateKey + +### 🚜 Refactor + +- *(commands)* Reorganize OpenAPI and Services generation commands into a new namespace for better structure; remove old command files +- *(Dockerfile)* Remove service generation command from the build process to streamline Dockerfile and improve build efficiency +- *(navbar-delete-team)* Simplify modal confirmation layout and enhance button styling for better user experience +- *(Server)* Remove debug logging from isReachableChanged method to clean up code and improve performance + +### 📚 Documentation + +- Update changelog +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Update nightly version to 4.0.0-beta.410 +- *(pre-commit)* Remove OpenAPI generation command from pre-commit hook +- *(versions)* Update realtime version to 1.0.7 and bump dependencies in package.json + +## [4.0.0-beta.407] - 2025-04-09 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.406] - 2025-04-05 + +### 🚀 Features + +- *(Deploy)* Add info dispatch for proxy check initiation +- *(EnvironmentVariable)* Add handling for Redis credentials in the environment variable component +- *(EnvironmentVariable)* Implement protection for critical environment variables and enhance deletion logic +- *(Application)* Add networkAliases attribute for handling network aliases as JSON or comma-separated values +- *(GithubApp)* Update default events to include 'pull_request' and streamline event handling +- *(CleanupDocker)* Add support for realtime image management in Docker cleanup process +- *(Deployment)* Enhance queue_application_deployment to handle existing deployments and return appropriate status messages +- *(SourceManagement)* Add functionality to change Git source and display current source in the application settings + +### 🐛 Bug Fixes + +- *(CheckProxy)* Update port conflict check to ensure accurate grep matching +- *(CheckProxy)* Refine port conflict detection with improved grep patterns +- *(CheckProxy)* Enhance port conflict detection by adjusting ss command for better output +- *(api)* Add back validateDataApplications (#5539) +- *(CheckProxy, Status)* Prevent proxy checks when force_stop is active; remove debug statement in General +- *(Status)* Conditionally check proxy status and refresh button based on force_stop state +- *(General)* Change redis_password property to nullable string +- *(DeployController)* Update request handling to use input method and enhance OpenAPI description for deployment endpoint + +### 💼 Other + +- Add missing UUID to openapi spec + +### 🚜 Refactor + +- *(Server)* Use data_get for safer access to settings properties in isFunctional method +- *(Application)* Rename network_aliases to custom_network_aliases across the application for clarity and consistency +- *(ApplicationDeploymentJob)* Streamline environment variable handling by introducing generate_coolify_env_variables method and consolidating logic for pull request and main branch scenarios +- *(ApplicationDeploymentJob, ApplicationDeploymentQueue)* Improve deployment status handling and log entry management with transaction support +- *(SourceManagement)* Sort sources by name and improve UI for changing Git source with better error handling +- *(Email)* Streamline SMTP and resend settings handling in copyFromInstanceSettings method +- *(Email)* Enhance error handling in SMTP and resend methods by passing context to handleError function +- *(DynamicConfigurations)* Improve handling of dynamic configuration content by ensuring fallback to empty string when content is null +- *(ServicesGenerate)* Update command signature from 'services:generate' to 'generate:services' for consistency; update Dockerfile to run service generation during build; update Odoo image version to 18 and add extra addons volume in compose configuration +- *(Dockerfile)* Streamline RUN commands for improved readability and maintainability by adding line continuations +- *(Dockerfile)* Reintroduce service generation command in the build process for consistency and ensure proper asset compilation + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Bump version to 406 +- *(versions)* Bump version to 407 and 408 for coolify and nightly +- *(versions)* Bump version to 408 for coolify and 409 for nightly + +## [4.0.0-beta.405] - 2025-04-04 + +### 🚀 Features + +- *(api)* Update OpenAPI spec for services (#5448) +- *(proxy)* Enhance proxy handling and port conflict detection + +### 🐛 Bug Fixes + +- *(api)* Used ssh keys can be deleted +- *(email)* Transactional emails not sending + +### 🚜 Refactor + +- *(CheckProxy)* Replace 'which' with 'command -v' for command availability checks + +### 📚 Documentation + +- Update changelog +- Update changelog +- Update changelog +- Update changelog +- Update changelog +- Update changelog +- Update changelog +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Bump version to 406 +- *(versions)* Bump version to 407 + +## [4.0.0-beta.404] - 2025-04-03 + +### 🚀 Features + +- *(lang)* Added Azerbaijani language updated turkish language. (#5497) +- *(lang)* Added Portuguese from Brazil language (#5500) +- *(lang)* Add Indonesian language translations (#5513) + +### 🐛 Bug Fixes + +- *(docs)* Comment out execute for now +- *(installation)* Mount the docker config +- *(installation)* Path to config file for docker login +- *(service)* Add health check to Bugsink service (#5512) +- *(email)* Emails are not sent in multiple cases +- *(deployments)* Use graceful shutdown instead of `rm` +- *(docs)* Contribute service url (#5517) +- *(proxy)* Proxy restart does not work on domain +- *(ui)* Only show copy button on https +- *(database)* Custom config for MongoDB (#5471) + +### 📚 Documentation + +- Update changelog +- Update changelog +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(service)* Remove unused code in Bugsink service +- *(versions)* Update version to 404 +- *(versions)* Bump version to 403 (#5520) +- *(versions)* Bump version to 404 + +## [4.0.0-beta.402] - 2025-04-01 + +### 🚀 Features + +- *(deployments)* Add list application deployments api route +- *(deploy)* Add pull request ID parameter to deploy endpoint +- *(api)* Add pull request ID parameter to applications endpoint +- *(api)* Add endpoints for retrieving application logs and deployments +- *(lang)* Added Norwegian language (#5280) +- *(dep)* Bump all dependencies + +### 🐛 Bug Fixes + +- Only get apps for the current team +- *(DeployController)* Cast 'pr' query parameter to integer +- *(deploy)* Validate team ID before deployment +- *(wakapi)* Typo in env variables and add some useful variables to wakapi.yaml (#5424) +- *(ui)* Instance Backup settings + +### 🚜 Refactor + +- *(dev)* Remove OpenAPI generation functionality +- *(migration)* Enhance local file volumes migration with logging + +### ⚙️ Miscellaneous Tasks + +- *(service)* Update minecraft service ENVs +- *(service)* Add more vars to infisical.yaml (#5418) +- *(service)* Add google variables to plausible.yaml (#5429) +- *(service)* Update authentik.yaml versions (#5373) +- *(core)* Remove redocs +- *(versions)* Update coolify version numbers to 4.0.0-beta.403 and 4.0.0-beta.404 + +## [4.0.0-beta.401] - 2025-03-28 + +### 📚 Documentation + +- Update changelog +- Update changelog + +## [4.0.0-beta.400] - 2025-03-27 + +### 🚀 Features + +- *(database)* Disable MongoDB SSL by default in migration +- *(database)* Add CA certificate generation for database servers +- *(application)* Add SPA configuration and update Nginx generation logic + +### 🐛 Bug Fixes + +- *(file-storage)* Double save on compose volumes +- *(parser)* Add logging support for applications in services + +### 🚜 Refactor + +- *(proxy)* Improve port availability checks with multiple methods +- *(database)* Update MongoDB SSL configuration for improved security +- *(database)* Enhance SSL configuration handling for various databases +- *(notifications)* Update Telegram button URL for staging environment +- *(models)* Remove unnecessary cloud check in isEnabled method +- *(database)* Streamline event listeners in Redis General component +- *(database)* Remove redundant database status display in MongoDB view +- *(database)* Update import statements for Auth in database components +- *(database)* Require PEM key file for SSL certificate regeneration +- *(database)* Change MySQL daemon command to MariaDB daemon +- *(nightly)* Update version numbers and enhance upgrade script +- *(versions)* Update version numbers for coolify and nightly +- *(email)* Validate team membership for email recipients +- *(shared)* Simplify deployment status check logic +- *(shared)* Add logging for running deployment jobs +- *(shared)* Enhance job status check to include 'reserved' +- *(email)* Improve error handling by passing context to handleError +- *(email)* Streamline email sending logic and improve configuration handling +- *(email)* Remove unnecessary whitespace in email sending logic +- *(email)* Allow custom email recipients in email sending logic +- *(email)* Enhance sender information formatting in email logic +- *(proxy)* Remove redundant stop call in restart method +- *(file-storage)* Add loadStorageOnServer method for improved error handling +- *(docker)* Parse and sanitize YAML compose file before encoding +- *(file-storage)* Improve layout and structure of input fields +- *(email)* Update label for test email recipient input +- *(database-backup)* Remove existing Docker container before backup upload +- *(database)* Improve decryption and deduplication of local file volumes +- *(database)* Remove debug output from volume update process + +### 📚 Documentation + +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Update version numbers for coolify and nightly + +### ◀️ Revert + +- Encrypting mount and fs_path + +## [4.0.0-beta.399] - 2025-03-25 + +### 🚀 Features + +- *(service)* Neon +- *(migration)* Add `ssl_certificates` table and model +- *(migration)* Add ssl setting to `standalone_postgresqls` table +- *(ui)* Add ssl settings to Postgres ui +- *(db)* Add ssl mode to Postgres URLs +- *(db)* Setup ssl during Postgres start +- *(migration)* Encrypt local file volumes content and paths +- *(ssl)* Ssl generation helper +- *(ssl)* Migrate to `ECC`certificates using `secp521r1` +- *(ssl)* Improve SSL helper +- *(ssl)* Add a Coolify CA Certificate to all servers +- *(seeder)* Call CA SSL seeder in prod and dev +- *(ssl)* Add Coolify CA Certificate when adding a new server +- *(installer)* Create CA folder during installation +- *(ssl)* Improve SSL helper +- *(ssl)* Use new improved helper for SSL generation +- *(ui)* Add CA cert UI +- *(ui)* New copy button component +- *(ui)* Use new copy button component everywhere +- *(ui)* Improve server advanced view +- *(migration)* Add CN and alternative names to DB +- *(databases)* Add CA SSL crt location to Postgres URLs +- *(ssl)* Improve ssl generation +- *(ssl)* Regenerate SSL certs job +- *(ssl)* Regenerate certificate and valid until UI +- *(ssl)* Regenerate CA cert and all other certs logic +- *(ssl)* Add full MySQL SSL Support +- *(ssl)* Add full MariaDB SSL support +- *(ssl)* Add `openssl.conf` to configure SSL extension properly +- *(ssl)* Improve SSL generation and security a lot +- *(ssl)* Check for SSL renewal twice daily +- *(ssl)* Add SSL relationships to all DBs +- Add full SSL support to MongoDB +- *(ssl)* Fix some issues and improve ssl generation helper +- *(ssl)* Ability to create `.pem` certs and add `clientAuth` to `extendedKeyUsage` +- *(ssl)* New modes for MongoDB and get `caCert` and `mountPath` correctly +- *(ssl)* Full SSL support for Redis +- New mode implementation for MongoDB +- *(ssl)* Improve Redis and remove modes +- Full SSL support for DrangonflyDB +- SSL notification +- *(github-source)* Enhance GitHub App configuration with manual and private key support +- *(ui)* Improve GitHub repository selection and styling +- *(database)* Implement two-step confirmation for database deletion +- *(assets)* Add new SVG logo for Coolify +- *(install)* Enhance Docker address pool configuration and validation +- *(install)* Improve Docker address pool management and service restart logic +- *(install)* Add missing env variable to install script +- *(LocalFileVolume)* Add binary file detection and update UI logic +- *(templates)* Change glance for v0.7 +- *(templates)* Add Freescout service template +- *(service)* Add Evolution API template +- *(service)* Add evolution-api and neon-ws-proxy templates +- *(svg)* Add coolify and evolution-api SVG logos +- *(api)* Add api to create custom services +- *(api)* Separate create and one-click routes +- *(api)* Update Services api routes and handlers +- *(api)* Unify service creation endpoint and enhance validation +- *(notifications)* Add discord ping functionality and settings +- *(user)* Implement session deletion on password reset +- *(github)* Enhance repository loading and validation in applications + +### 🐛 Bug Fixes + +- *(api)* Docker compose based apps creationg through api +- *(database)* Improve database type detection for Supabase Postgres images +- *(ssl)* Permission of ssl crt and key inside the container +- *(ui)* Make sure file mounts do not showing the encrypted values +- *(ssl)* Make default ssl mode require not verify-full as it does not need a ca cert +- *(ui)* Select component should not always uses title case +- *(db)* SSL certificates table and model +- *(migration)* Ssl certificates table +- *(databases)* Fix database name users new `uuid` instead of DB one +- *(database)* Fix volume and file mounts and naming +- *(migration)* Store subjectAlternativeNames as a json array in the db +- *(ssl)* Make sure the subjectAlternativeNames are unique and stored correctly +- *(ui)* Certificate expiration data is null before starting the DB +- *(deletion)* Fix DB deletion +- *(ssl)* Improve SSL cert file mounts +- *(ssl)* Always create ca crt on disk even if it is already there +- *(ssl)* Use mountPath parameter not a hardcoded path +- *(ssl)* Use 1 instead of on for mysql +- *(ssl)* Do not remove SSL directory +- *(ssl)* Wrong ssl cert is loaded to the server and UI error when regenerating SSL +- *(ssl)* Make sure when regenerating the CA cert it is not overwritten with a server cert +- *(ssl)* Regenerating certs for a specific DB +- *(ssl)* Fix MariaDB and MySQL need CA cert +- *(ssl)* Add mount path to DB to fix regeneration of certs +- *(ssl)* Fix SSL regeneration to sign with CA cert and use mount path +- *(ssl)* Get caCert correctly +- *(ssl)* Remove caCert even if it is a folder by accident +- *(ssl)* Ger caCert and `mountPath` correctly +- *(ui)* Only show Regenerate SSL Certificates button when there is a cert +- *(ssl)* Server id +- *(ssl)* When regenerating SSL certs the cert is not singed with the new CN +- *(ssl)* Adjust ca paths for MySQL +- *(ssl)* Remove mode selection for MariaDB as it is not supported +- *(ssl)* Permission issue with MariDB cert and key and paths +- *(ssl)* Rename Redis mode to verify-ca as it is not verify-full +- *(ui)* Remove unused mode for MongoDB +- *(ssl)* KeyDB port and caCert args are missing +- *(ui)* Enable SSL is not working correctly for KeyDB +- *(ssl)* Add `--tls` arg to DrangflyDB +- *(notification)* Always send SSL notifications +- *(database)* Change default value of enable_ssl to false for multiple tables +- *(ui)* Correct grammatical error in 404 page +- *(seeder)* Update GitHub app name in GithubAppSeeder +- *(plane)* Update APP_RELEASE to v0.25.2 in environment configuration +- *(domain)* Dispatch refreshStatus event after successful domain update +- *(database)* Correct container name generation for service databases +- *(database)* Limit container name length for database proxy +- *(database)* Handle unsupported database types in StartDatabaseProxy +- *(database)* Simplify container name generation in StartDatabaseProxy +- *(install)* Handle potential errors in Docker address pool configuration +- *(backups)* Retention settings +- *(redis)* Set default redis_username for new instances +- *(core)* Improve instantSave logic and error handling +- *(general)* Correct link to framework specific documentation +- *(core)* Redirect healthcheck route for dockercompose applications +- *(api)* Use name from request payload +- *(issue#4746)* Do not use setGitImportSettings inside of generateGitLsRemoteCommands +- Correct some spellings +- *(service)* Replace deprecated credentials env variables on keycloak service +- *(keycloak)* Update keycloak image version to 26.1 +- *(console)* Handle missing root user in password reset command +- *(ssl)* Handle missing CA certificate in SSL regeneration job +- *(copy-button)* Ensure text is safely passed to clipboard + +### 💼 Other + +- Bump Coolify to 4.0.0-beta.400 +- *(migration)* Add SSL fields to database tables +- SSL Support for KeyDB + +### 🚜 Refactor + +- *(ui)* Unhide log toggle in application settings +- *(nginx)* Streamline default Nginx configuration and improve error handling +- *(install)* Clean up install script and enhance Docker installation logic +- *(ScheduledTask)* Clean up code formatting and remove unused import +- *(app)* Remove unused MagicBar component and related code +- *(database)* Streamline SSL configuration handling across database types +- *(application)* Streamline healthcheck parsing from Dockerfile +- *(notifications)* Standardize getRecipients method signatures +- *(configuration)* Centralize configuration management in ConfigurationRepository +- *(docker)* Update image references to use centralized registry URL +- *(env)* Add centralized registry URL to environment configuration +- *(storage)* Simplify file storage iteration in Blade template +- *(models)* Add is_directory attribute to LocalFileVolume model +- *(modal)* Add ignoreWire attribute to modal-confirmation component +- *(invite-link)* Adjust layout for better responsiveness in form +- *(invite-link)* Enhance form layout for improved responsiveness +- *(network)* Enhance docker network creation with ipv6 fallback +- *(network)* Check for existing coolify network before creation +- *(database)* Enhance encryption process for local file volumes + +### 📚 Documentation + +- Update changelog +- Update changelog +- *(CONTRIBUTING)* Add note about Laravel Horizon accessibility +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(migration)* Remove unused columns +- *(ssl)* Improve code in ssl helper +- *(migration)* Ssl cert and key should not be nullable +- *(ssl)* Rename CA cert to `coolify-ca.crt` because of conflicts +- Rename ca crt folder to ssl +- *(ui)* Improve valid until handling +- Improve code quality suggested by code rabbit +- *(supabase)* Update Supabase service template and Postgres image version +- *(versions)* Update version numbers for coolify and nightly + +## [4.0.0-beta.398] - 2025-03-01 + +### 🚀 Features + +- *(billing)* Add Stripe past due subscription status tracking +- *(ui)* Add past due subscription warning banner + +### 🐛 Bug Fixes + +- *(billing)* Restrict Stripe subscription status update to 'active' only + +### 💼 Other + +- Bump Coolify to 4.0.0-beta.398 + +### 🚜 Refactor + +- *(billing)* Enhance Stripe subscription status handling and notifications + +## [4.0.0-beta.397] - 2025-02-28 + +### 🐛 Bug Fixes + +- *(billing)* Handle 'past_due' subscription status in Stripe processing +- *(revert)* Label parsing +- *(helpers)* Initialize command variable in parseCommandFromMagicEnvVariable + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.396] - 2025-02-28 + +### 🚀 Features + +- *(ui)* Add wire:key to two-step confirmation settings +- *(database)* Add index to scheduled task executions for improved query performance +- *(database)* Add index to scheduled database backup executions + +### 🐛 Bug Fixes + +- *(core)* Production dockerfile +- *(ui)* Update storage configuration guidance link +- *(ui)* Set default SMTP encryption to starttls +- *(notifications)* Correct environment URL path in application notifications +- *(config)* Update default PostgreSQL host to coolify-db instead of postgres +- *(docker)* Improve Docker compose file validation process +- *(ui)* Restrict service retrieval to current team +- *(core)* Only validate custom compose files +- *(mail)* Set default mailer to array when not specified +- *(ui)* Correct redirect routes after task deletion +- *(core)* Adding a new server should not try to make the default docker network +- *(core)* Clean up unnecessary files during application image build +- *(core)* Improve label generation and merging for applications and services + +### 💼 Other + +- Bump all dependencies (#5216) + +### 🚜 Refactor + +- *(ui)* Simplify file storage modal confirmations +- *(notifications)* Improve transactional email settings handling +- *(scheduled-tasks)* Improve scheduled task creation and management + +### 📚 Documentation + +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- Bump helper and realtime version + +## [4.0.0-beta.395] - 2025-02-22 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.394] - 2025-02-17 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.393] - 2025-02-15 + +### 📚 Documentation + +- Update changelog + +## [4.0.0-beta.392] - 2025-02-13 + +### 🚀 Features + +- *(ui)* Add top padding to pricing plans view +- *(core)* Add error logging and cron parsing to docker/server schedules +- *(core)* Prevent using servers with existing resources as build servers +- *(ui)* Add textarea switching option in service compose editor + +### 🐛 Bug Fixes + +- Pull latest image from registry when using build server +- *(deployment)* Improve server selection for deployment cancellation +- *(deployment)* Improve log line rendering and formatting +- *(s3-storage)* Optimize team admin notification query +- *(core)* Improve connection testing with dynamic disk configuration for s3 backups +- *(core)* Update service status refresh event handling +- *(ui)* Adjust polling intervals for database and service status checks +- *(service)* Update Fider service template healthcheck command +- *(core)* Improve server selection error handling in Docker component +- *(core)* Add server functionality check before dispatching container status +- *(ui)* Disable sticky scroll in Monaco editor +- *(ui)* Add literal and multiline env support to services. +- *(services)* Owncloud docs link +- *(template)* Remove db-migration step from `infisical.yaml` (#5209) +- *(service)* Penpot (#5047) + +### 🚜 Refactor + +- Use pull flag on docker compose up + +### 📚 Documentation + +- Update changelog +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- Rollback Coolify version to 4.0.0-beta.392 +- Bump Coolify version to 4.0.0-beta.393 +- Bump Coolify version to 4.0.0-beta.394 +- Bump Coolify version to 4.0.0-beta.395 +- Bump Coolify version to 4.0.0-beta.396 +- *(services)* Update zipline to use new Database env var. (#5210) +- *(service)* Upgrade authentik service +- *(service)* Remove unused env from zipline + +## [4.0.0-beta.391] - 2025-02-04 + +### 🚀 Features + +- Add application api route +- Container logs +- Remove ansi color from log +- Add lines query parameter +- *(changelog)* Add git cliff for automatic changelog generation +- *(workflows)* Improve changelog generation and workflows +- *(ui)* Add periodic status checking for services +- *(deployment)* Ensure private key is stored in filesystem before deployment +- *(slack)* Show message title in notification previews (#5063) +- *(i18n)* Add Arabic translations (#4991) +- *(i18n)* Add French translations (#4992) +- *(services)* Update `service-templates.json` + +### 🐛 Bug Fixes + +- *(core)* Improve deployment failure Slack notification formatting +- *(core)* Update Slack notification formatting to use bold correctly +- *(core)* Enhance Slack deployment success notification formatting +- *(ui)* Simplify service templates loading logic +- *(ui)* Align title and add button vertically in various views +- Handle pullrequest:updated for reliable preview deployments +- *(ui)* Fix typo on team page (#5105) +- Cal.com documentation link give 404 (#5070) +- *(slack)* Notification settings URL in `HighDiskUsage` message (#5071) +- *(ui)* Correct typo in Storage delete dialog (#5061) +- *(lang)* Add missing italian translations (#5057) +- *(service)* Improve duplicati.yaml (#4971) +- *(service)* Links in homepage service (#5002) +- *(service)* Added SMTP credentials to getoutline yaml template file (#5011) +- *(service)* Added `KEY` Variable to Beszel Template (#5021) +- *(cloudflare-tunnels)* Dead links to docs (#5104) +- System-wide GitHub apps (#5114) + +### 🚜 Refactor + +- Simplify service start and restart workflows + +### 📚 Documentation + +- *(services)* Reword nitropage url and slogan +- *(readme)* Add Convex to special sponsors section +- Update changelog + +### ⚙️ Miscellaneous Tasks + +- *(config)* Increase default PHP memory limit to 256M +- Add openapi response +- *(workflows)* Make naming more clear and remove unused code +- Bump Coolify version to 4.0.0-beta.392/393 +- *(ci)* Update changelog generation workflow to target 'next' branch +- *(ci)* Update changelog generation workflow to target main branch + +## [4.0.0-beta.390] - 2025-01-28 + +### 🚀 Features + +- *(template)* Add Open Web UI +- *(templates)* Add Open Web UI service template +- *(ui)* Update GitHub source creation advanced section label +- *(core)* Add dynamic label reset for application settings +- *(ui)* Conditionally enable advanced application settings based on label readonly status +- *(env)* Added COOLIFY_RESOURCE_UUID environment variable +- *(vite)* Add Cloudflare async script and style tag attributes +- *(meta)* Add comprehensive SEO and social media meta tags +- *(core)* Add name to default proxy configuration + +### 🐛 Bug Fixes + +- *(ui)* Update database control UI to check server functionality before displaying actions +- *(ui)* Typo in upgrade message +- *(ui)* Cloudflare tunnel configuration should be an info, not a warning +- *(s3)* DigitalOcean storage buckets do not work +- *(ui)* Correct typo in container label helper text +- Disable certain parts if readonly label is turned off +- Cleanup old scheduled_task_executions +- Validate cron expression in Scheduled Task update +- *(core)* Check cron expression on save +- *(database)* Detect more postgres database image types +- *(templates)* Update service templates +- Remove quotes in COOLIFY_CONTAINER_NAME +- *(templates)* Update Trigger.dev service templates with v3 configuration +- *(database)* Adjust MongoDB restore command and import view styling +- *(core)* Improve public repository URL parsing for branch and base directory +- *(core)* Increase HTTP/2 max concurrent streams to 250 (default) +- *(ui)* Update docker compose file helper text to clarify repository modification +- *(ui)* Skip SERVICE_FQDN and SERVICE_URL variables during update +- *(core)* Stopping database is not disabling db proxy +- *(core)* Remove --remove-orphans flag from proxy startup command to prevent other proxy deletions (db) +- *(api)* Domain check when updating domain +- *(ui)* Always redirect to dashboard after team switch +- *(backup)* Escape special characters in database backup commands + +### 💼 Other + +- Trigger.dev templates - wrong key length issue +- Trigger.dev template - missing ports and wrong env usage +- Trigger.dev template - fixed otel config +- Trigger.dev template - fixed otel config +- Trigger.dev template - fixed port config + +### 🚜 Refactor + +- *(s3)* Improve S3 bucket endpoint formatting +- *(vite)* Improve environment variable handling in Vite configuration +- *(ui)* Simplify GitHub App registration UI and layout + +### ⚙️ Miscellaneous Tasks + +- *(version)* Bump Coolify version to 4.0.0-beta.391 + +### ◀️ Revert + +- Remove Cloudflare async tag attributes + +## [4.0.0-beta.389] - 2025-01-23 + +### 🚀 Features + +- *(docs)* Update tech stack +- *(terminal)* Show terminal unavailable if the container does not have a shell on the global terminal UI +- *(ui)* Improve deployment UI + +### 🐛 Bug Fixes + +- *(service)* Infinite loading and lag with invoiceninja service (#4876) +- *(service)* Invoiceninja service +- *(workflows)* `Waiting for changes` label should also be considered and improved messages +- *(workflows)* Remove tags only if the PR has been merged into the main branch +- *(terminal)* Terminal shows that it is not available, even though it is +- *(labels)* Docker labels do not generated correctly +- *(helper)* Downgrade Nixpacks to v1.29.0 +- *(labels)* Generate labels when they are empty not when they are already generated +- *(storage)* Hetzner storage buckets not working + +### 📚 Documentation + +- Add TECH_STACK.md (#4883) + +### ⚙️ Miscellaneous Tasks + +- *(versions)* Update coolify versions to v4.0.0-beta.389 +- *(core)* EnvironmentVariable Model now extends BaseModel to remove duplicated code +- *(versions)* Update coolify versions to v4.0.0-beta.3909 + +## [4.0.0-beta.388] - 2025-01-22 + +### 🚀 Features + +- *(core)* Add SOURCE_COMMIT variable to build environment in ApplicationDeploymentJob +- *(service)* Update affine.yaml with AI environment variables (#4918) +- *(service)* Add new service Flipt (#4875) + +### 🐛 Bug Fixes + +- *(core)* Update environment variable generation logic in ApplicationDeploymentJob to handle different build packs +- *(env)* Shared variables can not be updated +- *(ui)* Metrics stuck in loading state +- *(ui)* Use `wire:navigate` to navigate to the server settings page +- *(service)* Plunk API & health check endpoint (#4925) + +## [4.0.0-beta.386] - 2025-01-22 + +### 🐛 Bug Fixes + +- *(redis)* Update environment variable keys from standalone_redis_id to resourceable_id +- *(routes)* Local API docs not available on domain or IP +- *(routes)* Local API docs not available on domain or IP +- *(core)* Update application_id references to resourable_id and resourable_type for Nixpacks configuration +- *(core)* Correct spelling of 'resourable' to 'resourceable' in Nixpacks configuration for ApplicationDeploymentJob +- *(ui)* Traefik dashboard url not working +- *(ui)* Proxy status badge flashing during navigation + +### 🚜 Refactor + +- *(workflows)* Replace jq with PHP script for version retrieval in workflows + +### ⚙️ Miscellaneous Tasks + +- *(dep)* Bump helper version to 1.0.5 +- *(docker)* Add blank line for readability in Dockerfile +- *(versions)* Update coolify versions to v4.0.0-beta.388 +- *(versions)* Update coolify versions to v4.0.0-beta.389 and add helper version retrieval script + +## [4.0.0-beta.385] - 2025-01-21 + +### 🚀 Features + +- *(core)* Wip version of coolify.json + +### 🐛 Bug Fixes + +- *(email)* Transactional email sending +- *(ui)* Add missing save button for new Docker Cleanup page +- *(ui)* Show preview deployment environment variables +- *(ui)* Show error on terminal if container has no shell (bash/sh) +- *(parser)* Resource URL should only be parsed if there is one +- *(core)* Compose parsing for apps + +### ⚙️ Miscellaneous Tasks + +- *(dep)* Bump nixpacks version +- *(dep)* Version++ + +## [4.0.0-beta.384] - 2025-01-21 + +### 🐛 Bug Fixes + +- *(ui)* Backups link should not redirected to general +- Envs with special chars during build +- *(db)* `finished_at` timestamps are not set for existing deployments +- Load service templates on cloud + +## [4.0.0-beta.383] - 2025-01-20 + +### 🐛 Bug Fixes + +- *(service)* Add healthcheck to Cloudflared service (#4859) +- Remove wire:navigate from import backups + +## [4.0.0-beta.382] - 2025-01-17 + +### 🚀 Features + +- Add log file check message in upgrade script for better troubleshooting +- Add root user details to install script + +### 🐛 Bug Fixes + +- Create the private key before the server in the prod seeder +- Update ProductionSeeder to check for private key instead of server's private key +- *(ui)* Missing underline for docs link in the Swarm section (#4860) +- *(service)* Change chatwoot service postgres image from `postgres:12` to `pgvector/pgvector:pg12` +- Docker image parser +- Add public key attribute to privatekey model +- Correct service update logic in Docker Compose parser +- Update CDN URL in install script to point to nightly version + +### 🚜 Refactor + +- Comment out RootUserSeeder call in ProductionSeeder for clarity +- Streamline ProductionSeeder by removing debug logs and unnecessary checks, while ensuring essential seeding operations remain intact +- Remove debug echo statements from Init command to clean up output and improve readability + +## [4.0.0-beta.381] - 2025-01-17 + +### 🚀 Features + +- Able to import full db backups for pg/mysql/mariadb +- Restore backup from server file +- Docker volume data cloning +- Move volume data cloning to a Job +- Volume cloning for ResourceOperations +- Remote server volume cloning +- Add horizon server details to queue +- Enhance horizon:manage command with worker restart check +- Add is_coolify_host to the server api responses +- DB migration for Backup retention +- UI for backup retention settings +- New global s3 and local backup deletion function +- Use new backup deletion functions +- Add calibre-web service +- Add actual-budget service +- Add rallly service +- Template for Gotenberg, a Docker-powered stateless API for PDF files +- Enhance import command options with additional guidance and improved checkbox label +- Purify for better sanitization +- Move docker cleanup to its own tab +- DB and Model for docker cleanup executions +- DockerCleanupExecutions relationship +- DockerCleanupDone event +- Get command and output for logs from CleanupDocker +- New sidebar menu and order +- Docker cleanup executions UI +- Add execution log to dockerCleanupJob +- Improve deployment UI +- Root user envs and seeding +- Email, username and password validation when they are set via envs +- Improved error handling and log output +- Add root user configuration variables to production environment + +### 🐛 Bug Fixes + +- Compose envs +- Scheduled tasks and backups are executed by server timezone. +- Show backup timezone on the UI +- Disappearing UI after livewire event received +- Add default vector db for anythingllm +- We need XSRF-TOKEN for terminal +- Prevent default link behavior for resource and settings actions in dashboard +- Increase default php memory limit +- Show if only build servers are added to your team +- Update Livewire button click method to use camelCase +- Local dropzonejs +- Import backups due to js stuff should not be navigated +- Install inetutils on Arch Linux +- Use ip in place of hostname from inetutils in arch +- Update import command to append file redirection for database restoration +- Ui bug on pw confirmation +- Exclude system and computed fields from model replication +- Service cloning on a separate server +- Application cloning +- `Undefined variable $fs_path` for databases +- Service and database cloning and label generation +- Labels and URL generation when cloning +- Clone naming for different database data volumes +- Implement all the cloneMe changes for ResourceOperations as well +- Volume and fileStorages cloning +- View text and helpers +- Teable +- Trigger with external db +- Set `EXPERIMENTAL_FEATURES` to false for labelstudio +- Monaco editor disabled state +- Edge case where executions could be null +- Create destination properly +- Getcontainer status should timeout after 30s +- Enable response for temporary unavailability in sentinel push endpoint +- Use timeout in cleanup resources +- Add timeout to sentinel process checks for improved reliability +- Horizon job checker +- Update response message for sentinel push route +- Add own servers on cloud +- Application deployment +- Service update statsu +- If $SERVICE found in the service specific configuration, then search for it in the db +- Instance wide GitHub apps are not available on other teams then the source team +- Function calls +- UI +- Deletion of single backup +- Backup job deletion - delete all backups from s3 and local +- Use new removeOldBackups function +- Retention functions and folder deletion for local backups +- Storage retention setting +- Db without s3 should still backup +- Wording +- `Undefined variable $service` when creating a new service +- Nodebb service +- Calibre-web service +- Rallly and actualbudget service +- Removed container_name +- Added healthcheck for gotenberg template +- Gotenberg +- *(template)* Gotenberg healthcheck, use /health instead of /version +- Use wire:navigate on sidebar +- Use wire:navigate on dashboard +- Use wire:navigate on projects page +- More wire:navigate +- Even more wire:navigate +- Service navigation +- Logs icons everywhere + terminal +- Redis DB should use the new resourceable columns +- Joomla service +- Add back letters to prod password requirement +- Check System and GitHub time and throw and error if it is over 50s out of sync +- Error message and server time getting +- Error rendering +- Render html correctly now +- Indent +- Potential fix for permissions update +- Expiration time claim ('exp') must be a numeric value +- Sanitize html error messages +- Production password rule and cleanup code +- Use json as it is just better than string for huge amount of logs +- Use `wire:navigate` on server sidebar +- Use finished_at for the end time instead of created_at +- Cancelled deployments should not show end and duration time +- Redirect to server index instead of show on error in Advanced and DockerCleanup components +- Disable registration after creating the root user +- RootUserSeeder +- Regex username validation +- Add spacing around echo outputs +- Success message +- Silent return if envs are empty or not set. + +### 💼 Other + +- Arrrrr +- Dep +- Docker dep + +### 🚜 Refactor + +- Rename parameter in DatabaseBackupJob for clarity +- Improve checkbox component accessibility and styling +- Remove unused tags method from ApplicationDeploymentJob +- Improve deployment status check in isAnyDeploymentInprogress function +- Extend HorizonServiceProvider from HorizonApplicationServiceProvider +- Streamline job status retrieval and clean up repository interface +- Enhance ApplicationDeploymentJob and HorizonServiceProvider for improved job handling +- Remove commented-out unsubscribe route from API +- Update redirect calls to use a consistent navigation method in deployment functions +- AppServiceProvider +- Github.php +- Improve data formatting and UI + +### ⚙️ Miscellaneous Tasks + +- Improve Penpot healthchecks +- Switch up readonly lables to make more sense +- Remove unused computed fields +- Use the new job dispatch +- Disable volume data cloning for now +- Improve code +- Lowcoder service naming +- Use new functions +- Improve error styling +- Css +- More css as it still looks like shit +- Final css touches +- Ajust time to 50s (tests done) +- Remove debug log, finally found it +- Remove more logging +- Remove limit on commit message +- Remove dayjs +- Remove unused code and fix import + +## [4.0.0-beta.380] - 2024-12-27 + +### 🚀 Features + +- New ServerReachabilityChanged event +- Use new ServerReachabilityChanged event instead of isDirty +- Add infomaniak oauth +- Add server disk usage check frequency +- Add environment_uuid support and update API documentation +- Add service/resource/project labels +- Add coolify.environment label +- Add database subtype +- Migrate to new encryption options +- New encryption options + +### 🐛 Bug Fixes + +- Render html on error page correctly +- Invalid API response on missing project +- Applications API response code + schema +- Applications API writing to unavailable models +- If an init script is renamed the old version is still on the server +- Oauthseeder +- Compose loading seq +- Resource clone name + volume name generation +- Update Dockerfile entrypoint path to /etc/entrypoint.d +- Debug mode +- Unreachable notifications +- Remove duplicated ServerCheckJob call +- Few fixes and use new ServerReachabilityChanged event +- Use serverStatus not just status +- Oauth seeder +- Service ui structure +- Check port 8080 and fallback to 80 +- Refactor database view +- Always use docker cleanup frequency +- Advanced server UI +- Html css +- Fix domain being override when update application +- Use nixpacks predefined build variables, but still could update the default values from Coolify +- Use local monaco-editor instead of Cloudflare +- N8n timezone +- Smtp encryption +- Bind() to 0.0.0.0:80 failed +- Oauth seeder +- Unreachable notifications +- Instance settings migration +- Only encrypt instance email settings if there are any +- Error message +- Update healthcheck and port configurations to use port 8080 + +### 🚜 Refactor + +- Rename `coolify.environment` to `coolify.environmentName` + +### ⚙️ Miscellaneous Tasks + +- Regenerate API spec, removing notification fields +- Remove ray debugging +- Version ++ + +## [4.0.0-beta.378] - 2024-12-13 + +### 🐛 Bug Fixes + +- Monaco editor light and dark mode switching +- Service status indicator + oauth saving +- Socialite for azure and authentik +- Saving oauth +- Fallback for copy button +- Copy the right text +- Maybe fallback is now working +- Only show copy button on secure context + +## [4.0.0-beta.377] - 2024-12-13 + +### 🚀 Features + +- Add deploy-only token permission +- Able to deploy without cache on every commit +- Update private key nam with new slug as well +- Allow disabling default redirect, set status to 503 +- Add TLS configuration for default redirect in Server model +- Slack notifications +- Introduce root permission +- Able to download schedule task logs +- Migrate old email notification settings from the teams table +- Migrate old discord notification settings from the teams table +- Migrate old telegram notification settings from the teams table +- Add slack notifications to a new table +- Enable success messages again +- Use new notification stuff inside team model +- Some more notification settings and better defaults +- New email notification settings +- New shared function name `is_transactional_emails_enabled()` +- New shared notifications functions +- Email Notification Settings Model +- Telegram notification settings Model +- Discord notification settings Model +- Slack notification settings Model +- New Discord notification UI +- New Slack notification UI +- New telegram UI +- Use new notification event names +- Always sent notifications +- Scheduled task success notification +- Notification trait +- Get discord Webhook form new table +- Get Slack Webhook form new table +- Use new table or instance settings for email +- Use new place for settings and topic IDs for telegram +- Encrypt instance email settings +- Use encryption in instance settings model +- Scheduled task success and failure notifications +- Add docker cleanup success and failure notification settings columns +- UI for docker cleanup success and failure notification +- Docker cleanup email views +- Docker cleanup success and failure notification files +- Scheduled task success email +- Send new docker cleanup notifications +- :passport_control: integrate Authentik authentication with Coolify +- *(notification)* Add Pushover +- Add seeder command and configuration for database seeding +- Add new password magic env with symbols +- Add documenso service + +### 🐛 Bug Fixes + +- Resolve undefined searchInput reference in Alpine.js component +- URL and sync new app name +- Typos and naming +- Client and webhook secret disappear after sync +- Missing `mysql_password` API property +- Incorrect MongoDB init API property +- Old git versions does not have --cone implemented properly +- Don't allow editing traefik config +- Restart proxy +- Dev mode +- Ui +- Display actual values for disk space checks in installer script +- Proxy change behaviour +- Add warning color +- Import NotificationSlack correctly +- Add middleware to new abilities, better ux for selecting permissions, etc. +- Root + read:sensive could read senstive data with a middlewarew +- Always have download logs button on scheduled tasks +- Missing css +- Development image +- Dockerignore +- DB migration error +- Drop all unused smtp columns +- Backward compatibility +- Email notification channel enabled function +- Instance email settins +- Make sure resend is false if SMTP is true and vice versa +- Email Notification saving +- Slack and discord url now uses text filed because encryption makes the url very long +- Notification trait +- Encryption fixes +- Docker cleanup email template +- Add missing deployment notifications to telegram +- New docker cleanup settings are now saved to the DB correctly +- Ui + migrations +- Docker cleanup email notifications +- General notifications does not go through email channel +- Test notifications to only send it to the right channel +- Remove resale_license from db as well +- Nexus service +- Fileflows volume names +- --cone +- Provider error +- Database migration +- Seeder +- Migration call +- Slack helper +- Telegram helper +- Discord helper +- Telegram topic IDs +- Make pushover settings more clear +- Typo in pushover user key +- Use Livewire refresh method and lock properties +- Create pushover settings for existing teams +- Update token permission check from 'write' to 'root' +- Pushover +- Oauth seeder +- Correct heading display for OAuth settings in settings-oauth.blade.php +- Adjust spacing in login form for improved layout +- Services env values should be sensitive +- Documenso +- Dolibarr +- Typo +- Update OauthSettingSeeder to handle new provider definitions and ensure authentik is recreated if missing +- Improve OauthSettingSeeder to correctly delete non-existent providers and ensure proper handling of provider definitions +- Encrypt resend API key in instance settings +- Resend api key is already a text column + +### 💼 Other + +- Test rename GitHub app +- Checkmate service and fix prowlar slogan (too long) + +### 🚜 Refactor + +- Update Traefik configuration for improved security and logging +- Improve proxy configuration and code consistency in Server model +- Rename name method to sanitizedName in BaseModel for clarity +- Improve migration command and enhance application model with global scope and status checks +- Unify notification icon +- Remove unused Azure and Authentik service configurations from services.php +- Change email column types in instance_settings migration from string to text +- Change OauthSetting creation to updateOrCreate for better handling of existing records + +### ⚙️ Miscellaneous Tasks + +- Regenerate openapi spec +- Composer dep bump +- Dep bump +- Upgrade cloudflared and minio +- Remove comments and improve DB column naming +- Remove unused seeder +- Remove unused waitlist stuff +- Remove wired.php (not used anymore) +- Remove unused resale license job +- Remove commented out internal notification +- Remove more waitlist stuff +- Remove commented out notification +- Remove more waitlist stuff +- Remove unused code +- Fix typo +- Remove comment out code +- Some reordering +- Remove resale license reference +- Remove functions from shared.php +- Public settings for email notification +- Remove waitlist redirect +- Remove log +- Use new notification trait +- Remove unused route +- Remove unused email component +- Comment status changes as it is disabled for now +- Bump dep +- Reorder navbar +- Rename topicID to threadId like in the telegram API response +- Update PHP configuration to set memory limit using environment variable + +## [4.0.0-beta.376] - 2024-12-07 + +### 🐛 Bug Fixes + +- Api endpoint + +## [4.0.0-beta.374] - 2024-12-03 + +### 🐛 Bug Fixes + +- Application view loading +- Postiz service +- Only able to select the right keys +- Test email should not be required +- A few inputs + +### 🧪 Testing + +- Setup database for upcoming tests + +## [4.0.0-beta.372] - 2024-11-26 + +### 🚀 Features + +- Add MacOS template +- Add Windows template +- *(service)* :sparkles: add mealie +- Add hex magic env var + +### 🐛 Bug Fixes + +- Service generate includes yml files as well (haha) +- ServercheckJob should run every 5 minutes on cloud +- New resource icons +- Search should be more visible on scroll on new resource +- Logdrain settings +- Ui +- Email should be retried with backoff +- Alpine in body layout + +### 💼 Other + +- Caddy docker labels do not honor "strip prefix" option + +## [4.0.0-beta.371] - 2024-11-22 + +### 🐛 Bug Fixes + +- Improve helper text for metrics input fields +- Refine helper text for metrics input fields +- If mux conn fails, still use it without mux + save priv key with better logic +- Migration +- Always validate ssh key +- Make sure important jobs/actions are running on high prio queue +- Do not send internal notification for backups and status jobs +- Validateconnection +- View issue +- Heading +- Remove mux cleanup +- Db backup for services +- Version should come from constants + fix stripe webhook error reporting +- Undefined variable +- Remove version.php as everything is coming from constants.php +- Sentry error +- Websocket connections autoreconnect +- Sentry error +- Sentry +- Empty server API response +- Incorrect server API patch response +- Missing `uuid` parameter on server API patch +- Missing `settings` property on servers API +- Move servers API `delete_unused_*` properties +- Servers API returning `port` as a string -> integer +- Only return server uuid on server update + +## [4.0.0-beta.370] - 2024-11-15 + +### 🐛 Bug Fixes + +- Modal (+ add) on dynamic config was not opening, removed x-cloak +- AUTOUPDATE + checkbox opacity + +## [4.0.0-beta.369] - 2024-11-15 + +### 🐛 Bug Fixes + +- Modal-input + +## [4.0.0-beta.368] - 2024-11-15 + +### 🚀 Features + +- Check local horizon scheduler deployments +- Add internal api docs to /docs/api with auth +- Add proxy type change to create/update apis + +### 🐛 Bug Fixes + +- Show proper error message on invalid Git source +- Convert HTTP to SSH source when using deploy key on GitHub +- Cloud + stripe related +- Terminal view loading in async +- Cool 500 error (thanks hugodos) +- Update schema in code decorator +- Openapi docs +- Add tests for git url converts +- Minio / logto url generation +- Admin view +- Min docker version 26 +- Pull latest service-templates.json on init +- Workflow files for coolify build +- Autocompletes +- Timezone settings validation +- Invalid tz should not prevent other jobs to be executed +- Testing-host should be built locally +- Poll with modal issue +- Terminal opening issue +- If service img not found, use github as a source +- Fallback to local coolify.png +- Gather private ips +- Cf tunnel menu should be visible when server is not validated +- Deployment optimizations +- Init script + optimize laravel +- Default docker engine version + fix install script +- Pull helper image on init +- SPA static site default nginx conf + +### 💼 Other + +- Https://github.com/coollabsio/coolify/issues/4186 +- Separate resources by type in projects view +- Improve s3 add view + +### ⚙️ Miscellaneous Tasks + +- Update dep + +## [4.0.0-beta.365] - 2024-11-11 + +### 🚀 Features + +- Custom nginx configuration for static deployments + fix 404 redirects in nginx conf + +### 🐛 Bug Fixes + +- Trigger.dev db host & sslmode=disable +- Manual update should be executed only once + better UX +- Upgrade.sh +- Missing privateKey + +## [4.0.0-beta.364] - 2024-11-08 + +### 🐛 Bug Fixes + +- Define separate volumes for mattermost service template +- Github app name is too long +- ServerTimezone update + +### ⚙️ Miscellaneous Tasks + +- Edit www helper + +## [4.0.0-beta.363] - 2024-11-08 + +### 🚀 Features + +- Add Firefox template +- Add template for Wiki.js +- Add upgrade logs to /data/coolify/source + +### 🐛 Bug Fixes + +- Saving resend api key +- Wildcard domain save +- Disable cloudflare tunnel on "localhost" + +## [4.0.0-beta.362] - 2024-11-08 + +### 🐛 Bug Fixes + +- Notifications ui +- Disable wire:navigate +- Confirmation Settings css for light mode +- Server wildcard + +## [4.0.0-beta.361] - 2024-11-08 + +### 🚀 Features + +- Add Transmission template +- Add transmission healhcheck +- Add zipline template +- Dify template +- Required envs +- Add EdgeDB +- Show warning if people would like to use sslip with https +- Add is shared to env variables +- Variabel sync and support shared vars +- Add notification settings to server_disk_usage +- Add coder service tamplate and logo +- Debug mode for sentinel +- Add jitsi template +- Add --gpu support for custom docker command + +### 🐛 Bug Fixes + +- Make sure caddy is not removed by cleanup +- Libretranslate +- Do not allow to change number of lines when streaming logs +- Plunk +- No manual timezones +- Helper push +- Format +- Add port metadata and Coolify magic to generate the domain +- Sentinel +- Metrics +- Generate sentinel url +- Only enable Sentinel for new servers +- Is_static through API +- Allow setting standalone redis variables via ENVs (team variables...) +- Check for username separately form password +- Encrypt all existing redis passwords +- Pull helper image on helper_version change +- Redis database user and password +- Able to update ipv4 / ipv6 instance settings +- Metrics for dbs +- Sentinel start fixed +- Validate sentinel custom URL when enabling sentinel +- Should be able to reset labels in read-only mode with manual click +- No sentinel for swarm yet +- Charts ui +- Volume +- Sentinel config changes restarts sentinel +- Disable sentinel for now +- Disable Sentinel temporarily +- Disable Sentinel temporarily for non-dev environments +- Access team's github apps only +- Admins should now invite owner +- Add experimental flag +- GenerateSentinelUrl method +- NumberOfLines could be null +- Login / register view +- Restart sentinel once a day +- Changing private key manually won't trigger a notification +- Grammar for helper +- Fix my own grammar +- Add telescope only in dev mode +- New way to update container statuses +- Only run server storage every 10 mins if sentinel is not active +- Cloud admin view +- Queries in kernel.php +- Lower case emails only +- Change emails to lowercase on init +- Do not error on update email +- Always authenticate with lowercase emails +- Dashboard refactor +- Add min/max length to input/texarea +- Remove livewire legacy from help view +- Remove unnecessary endpoints (magic) +- Transactional email livewire +- Destinations livewire refactor +- Refactor destination/docker view +- Logdrains validation +- Reworded +- Use Auth(), add new db proxy stop event refactor clickhouse view +- Add user/pw to db view +- Sort servers by name +- Keydb view +- Refactor tags view / remove obsolete one +- Send discord/telegram notifications on high job queue +- Server view refresh on validation +- ShowBoarding +- Show docker installation logs & ubuntu 24.10 notification +- Do not overlap servercheckjob +- Server limit check +- Server validation +- Clear route / view +- Only skip docker installation on 24.10 if its not installed +- For --gpus device support +- Db/service start should be on high queue +- Do not stop sentinel on Coolify restart +- Run resourceCheck after new serviceCheckJob +- Mongodb in dev +- Better invitation errors +- Loading indicator for db proxies +- Do not execute gh workflow on template changes +- Only use sentry in cloud +- Update packagejson of coolify-realtime + add lock file +- Update last online with old function +- Seeder should not start sentinel +- Start sentinel on seeder + +### 💼 Other + +- Add peppermint +- Loggy +- Add UI for redis password and username +- Wireguard-easy template + +### 📚 Documentation + +- Update link to deploy api docs + +### ⚙️ Miscellaneous Tasks + +- Add transmission template desc +- Update transmission docs link +- Update version numbers to 4.0.0-beta.360 in configuration files +- Update AWS environment variable names in unsend.yaml +- Update AWS environment variable names in unsend.yaml +- Update livewire/livewire dependency to version 3.4.9 +- Update version to 4.0.0-beta.361 +- Update Docker build and push actions to v6 +- Update Docker build and push actions to v6 +- Update Docker build and push actions to v6 +- Sync coolify-helper to dockerhub as well +- Push realtime to dockerhub +- Sync coolify-realtime to dockerhub +- Rename workflows +- Rename development to staging build +- Sync coolify-testing-host to dockerhbu +- Sync coolify prod image to dockerhub as well +- Update Docker version to 26.0 +- Update project resource index page +- Update project service configuration view + +## [4.0.0-beta.360] - 2024-10-11 + +### ⚙️ Miscellaneous Tasks + +- Update livewire/livewire dependency to version 3.4.9 + +## [4.0.0-beta.359] - 2024-10-11 + +### 🐛 Bug Fixes + +- Use correct env variable for invoice ninja password + +### ⚙️ Miscellaneous Tasks + +- Update laravel/horizon dependency to version 5.29.1 +- Update service extra fields to use dynamic keys + +## [4.0.0-beta.358] - 2024-10-10 + +### 🚀 Features + +- Add customHelper to stack-form +- Add cloudbeaver template +- Add ntfy template +- Add qbittorrent template +- Add Homebox template +- Add owncloud service and logo +- Add immich service +- Auto generate url +- Refactored to work with coolify auto env vars +- Affine service template and logo +- Add LibreTranslate template +- Open version in a new tab + +### 🐛 Bug Fixes + +- Signup +- Application domains should be http and https only +- Validate and sanitize application domains +- Sanitize and validate application domains + +### 💼 Other + +- Other DB options for freshrss +- Nextcloud MariaDB and MySQL versions + +### ⚙️ Miscellaneous Tasks + +- Fix form submission and keydown event handling in modal-confirmation.blade.php +- Update version numbers to 4.0.0-beta.359 in configuration files +- Disable adding default environment variables in shared.php + +## [4.0.0-beta.357] - 2024-10-08 + +### 🚀 Features + +- Add Mautic 4 and 5 to service templates +- Add keycloak template +- Add onedev template +- Improve search functionality in project selection + +### 🐛 Bug Fixes + +- Update mattermost image tag and add default port +- Remove env, change timezone +- Postgres healthcheck +- Azimutt template - still not working haha +- New parser with SERVICE_URL_ envs +- Improve service template readability +- Update password variables in Service model +- Scheduled database server +- Select server view + +### 💼 Other + +- Keycloak + +### ⚙️ Miscellaneous Tasks + +- Add mattermost logo as svg +- Add mattermost svg to compose +- Update version to 4.0.0-beta.357 + +## [4.0.0-beta.356] - 2024-10-07 + +### 🚀 Features + +- Add Argilla service configuration to Service model +- Add Invoice Ninja service configuration to Service model +- Project search on frontend +- Add ollama service with open webui and logo +- Update setType method to use slug value for type +- Refactor setType method to use slug value for type +- Refactor setType method to use slug value for type +- Add Supertokens template +- Add easyappointments service template +- Add dozzle template +- Adds forgejo service with runners + +### 🐛 Bug Fixes + +- Reset description and subject fields after submitting feedback +- Tag mass redeployments +- Service env orders, application env orders +- Proxy conf in dev +- One-click services +- Use local service-templates in dev +- New services +- Remove not used extra host +- Chatwoot service +- Directus +- Database descriptions +- Update services +- Soketi +- Select server view + +### 💼 Other + +- Update helper version +- Outline +- Directus +- Supertokens +- Supertokens json +- Rabbitmq +- Easyappointments +- Soketi +- Dozzle +- Windmill +- Coolify.json + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.356 +- Remove commented code for shared variable type validation +- Update MariaDB image to version 11 and fix service environment variable orders +- Update anythingllm.yaml volumes configuration +- Update proxy configuration paths for Caddy and Nginx in dev +- Update password form submission in modal-confirmation component +- Update project query to order by name in uppercase +- Update project query to order by name in lowercase +- Update select.blade.php with improved search functionality +- Add Nitropage service template and logo +- Bump coolify-helper version to 1.0.2 +- Refactor loadServices2 method and remove unused code +- Update version to 4.0.0-beta.357 +- Update service names and volumes in windmill.yaml +- Update version to 4.0.0-beta.358 +- Ignore .ignition.json files in Docker and Git + +## [4.0.0-beta.355] - 2024-10-03 + +### 🐛 Bug Fixes + +- Scheduled backup for services view +- Parser, espacing container labels + +### ⚙️ Miscellaneous Tasks + +- Update homarr service template and remove unnecessary code +- Update version to 4.0.0-beta.355 + +## [4.0.0-beta.354] - 2024-10-03 + +### 🚀 Features + +- Add it-tools service template and logo +- Add homarr service tamplate and logo + +### 🐛 Bug Fixes + +- Parse proxy config and check the set ports usage +- Update FQDN + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.354 +- Remove debug statement in Service model +- Remove commented code in Server model +- Fix application deployment queue filter logic +- Refactor modal-confirmation component +- Update it-tools service template and port configuration +- Update homarr service template and remove unnecessary code + +## [4.0.0-beta.353] - 2024-10-03 + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.353 +- Update service application view + +## [4.0.0-beta.352] - 2024-10-03 + +### 🐛 Bug Fixes + +- Service application view +- Add new supported database images + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.352 +- Refactor DatabaseBackupJob to handle missing team + +## [4.0.0-beta.351] - 2024-10-03 + +### 🚀 Features + +- Add strapi template + +### 🐛 Bug Fixes + +- Able to support more database dynamically from Coolify's UI +- Strapi template +- Bitcoin core template +- Api useBuildServer + +## [4.0.0-beta.349] - 2024-10-01 + +### 🚀 Features + +- Add command to check application deployment queue +- Support Hetzner S3 +- Handle HTTPS domain in ConfigureCloudflareTunnels +- Backup all databases for mysql,mariadb,postgresql +- Restart service without pulling the latest image + +### 🐛 Bug Fixes + +- Remove autofocuses +- Ipv6 scp should use -6 flag +- Cleanup stucked applicationdeploymentqueue +- Realtime watch in development mode +- Able to select root permission easier + +### 💼 Other + +- Show backup button on supported db service stacks + +### 🚜 Refactor + +- Remove deployment queue when deleting an application +- Improve SSH command generation in Terminal.php and terminal-server.js +- Fix indentation in modal-confirmation.blade.php +- Improve parsing of commands for sudo in parseCommandsByLineForSudo +- Improve popup component styling and button behavior +- Encode delimiter in SshMultiplexingHelper +- Remove inactivity timer in terminal-server.js +- Improve socket reconnection interval in terminal.js +- Remove unnecessary watch command from soketi service entrypoint + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.350 in configuration files +- Update command signature and description for cleanup application deployment queue +- Add missing import for Attribute class in ApplicationDeploymentQueue model +- Update modal input in server form to prevent closing on outside click +- Remove unnecessary command from SshMultiplexingHelper +- Remove commented out code for uploading to S3 in DatabaseBackupJob +- Update soketi service image to version 1.0.3 + +## [4.0.0-beta.348] - 2024-10-01 + +### 🚀 Features + +- Update resource deletion job to allow configurable options through API +- Add query parameters for deleting configurations, volumes, docker cleanup, and connected networks + +### 🐛 Bug Fixes + +- In dev mode do not ask confirmation on delete +- Mixpost +- Handle deletion of 'hello' in confirmation modal for dev environment + +### 💼 Other + +- Server storage check + +### 🚜 Refactor + +- Update search input placeholder in resource index view + +### ⚙️ Miscellaneous Tasks + +- Fix docs link in running state +- Update Coolify Realtime workflow to only trigger on the main branch +- Refactor instanceSettings() function to improve code readability +- Update Coolify Realtime image to version 1.0.2 +- Remove unnecessary code in DatabaseBackupJob.php +- Add "Not Usable" indicator for storage items +- Refactor instanceSettings() function and improve code readability +- Update version numbers to 4.0.0-beta.349 and 4.0.0-beta.350 + +## [4.0.0-beta.347] - 2024-09-28 + +### 🚀 Features + +- Allow specify use_build_server when creating/updating an application +- Add support for `use_build_server` in API endpoints for creating/updating applications +- Add Mixpost template + +### 🐛 Bug Fixes + +- Filebrowser template +- Edit is_build_server_enabled upon creating application on other application type +- Save settings after assigning value + +### 💼 Other + +- Remove memlock as it caused problems for some users + +### ⚙️ Miscellaneous Tasks + +- Update Mailpit logo to use SVG format + +## [4.0.0-beta.346] - 2024-09-27 + +### 🚀 Features + +- Add ContainerStatusTypes enum for managing container status + +### 🐛 Bug Fixes + +- Proxy fixes +- Proxy +- *(templates)* Filebrowser FQDN env variable +- Handle edge case when build variables and env variables are in different format +- Compose based terminal + +### 💼 Other + +- Manual cleanup button and unused volumes and network deletion +- Force helper image removal +- Use the new confirmation flow +- Typo +- Typo in install script +- If API is disabeled do not show API token creation stuff +- Disable API by default +- Add debug bar + +### 🚜 Refactor + +- Update environment variable name for uptime-kuma service +- Improve start proxy script to handle existing containers gracefully +- Update delete server confirmation modal buttons +- Remove unnecessary code + +### ⚙️ Miscellaneous Tasks + +- Add autocomplete attribute to input fields +- Refactor API Tokens component to use isApiEnabled flag +- Update versions.json file +- Remove unused .env.development.example file +- Update API Tokens view to include link to Settings menu +- Update web.php to cast server port as integer +- Update backup deletion labels to use language files +- Update database startup heading title +- Update database startup heading title +- Custom vite envs +- Update version numbers to 4.0.0-beta.348 +- Refactor code to improve SSH key handling and storage + +## [4.0.0-beta.343] - 2024-09-25 + +### 🐛 Bug Fixes + +- Parser +- Exited services statuses +- Make sure to reload window if app status changes +- Deploy key based deployments + +### 🚜 Refactor + +- Remove commented out code and improve environment variable handling in newParser function +- Improve label positioning in input and checkbox components +- Group and sort fields in StackForm by service name and password status +- Improve layout and add checkbox for task enablement in scheduled task form +- Update checkbox component to support full width option +- Update confirmation label in danger.blade.php template +- Fix typo in execute-container-command.blade.php +- Update OS_TYPE for Asahi Linux in install.sh script +- Add localhost as Server if it doesn't exist and not in cloud environment +- Add localhost as Server if it doesn't exist and not in cloud environment +- Update ProductionSeeder to fix issue with coolify_key assignment +- Improve modal confirmation titles and button labels +- Update install.sh script to remove redirection of upgrade output to /dev/null +- Fix modal input closeOutside prop in configuration.blade.php +- Add support for IPv6 addresses in sslip function + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.343 +- Update version numbers to 4.0.0-beta.344 +- Update version numbers to 4.0.0-beta.345 +- Update version numbers to 4.0.0-beta.346 + +## [4.0.0-beta.342] - 2024-09-24 + +### 🚀 Features + +- Add nullable constraint to 'fingerprint' column in private_keys table +- *(api)* Add an endpoint to execute a command +- *(api)* Add endpoint to execute a command + +### 🐛 Bug Fixes + +- Proxy status +- Coolify-db should not be in the managed resources +- Store original root key in the original location +- Logto service +- Cloudflared service +- Migrations +- Cloudflare tunnel configuration, ui, etc + +### 💼 Other + +- Volumes on development environment +- Clean new volume name for dev volumes +- Persist DBs, services and so on stored in data/coolify +- Add SSH Key fingerprint to DB +- Add a fingerprint to every private key on save, create... +- Make sure invalid private keys can not be added +- Encrypt private SSH keys in the DB +- Add is_sftp and is_server_ssh_key coloums +- New ssh key file name on disk +- Store all keys on disk by default +- Populate SSH key folder +- Populate SSH keys in dev +- Use new function names and logic everywhere +- Create a Multiplexing Helper +- SSH multiplexing +- Remove unused code form multiplexing +- SSH Key cleanup job +- Private key with ID 2 on dev +- Move more functions to the PrivateKey Model +- Add ssh key fingerprint and generate one for existing keys +- ID issues on dev seeders +- Server ID 0 +- Make sure in use private keys are not deleted +- Do not delete SSH Key from disk during server validation error +- UI bug, do not write ssh key to disk in server dialog +- SSH Multiplexing for Jobs +- SSH algorhytm text +- Few multiplexing things +- Clear mux directory +- Multiplexing do not write file manually +- Integrate tow step process in the modal component WIP +- Ability to hide labels +- DB start, stop confirm +- Del init script +- General confirm +- Preview deployments and typos +- Service confirmation +- Confirm file storage +- Stop service confirm +- DB image cleanup +- Confirm ressource operation +- Environment variabel deletion +- Confirm scheduled tasks +- Confirm API token +- Confirm private key +- Confirm server deletion +- Confirm server settings +- Proxy stop and restart confirmation +- GH app deletion confirmation +- Redeploy all confirmation +- User deletion confirmation +- Team deletion confirmation +- Backup job confirmation +- Delete volume confirmation +- More conformations and fixes +- Delete unused private keys button +- Ray error because port is not uncommented +- #3322 deploy DB alterations before updating +- Css issue with advanced settings and remove cf tunnel in onboarding +- New cf tunnel install flow +- Made help text more clear +- Cloudflare tunnel +- Make helper text more clean to use a FQDN and not an URL + +### 🚜 Refactor + +- Update Docker cleanup label in Heading.php and Navbar.php +- Remove commented out code in Navbar.php +- Remove CleanupSshKeysJob from schedule in Kernel.php +- Update getAJoke function to exclude offensive jokes +- Update getAJoke function to use HTTPS for API request +- Update CleanupHelperContainersJob to use more efficient Docker command +- Update PrivateKey model to improve code readability and maintainability +- Remove unnecessary code in PrivateKey model +- Update PrivateKey model to use ownedByCurrentTeam() scope for cleanupUnusedKeys() +- Update install.sh script to check if coolify-db volume exists before generating SSH key +- Update ServerSeeder and PopulateSshKeysDirectorySeeder +- Improve attribute sanitization in Server model +- Update confirmation button text for deletion actions +- Remove unnecessary code in shared.php file +- Update environment variables for services in compose files +- Update select.blade.php to improve trademarks policy display +- Update select.blade.php to improve trademarks policy display +- Fix typo in subscription URLs +- Add Postiz service to compose file (disabled for now) +- Update shared.php to include predefined ports for services +- Simplify SSH key synchronization logic +- Remove unused code in DatabaseBackupStatusJob and PopulateSshKeysDirectorySeeder + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.342 +- Update remove-labels-and-assignees-on-close.yml +- Add SSH key for localhost in ProductionSeeder +- Update SSH key generation in install.sh script +- Update ProductionSeeder to call OauthSettingSeeder and PopulateSshKeysDirectorySeeder +- Update install.sh to support Asahi Linux +- Update install.sh version to 1.6 +- Remove unused middleware and uniqueId method in DockerCleanupJob +- Refactor DockerCleanupJob to remove unused middleware and uniqueId method +- Remove unused migration file for populating SSH keys and clearing mux directory +- Add modified files to the commit +- Refactor pre-commit hook to improve performance and readability +- Update CONTRIBUTING.md with troubleshooting note about database migrations +- Refactor pre-commit hook to improve performance and readability +- Update cleanup command to use Redis instead of queue +- Update Docker commands to start proxy + +## [4.0.0-beta.341] - 2024-09-18 + +### 🚀 Features + +- Add buddy logo + +## [4.0.0-beta.336] - 2024-09-16 + +### 🚀 Features + +- Make coolify full width by default +- Fully functional terminal for command center +- Custom terminal host + +### 🐛 Bug Fixes + +- Keep-alive ws connections +- Add build.sh to debug logs +- Update Coolify installer +- Terminal +- Generate https for minio +- Install script +- Handle WebSocket connection close in terminal.blade.php +- Able to open terminal to any containers +- Refactor run-command +- If you exit a container manually, it should close the underlying tty as well +- Move terminal to separate view on services +- Only update helper image in DB +- Generated fqdn for SERVICE_FQDN_APP_3000 magic envs + +### 💼 Other + +- Remove labels and assignees on issue close +- Make sure this action is also triggered on PR issue close + +### 🚜 Refactor + +- Remove unnecessary code in ExecuteContainerCommand.php +- Improve Docker network connection command in StartService.php +- Terminal / run command +- Add authorization check in ExecuteContainerCommand mount method +- Remove unnecessary code in Terminal.php +- Remove unnecessary code in Terminal.blade.php +- Update WebSocket connection initialization in terminal.blade.php +- Remove unnecessary console.log statements in terminal.blade.php + +### ⚙️ Miscellaneous Tasks + +- Update release version to 4.0.0-beta.336 +- Update coolify environment variable assignment with double quotes +- Update shared.php to fix issues with source and network variables +- Update terminal styling for better readability +- Update button text for container connection form +- Update Dockerfile and workflow for Coolify Realtime (v4) +- Remove unused entrypoint script and update volume mapping +- Update .env file and docker-compose configuration +- Update APP_NAME environment variable in docker-compose.prod.yml +- Update WebSocket URL in terminal.blade.php +- Update Dockerfile and workflow for Coolify Realtime (v4) +- Update Dockerfile and workflow for Coolify Realtime (v4) +- Update Dockerfile and workflow for Coolify Realtime (v4) +- Rename Command Center to Terminal in code and views +- Update branch restriction for push event in coolify-helper.yml +- Update terminal button text and layout in application heading view +- Refactor terminal component and select form layout +- Update coolify nightly version to 4.0.0-beta.335 +- Update helper version to 1.0.1 +- Fix syntax error in versions.json +- Update version numbers to 4.0.0-beta.337 +- Update Coolify installer and scripts to include a function for fetching programming jokes +- Update docker network connection command in ApplicationDeploymentJob.php +- Add validation to prevent selecting 'default' server or container in RunCommand.php +- Update versions.json to reflect latest version of realtime container +- Update soketi image to version 1.0.1 +- Nightly - Update soketi image to version 1.0.1 and versions.json to reflect latest version of realtime container +- Update version numbers to 4.0.0-beta.339 +- Update version numbers to 4.0.0-beta.340 +- Update version numbers to 4.0.0-beta.341 + +### ◀️ Revert + +- Databasebackup + +## [4.0.0-beta.335] - 2024-09-12 + +### 🐛 Bug Fixes + +- Cloudflare tunnel with new multiplexing feature + +### 💼 Other + +- SSH Multiplexing on docker desktop on Windows + +### ⚙️ Miscellaneous Tasks + +- Update release version to 4.0.0-beta.335 +- Update constants.ssh.mux_enabled in remoteProcess.php +- Update listeners and proxy settings in server form and new server components +- Remove unnecessary null check for proxy_type in generate_default_proxy_configuration +- Remove unnecessary SSH command execution time logging + +## [4.0.0-beta.334] - 2024-09-12 + +### ⚙️ Miscellaneous Tasks + +- Remove itsgoingd/clockwork from require-dev in composer.json +- Update 'key' value of gitlab in Service.php to use environment variable + +## [4.0.0-beta.333] - 2024-09-11 + +### 🐛 Bug Fixes + +- Disable mux_enabled during server validation +- Move mc command to coolify image from helper +- Keydb. add `:` delimiter for connection string + +### 💼 Other + +- Remote servers with port and user +- Do not change localhost server name on revalidation +- Release.md file + +### 🚜 Refactor + +- Improve handling of environment variable merging in upgrade script + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.333 +- Copy .env file to .env-{DATE} if it exists +- Update .env file with new values +- Update server check job middleware to use server ID instead of UUID +- Add reminder to backup .env file before running install script again +- Copy .env file to backup location during installation script +- Add reminder to backup .env file during installation script +- Update permissions in pr-build.yml and version numbers +- Add minio/mc command to Dockerfile + +## [4.0.0-beta.332] - 2024-09-10 + +### 🚀 Features + +- Expose project description in API response +- Add elixir finetunes to the deployment job + +### 🐛 Bug Fixes + +- Reenable overlapping servercheckjob +- Appwrite template + parser +- Don't add `networks` key if `network_mode` is used +- Remove debug statement in shared.php +- Scp through cloudflare +- Delete older versions of the helper image other than the latest one +- Update remoteProcess.php to handle null values in logItem properties + +### 💼 Other + +- Set a default server timezone +- Implement SSH Multiplexing +- Enabel mux +- Cleanup stale multiplexing connections + +### 🚜 Refactor + +- Improve environment variable handling in shared.php + +### ⚙️ Miscellaneous Tasks + +- Set timeout for ServerCheckJob to 60 seconds +- Update appwrite.yaml to include OpenSSL key variable assignment + +## [4.0.0-beta.330] - 2024-09-06 + +### 🐛 Bug Fixes + +- Parser +- Plunk NEXT_PUBLIC_API_URI + +### 💼 Other + +- Pull helper image if not available otherwise s3 backup upload fails + +### 🚜 Refactor + +- Improve handling of server timezones in scheduled backups and tasks +- Improve handling of server timezones in scheduled backups and tasks +- Improve handling of server timezones in scheduled backups and tasks +- Update cleanup schedule to run daily at midnight +- Skip returning volume if driver type is cifs or nfs + +### ⚙️ Miscellaneous Tasks + +- Update coolify-helper.yml to get version from versions.json +- Disable Ray by default +- Enable Ray by default and update Dockerfile with latest versions of PACK and NIXPACKS +- Update Ray configuration and Dockerfile +- Add middleware for updating environment variables by UUID in `api.php` routes +- Expose port 3000 in browserless.yaml template +- Update Ray configuration and Dockerfile +- Update coolify version to 4.0.0-beta.331 +- Update versions.json and sentry.php to 4.0.0-beta.332 +- Update version to 4.0.0-beta.332 +- Update DATABASE_URL in plunk.yaml to use plunk database +- Add coolify.managed=true label to Docker image builds +- Update docker image pruning command to exclude managed images +- Update docker cleanup schedule to run daily at midnight +- Update versions.json to version 1.0.1 +- Update coolify-helper.yml to include "next" branch in push trigger + +## [4.0.0-beta.326] - 2024-09-03 + +### 🚀 Features + +- Update server_settings table to force docker cleanup +- Update Docker Compose file with DB_URL environment variable +- Refactor shared.php to improve environment variable handling + +### 🐛 Bug Fixes + +- Wrong executions order +- Handle project not found error in environment_details API endpoint +- Deployment running for - without "ago" +- Update helper image pulling logic to only pull if the version is newer + +### 💼 Other + +- Plunk svg + +### 📚 Documentation + +- Update Plunk documentation link in compose/plunk.yaml + +### ⚙️ Miscellaneous Tasks + +- Update UI for displaying no executions found in scheduled task list +- Update UI for displaying deployment status in deployment list +- Update UI for displaying deployment status in deployment list +- Ignore unnecessary files in production build workflow +- Update server form layout and settings +- Update Dockerfile with latest versions of PACK and NIXPACKS + +## [4.0.0-beta.324] - 2024-09-02 + +### 🚀 Features + +- Preserve git repository with advanced file storages +- Added Windmill template +- Added Budibase template +- Add shm-size for custom docker commands +- Add custom docker container options to all databases +- Able to select different postgres database +- Add new logos for jobscollider and hostinger +- Order scheduled task executions +- Add Code Server environment variables to Service model +- Add coolify build env variables to building phase +- Add new logos for GlueOps, Ubicloud, Juxtdigital, Saasykit, and Massivegrid +- Add new logos for GlueOps, Ubicloud, Juxtdigital, Saasykit, and Massivegrid + +### 🐛 Bug Fixes + +- Timezone not updated when systemd is missing +- If volumes + file mounts are defined, should merge them together in the compose file +- All mongo v4 backups should use the different backup command +- Database custom environment variables +- Connect compose apps to the right predefined network +- Docker compose destination network +- Server status when there are multiple servers +- Sync fqdn change on the UI +- Pr build names in case custom name is used +- Application patch request instant_deploy +- Canceling deployment on build server +- Backup of password protected postgresql database +- Docker cleanup job +- Storages with preserved git repository +- Parser parser parser +- New parser only in dev +- Parser parser +- Numberoflines should be number +- Docker cleanup job +- Fix directory and file mount headings in file-storage.blade.php +- Preview fqdn generation +- Revert a few lines +- Service ui sync bug +- Setup script doesn't work on rhel based images with some curl variant already installed +- Let's wait for healthy container during installation and wait an extra 20 seconds (for migrations) +- Infra files +- Log drain only for Applications +- Copy large compose files through scp (not ssh) +- Check if array is associative or not +- Openapi endpoint urls +- Convert environment variables to one format in shared.php +- Logical volumes could be overwritten with new path +- Env variable in value parsed +- Pull coolify image only when the app needs to be updated + +### 💼 Other + +- Actually update timezone on the server +- Cron jobs are executed based on the server timezone +- Server timezone seeder +- Recent backups UI +- Use apt-get instead of apt +- Typo +- Only pull helper image if the version is newer than the one + +### 🚜 Refactor + +- Update event listeners in Show components +- Refresh application to get latest database changes +- Update RabbitMQ configuration to use environment variable for port +- Remove debug statement in parseDockerComposeFile function +- ParseServiceVolumes +- Update OpenApi command to generate documentation +- Remove unnecessary server status check in destination view +- Remove unnecessary admin user email and password in budibase.yaml +- Improve saving of custom internal name in Advanced.php +- Add conditional check for volumes in generate_compose_file() +- Improve storage mount forms in add.blade.php +- Load environment variables based on resource type in sortEnvironmentVariables() +- Remove unnecessary network cleanup in Init.php +- Remove unnecessary environment variable checks in parseDockerComposeFile() +- Add null check for docker_compose_raw in parseCompose() +- Update dockerComposeParser to use YAML data from $yaml instead of $compose +- Convert service variables to key-value pairs in parseDockerComposeFile function +- Update database service name from mariadb to mysql +- Remove unnecessary code in DatabaseBackupJob and BackupExecutions +- Update Docker Compose parsing function to convert service variables to key-value pairs +- Update Docker Compose parsing function to convert service variables to key-value pairs +- Remove unused server timezone seeder and related code +- Remove unused server timezone seeder and related code +- Remove unused PullCoolifyImageJob from schedule +- Update parse method in Advanced, All, ApplicationPreview, General, and ApplicationDeploymentJob classes +- Remove commented out code for getIptables() in Dashboard.php +- Update .env file path in install.sh script +- Update SELF_HOSTED environment variable in docker-compose.prod.yml +- Remove unnecessary code for creating coolify network in upgrade.sh +- Update environment variable handling in StartClickhouse.php and ApplicationDeploymentJob.php +- Improve handling of COOLIFY_URL in shared.php +- Update build_args property type in ApplicationDeploymentJob +- Update background color of sponsor section in README.md +- Update Docker Compose location handling in PublicGitRepository +- Upgrade process of Coolify + +### 🧪 Testing + +- More tests + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.324 +- New compose parser with tests +- Update version to 1.3.4 in install.sh and 1.0.6 in upgrade.sh +- Update memory limit to 64MB in horizon configuration +- Update php packages +- Update axios npm dependency to version 1.7.5 +- Update Coolify version to 4.0.0-beta.324 and fix file paths in upgrade script +- Update Coolify version to 4.0.0-beta.324 +- Update Coolify version to 4.0.0-beta.325 +- Update Coolify version to 4.0.0-beta.326 +- Add cd command to change directory before removing .env file +- Update Coolify version to 4.0.0-beta.327 +- Update Coolify version to 4.0.0-beta.328 +- Update sponsor links in README.md +- Update version.json to versions.json in GitHub workflow +- Cleanup stucked resources and scheduled backups +- Update GitHub workflow to use versions.json instead of version.json +- Update GitHub workflow to use versions.json instead of version.json +- Update GitHub workflow to use versions.json instead of version.json +- Update GitHub workflow to use jq container for version extraction +- Update GitHub workflow to use jq container for version extraction + +## [4.0.0-beta.323] - 2024-08-08 + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.323 + +## [4.0.0-beta.322] - 2024-08-08 + +### 🐛 Bug Fixes + +- Manual update process + +### 🚜 Refactor + +- Update Server model getContainers method to use collect() for containers and containerReplicates +- Import ProxyTypes enum and use TRAEFIK instead of TRAEFIK_V2 + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.322 + +## [4.0.0-beta.321] - 2024-08-08 + +### 🐛 Bug Fixes + +- Scheduledbackup not found + +### 🚜 Refactor + +- Update StandalonePostgresql database initialization and backup handling +- Update cron expressions and add helper text for scheduled tasks + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.321 + +## [4.0.0-beta.320] - 2024-08-08 + +### 🚀 Features + +- Delete team in cloud without subscription +- Coolify init should cleanup stuck networks in proxy +- Add manual update check functionality to settings page +- Update auto update and update check frequencies in settings +- Update Upgrade component to check for latest version of Coolify +- Improve homepage service template +- Support map fields in Directus +- Labels by proxy type +- Able to generate only the required labels for resources + +### 🐛 Bug Fixes + +- Only append docker network if service/app is running +- Remove lazy load from scheduled tasks +- Plausible template +- Service_url should not have a trailing slash +- If usagebefore cannot be determined, cleanup docker with force +- Async remote command +- Only run logdrain if necessary +- Remove network if it is only connected to coolify proxy itself +- Dir mounts should have proper dirs +- File storages (dir/file mount) handled properly +- Do not use port exposes on docker compose buildpacks +- Minecraft server template fixed +- Graceful shutdown +- Stop resources gracefully +- Handle null and empty disk usage in DockerCleanupJob +- Show latest version on manual update view +- Empty string content should be saved as a file +- Update Traefik labels on init +- Add missing middleware for server check job + +### 🚜 Refactor + +- Update CleanupDatabase.php to adjust keep_days based on environment +- Adjust keep_days in CleanupDatabase.php based on environment +- Remove commented out code for cleaning up networks in CleanupDocker.php +- Update livewire polling interval in heading.blade.php +- Remove unused code for checking server status in Heading.php +- Simplify log drain installation in ServerCheckJob +- Remove unnecessary debug statement in ServerCheckJob +- Simplify log drain installation and stop log drain if necessary +- Cleanup unnecessary dynamic proxy configuration in Init command +- Remove unnecessary debug statement in ApplicationDeploymentJob +- Update timeout for graceful_shutdown_container in ApplicationDeploymentJob +- Remove unused code and optimize CheckForUpdatesJob +- Update ProxyTypes enum values to use TRAEFIK instead of TRAEFIK_V2 +- Update Traefik labels on init and cleanup unnecessary dynamic proxy configuration + +### 🎨 Styling + +- Linting + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.320 +- Add pull_request image builds to GH actions +- Add comment explaining the purpose of disconnecting the network in cleanup_unused_network_from_coolify_proxy() +- Update formbricks template +- Update registration view to display a notice for first user that it will be an admin +- Update server form to use password input for IP Address/Domain field +- Update navbar to include service status check +- Update navbar and configuration to improve service status check functionality +- Update workflows to include PR build and merge manifest steps +- Update UpdateCoolifyJob timeout to 10 minutes +- Update UpdateCoolifyJob to dispatch CheckForUpdatesJob synchronously + +## [4.0.0-beta.319] - 2024-07-26 + +### 🐛 Bug Fixes + +- Parse docker composer +- Service env parsing +- Service env variables +- Activity type invalid +- Update env on ui + +### 💼 Other + +- Service env parsing + +### ⚙️ Miscellaneous Tasks + +- Collect/create/update volumes in parseDockerComposeFile function + +## [4.0.0-beta.318] - 2024-07-24 + +### 🚀 Features + +- Create/delete project endpoints +- Add patch request to projects +- Add server api endpoints +- Add branddev logo to README.md +- Update API endpoint summaries +- Update Caddy button label in proxy.blade.php +- Check custom internal name through server's applications. +- New server check job + +### 🐛 Bug Fixes + +- Preview deployments should be stopped properly via gh webhook +- Deleting application should delete preview deployments +- Plane service images +- Fix issue with deployment start command in ApplicationDeploymentJob +- Directory will be created by default for compose host mounts +- Restart proxy does not work + status indicator on the UI +- Uuid in api docs type +- Raw compose deployment .env not found +- Api -> application patch endpoint +- Remove pull always when uploading backup to s3 +- Handle array env vars +- Link in task failed job notifications +- Random generated uuid will be full length (not 7 characters) +- Gitlab service +- Gitlab logo +- Bitbucket repository url +- By default volumes that we cannot determine if they are directories or files are treated as directories +- Domain update on services on the UI +- Update SERVICE_FQDN/URL env variables when you change the domain +- Several shared environment variables in one value, parsed correctly +- Members of root team should not see instance admin stuff + +### 💼 Other + +- Formbricks template add required CRON_SECRET +- Add required CRON_SECRET to Formbricks template + +### ⚙️ Miscellaneous Tasks + +- Update APP_BASE_URL to use SERVICE_FQDN_PLANE +- Update resource-limits.blade.php with improved input field helpers +- Update version numbers to 4.0.0-beta.319 +- Remove commented out code for docker image pruning + +## [4.0.0-beta.314] - 2024-07-15 + +### 🚀 Features + +- Improve error handling in loadComposeFile method +- Add readonly labels +- Preserve git repository +- Force cleanup server + +### 🐛 Bug Fixes + +- Typo in is_literal helper +- Env is_literal helper text typo +- Update docker compose pull command with --policy always +- Plane service template +- Vikunja +- Docmost template +- Drupal +- Improve github source creation +- Tag deployments +- New docker compose parsing +- Handle / in preselecting branches +- Handle custom_internal_name check in ApplicationDeploymentJob.php +- If git limit reached, ignore it and continue with a default selection +- Backup downloads +- Missing input for api endpoint +- Volume detection (dir or file) is fixed +- Supabase +- Create file storage even if content is empty + +### 💼 Other + +- Add basedir + compose file in new compose based apps + +### 🚜 Refactor + +- Remove unused code and fix storage form layout +- Update Docker Compose build command to include --pull flag +- Update DockerCleanupJob to handle nullable usageBefore property +- Server status job and docker cleanup job +- Update DockerCleanupJob to use server settings for force cleanup +- Update DockerCleanupJob to use server settings for force cleanup +- Disable health check for Rust applications during deployment + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.315 +- Update version to 4.0.0-beta.316 +- Update bug report template +- Update repository form with simplified URL input field +- Update width of container in general.blade.php +- Update checkbox labels in general.blade.php +- Update general page of apps +- Handle JSON parsing errors in format_docker_command_output_to_json +- Update Traefik image version to v2.11 +- Update version to 4.0.0-beta.317 +- Update version to 4.0.0-beta.318 +- Update helper message with link to documentation +- Disable health check by default +- Remove commented out code for sending internal notification + +### ◀️ Revert + +- Pull policy +- Advanced dropdown + +## [4.0.0-beta.308] - 2024-07-11 + +### 🚀 Features + +- Cleanup unused docker networks from proxy +- Compose parser v2 +- Display time interval for rollback images +- Add security and storage access key env to twenty template +- Add new logo for Latitude +- Enable legacy model binding in Livewire configuration + +### 🐛 Bug Fixes + +- Do not overwrite hardcoded variables if they rely on another variable +- Remove networks when deleting a docker compose based app +- Api +- Always set project name during app deployments +- Remove volumes as well +- Gitea pr previews +- Prevent instance fqdn persisting to other servers dynamic proxy configs +- Better volume cleanups +- Cleanup parameter +- Update redirect URL in unauthenticated exception handler +- Respect top-level configs and secrets +- Service status changed event +- Disable sentinel until a few bugs are fixed +- Service domains and envs are properly updated +- *(reactive-resume)* New healthcheck command for MinIO +- *(MinIO)* New command healthcheck +- Update minio hc in services +- Add validation for missing docker compose file + +### 🚜 Refactor + +- Add force parameter to StartProxy handle method +- Comment out unused code for network cleanup +- Reset default labels when docker_compose_domains is modified +- Webhooks view +- Tags view +- Only get instanceSettings once from db +- Update Dockerfile to set CI environment variable to true +- Remove unnecessary code in AppServiceProvider.php +- Update Livewire configuration views +- Update Webhooks.php to use nullable type for webhook URLs +- Add lazy loading to tags in Livewire configuration view +- Update metrics.blade.php to improve alert message clarity +- Update version numbers to 4.0.0-beta.312 +- Update version numbers to 4.0.0-beta.314 + +### ⚙️ Miscellaneous Tasks + +- Update Plausible docker compose template to Plausible 2.1.0 +- Update Plausible docker compose template to Plausible 2.1.0 +- Update livewire/livewire dependency to version 3.4.9 +- Refactor checkIfDomainIsAlreadyUsed function +- Update storage.blade.php view for livewire project service +- Update version to 4.0.0-beta.310 +- Update composer dependencies +- Add new logo for Latitude +- Bump version to 4.0.0-beta.311 + +### ◀️ Revert + +- Instancesettings + +## [4.0.0-beta.301] - 2024-06-24 + +### 🚀 Features + +- Local fonts +- More API endpoints +- Bulk env update api endpoint +- Update server settings metrics history days to 7 +- New app API endpoint +- Private gh deployments through api +- Lots of api endpoints +- Api api api api api api +- Rename CloudCleanupSubs to CloudCleanupSubscriptions +- Early fraud warning webhook +- Improve internal notification message for early fraud warning webhook +- Add schema for uuid property in app update response + +### 🐛 Bug Fixes + +- Run user commands on high prio queue +- Load js locally +- Remove lemon + paddle things +- Run container commands on high priority +- Image logo +- Remove both option for api endpoints. it just makes things complicated +- Cleanup subs in cloud +- Show keydbs/dragonflies/clickhouses +- Only run cloud clean on cloud + remove root team +- Force cleanup on busy servers +- Check domain on new app via api +- Custom container name will be the container name, not just internal network name +- Api updates +- Yaml everywhere +- Add newline character to private key before saving +- Add validation for webhook endpoint selection +- Database input validators +- Remove own app from domain checks +- Return data of app update + +### 💼 Other + +- Update process +- Glances service +- Glances +- Able to update application + +### 🚜 Refactor + +- Update Service model's saveComposeConfigs method +- Add default environment to Service model's saveComposeConfigs method +- Improve handling of default environment in Service model's saveComposeConfigs method +- Remove commented out code in Service model's saveComposeConfigs method +- Update stack-form.blade.php to include wire:target attribute for submit button +- Update code to use str() instead of Str::of() for string manipulation +- Improve formatting and readability of source.blade.php +- Add is_build_time property to nixpacks_php_fallback_path and nixpacks_php_root_dir +- Simplify code for retrieving subscription in Stripe webhook + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.302 +- Update version to 4.0.0-beta.303 +- Update version to 4.0.0-beta.305 +- Update version to 4.0.0-beta.306 +- Add log1x/laravel-webfonts package +- Update version to 4.0.0-beta.307 +- Refactor ServerStatusJob constructor formatting +- Update Monaco Editor for Docker Compose and Proxy Configuration +- More details +- Refactor shared.php helper functions + +## [4.0.0-beta.298] - 2024-06-24 + +### 🚀 Features + +- Spanish translation +- Cancelling a deployment will check if new could be started. +- Add supaguide logo to donations section +- Nixpacks now could reach local dbs internally +- Add Tigris logo to other/logos directory +- COOLIFY_CONTAINER_NAME predefined variable +- Charts +- Sentinel + charts +- Container metrics +- Add high priority queue +- Add metrics warning for servers without Sentinel enabled +- Add blacksmith logo to donations section +- Preselect server and destination if only one found +- More api endpoints +- Add API endpoint to update application by UUID +- Update statusnook logo filename in compose template + +### 🐛 Bug Fixes + +- Stripprefix middleware correctly labeled to http +- Bitbucket link +- Compose generator +- Do no truncate repositories wtih domain (git) in it +- In services should edit compose file for volumes and envs +- Handle laravel deployment better +- Db proxy status shown better in the UI +- Show commit message on webhooks + prs +- Metrics parsing +- Charts +- Application custom labels reset after saving +- Static build with new nixpacks build process +- Make server charts one livewire component with one interval selector +- You can now add env variable from ui to services +- Update compose environment with UI defined variables +- Refresh deployable compose without reload +- Remove cloud stripe notifications +- App deployment should be in high queue +- Remove zoom from modals +- Get envs before sortby +- MB is % lol +- Projects with 0 envs + +### 💼 Other + +- Unnecessary notification + +### 🚜 Refactor + +- Update text color for stderr output in deployment show view +- Update text color for stderr output in deployment show view +- Remove debug code for saving environment variables +- Update Docker build commands for better performance and flexibility +- Update image sizes and add new logos to README.md +- Update README.md with new logos and fix styling +- Update shared.php to use correct key for retrieving sentinel version +- Update container name assignment in Application model +- Remove commented code for docker container removal +- Update Application model to include getDomainsByUuid method +- Update Project/Show component to sort environments by created_at +- Update profile index view to display 2FA QR code in a centered container +- Update dashboard.blade.php to use project's default environment for redirection +- Update gitCommitLink method to handle null values in source.html_url +- Update docker-compose generation to use multi-line literal block + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.298 +- Switch to database sessions from redis +- Update dependencies and remove unused code +- Update tailwindcss and vue versions in package.json +- Update service template URL in constants.php +- Update sentinel version to 0.0.8 +- Update chart styling and loading text +- Update sentinel version to 0.0.9 +- Update Spanish translation for failed authentication messages +- Add portuguese traslation +- Add Turkish translations +- Add Vietnamese translate +- Add Treive logo to donations section +- Update README.md with latest release version badge +- Update latest release version badge in README.md +- Update version to 4.0.0-beta.299 +- Move server delete component to the bottom of the page +- Update version to 4.0.0-beta.301 + +## [4.0.0-beta.297] - 2024-06-11 + +### 🚀 Features + +- Easily redirect between www-and-non-www domains +- Add logos for new sponsors +- Add homepage template +- Update homepage.yaml with environment variables and volumes + +### 🐛 Bug Fixes + +- Multiline build args +- Setup script doesnt link to the correct source code file +- Install.sh do not reinstall packages on arch +- Just restart + +### 🚜 Refactor + +- Replaces duplications in code with a single function + +### ⚙️ Miscellaneous Tasks + +- Update page title in resource index view +- Update logo file path in logto.yaml +- Update logo file path in logto.yaml +- Remove commented out code for docker container removal +- Add isAnyDeploymentInprogress function to check if any deployments are in progress +- Add ApplicationDeploymentJob and pint.json + +## [4.0.0-beta.295] - 2024-06-10 + +### 🚀 Features + +- Able to change database passwords on the UI. It won't sync to the database. +- Able to add several domains to compose based previews +- Add bounty program link to bug report template +- Add titles +- Db proxy logs + +### 🐛 Bug Fixes + +- Custom docker compose commands, add project dir if needed +- Autoupdate process +- Backup executions view +- Handle previously defined compose previews +- Sort backup executions +- Supabase service, newest versions +- Set default name for Docker volumes if it is null +- Multiline variable should be literal + should be multiline in bash with \ +- Gitlab merge request should close PR + +### 💼 Other + +- Rocketchat +- New services based git apps + +### 🚜 Refactor + +- Append utm_source parameter to documentation URL +- Update save_environment_variables method to use application's environment_variables instead of environment_variables_preview +- Update deployment previews heading to "Deployments" +- Remove unused variables and improve code readability +- Initialize null properties in Github Change component +- Improve pre and post deployment command inputs +- Improve handling of Docker volumes in parseDockerComposeFile function + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.295 +- Update supported OS list with almalinux +- Update install.sh to support PopOS +- Update install.sh script to version 1.3.2 and handle Linux Mint as Ubuntu + +## [4.0.0-beta.294] - 2024-06-04 + +### ⚙️ Miscellaneous Tasks + +- Update Dockerfile with latest versions of Docker, Docker Compose, Docker Buildx, Pack, and Nixpacks + +## [4.0.0-beta.289] - 2024-05-29 + +### 🚀 Features + +- Add PHP memory limit environment variable to docker-compose.prod.yml +- Add manual update option to UpdateCoolify handle method +- Add port configuration for Vaultwarden service + +### 🐛 Bug Fixes + +- Sync upgrade process +- Publish horizon +- Add missing team model +- Test new upgrade process? +- Throw exception +- Build server dirs not created on main server +- Compose load with non-root user +- Able to redeploy dockerfile based apps without cache +- Compose previews does have env variables +- Fine-tune cdn pulls +- Spamming :D +- Parse docker version better +- Compose issues +- SERVICE_FQDN has source port in it +- Logto service +- Allow invitations via email +- Sort by defined order + fixed typo +- Only ignore volumes with driver_opts +- Check env in args for compose based apps + +### 🚜 Refactor + +- Update destination.blade.php to add group class for better styling +- Applicationdeploymentjob +- Improve code structure in ApplicationDeploymentJob.php +- Remove unnecessary debug statement in ApplicationDeploymentJob.php +- Remove unnecessary debug statements and improve code structure in RunRemoteProcess.php and ApplicationDeploymentJob.php +- Remove unnecessary logging statements from UpdateCoolify +- Update storage form inputs in show.blade.php +- Improve Docker Compose parsing for services +- Remove unnecessary port appending in updateCompose function +- Remove unnecessary form class in profile index.blade.php +- Update form layout in invite-link.blade.php +- Add log entry when starting new application deployment +- Improve Docker Compose parsing for services +- Update Docker Compose parsing for services +- Update slogan in shlink.yaml +- Improve display of deployment time in index.blade.php +- Remove commented out code for clearing Ray logs +- Update save_environment_variables method to use application's environment_variables instead of environment_variables_preview + +### ⚙️ Miscellaneous Tasks + +- Update for version 289 +- Fix formatting issue in deployment index.blade.php file +- Remove unnecessary wire:navigate attribute in breadcrumbs.blade.php +- Rename docker dirs +- Update laravel/socialite to version v5.14.0 and livewire/livewire to version 3.4.9 +- Update modal styles for better user experience +- Update deployment index.blade.php script for better performance +- Update version numbers to 4.0.0-beta.290 +- Update version numbers to 4.0.0-beta.291 +- Update version numbers to 4.0.0-beta.292 +- Update version numbers to 4.0.0-beta.293 +- Add upgrade guide link to upgrade.blade.php +- Improve upgrade.blade.php with clearer instructions and formatting +- Update version numbers to 4.0.0-beta.294 +- Add Lightspeed.run as a sponsor +- Update Dockerfile to install vim + +## [4.0.0-beta.288] - 2024-05-28 + +### 🐛 Bug Fixes + +- Do not allow service storage mount point modifications +- Volume adding + +### ⚙️ Miscellaneous Tasks + +- Update Sentry release version to 4.0.0-beta.288 + +## [4.0.0-beta.287] - 2024-05-27 + +### 🚀 Features + +- Handle incomplete expired subscriptions in Stripe webhook +- Add more persistent storage types + +### 🐛 Bug Fixes + +- Force load services from cdn on reload list + +### ⚙️ Miscellaneous Tasks + +- Update Sentry release version to 4.0.0-beta.287 +- Add Thompson Edolo as a sponsor +- Add null checks for team in Stripe webhook + +## [4.0.0-beta.286] - 2024-05-27 + +### 🚀 Features + +- If the time seems too long it remains at 0s +- Improve Docker Engine start logic in ServerStatusJob +- If proxy stopped manually, it won't start back again +- Exclude_from_hc magic +- Gitea manual webhooks +- Add container logs in case the container does not start healthy + +### 🐛 Bug Fixes + +- Wrong time during a failed deployment +- Removal of the failed deployment condition, addition of since started instead of finished time +- Use local versions + service templates and query them every 10 minutes +- Check proxy functionality before removing unnecessary coolify.yaml file and checking Docker Engine +- Show first 20 users only in admin view +- Add subpath for services +- Ghost subdir +- Do not pull templates in dev +- Templates +- Update error message for invalid token to mention invalid signature +- Disable containerStopped job for now +- Disable unreachable/revived notifications for now +- JSON_UNESCAPED_UNICODE +- Add wget to nixpacks builds +- Pre and post deployment commands +- Bitbucket commits link +- Better way to add curl/wget to nixpacks +- Root team able to download backups +- Build server should not have a proxy +- Improve build server functionalities +- Sentry issue +- Sentry +- Sentry error + livewire downgrade +- Sentry +- Sentry +- Sentry error +- Sentry + +### 🚜 Refactor + +- Update edit-domain form in project service view +- Add Huly services to compose file +- Remove redundant heading in backup settings page +- Add isBuildServer method to Server model +- Update docker network creation in ApplicationDeploymentJob + +### ⚙️ Miscellaneous Tasks + +- Change pre and post deployment command length in applications table +- Refactor container name logic in GetContainersStatus.php and ForcePasswordReset.php +- Remove unnecessary content from Docker Compose file + +## [4.0.0-beta.285] - 2024-05-21 + +### 🚀 Features + +- Add SerpAPI as a Github Sponsor +- Admin view for deleting users +- Scheduled task failed notification + +### 🐛 Bug Fixes + +- Optimize new resource creation +- Show it docker compose has syntax errors + +### 💼 Other + +- Responsive here and there + +## [4.0.0-beta.284] - 2024-05-19 + +### 🚀 Features + +- Add hc logs to healthchecks + +### ◀️ Revert + +- Hc return code check + +## [4.0.0-beta.283] - 2024-05-17 + +### 🚀 Features + +- Update healthcheck test in StartMongodb action +- Add pull_request_id filter to get_last_successful_deployment method in Application model + +### 🐛 Bug Fixes + +- PR deployments have good predefined envs + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.283 + +## [4.0.0-beta.281] - 2024-05-17 + +### 🚀 Features + +- Shows the latest deployment commit + message on status +- New manual update process + remove next_channel +- Add lastDeploymentInfo and lastDeploymentLink props to breadcrumbs and status components +- Sort envs alphabetically and creation date +- Improve sorting of environment variables in the All component + +### 🐛 Bug Fixes + +- Hc from localhost to 127.0.0.1 +- Use rc in hc +- Telegram group chat notifications + +## [4.0.0-beta.280] - 2024-05-16 + +### 🐛 Bug Fixes + +- Commit message length + +## [4.0.0-beta.279] - 2024-05-16 + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.279 +- Limit commit message length to 50 characters in ApplicationDeploymentJob + +## [4.0.0-beta.278] - 2024-05-16 + +### 🚀 Features + +- Adding new COOLIFY_ variables +- Save commit message and better view on deployments +- Toggle label escaping mechanism + +### 🐛 Bug Fixes + +- Use commit hash on webhooks + +### ⚙️ Miscellaneous Tasks + +- Refactor Service.php to handle missing admin user in extraFields() method +- Update twenty CRM template with environment variables and dependencies +- Refactor applications.php to remove unused imports and improve code readability +- Refactor deployment index.blade.php for improved readability and rollback handling +- Refactor GitHub app selection UI in project creation form +- Update ServerLimitCheckJob.php to handle missing serverLimit value +- Remove unnecessary code for saving commit message +- Update DOCKER_VERSION to 26.0 in install.sh script +- Update Docker and Docker Compose versions in Dockerfiles + +## [4.0.0-beta.277] - 2024-05-10 + +### 🚀 Features + +- Add AdminRemoveUser command to remove users from the database + +### 🐛 Bug Fixes + +- Color for resource operation server and project name +- Only show realtime error on non-cloud instances +- Only allow push and mr gitlab events +- Improve scheduled task adding/removing +- Docker compose dependencies for pr previews +- Properly populating dependencies + +### 💼 Other + +- Fix a few boxes here and there + +### ⚙️ Miscellaneous Tasks + +- Update version numbers to 4.0.0-beta.278 +- Update hover behavior and cursor style in scheduled task executions view +- Refactor scheduled task view to improve code readability and maintainability +- Skip scheduled tasks if application or service is not running +- Remove debug logging statements in Kernel.php +- Handle invalid cron strings in Kernel.php + +## [4.0.0-beta.275] - 2024-05-06 + +### 🚀 Features + +- Add container name to network aliases in ApplicationDeploymentJob +- Add lazy loading for images in General.php and improve Docker Compose file handling in Application.php +- Experimental sentinel +- Start Sentinel on servers. +- Pull new sentinel image and restart container +- Init metrics + +### 🐛 Bug Fixes + +- Typo in tags.blade.php +- Install.sh error +- Env file +- Comment out internal notification in email_verify method +- Confirmation for custom labels +- Change permissions on newly created dirs + +### 💼 Other + +- Fix tag view + +### 🚜 Refactor + +- Add SCHEDULER environment variable to StartSentinel.php + +### ⚙️ Miscellaneous Tasks + +- Dark mode should be the default +- Improve menu item styling and spacing in service configuration and index views +- Improve menu item styling and spacing in service configuration and index views +- Improve menu item styling and spacing in project index and show views +- Remove docker compose versions +- Add Listmonk service template and logo +- Refactor GetContainersStatus.php for improved readability and maintainability +- Refactor ApplicationDeploymentJob.php for improved readability and maintainability +- Add metrics and logs directories to installation script +- Update sentinel version to 0.0.2 in versions.json +- Update permissions on metrics and logs directories +- Comment out server sentinel check in ServerStatusJob + +## [4.0.0-beta.273] - 2024-05-03 + +### 🐛 Bug Fixes + +- Formbricks image origin +- Add port even if traefik is used + +### ⚙️ Miscellaneous Tasks + +- Update version to 4.0.0-beta.275 +- Update DNS server validation helper text + +## [4.0.0-beta.267] - 2024-04-26 + +### 🚀 Features + +- Initial datalist +- Update service contribution docs URL +- The final pricing plan, pay-as-you-go + +### 🐛 Bug Fixes + +- Move s3 storages to separate view +- Mongo db backup +- Backups +- Autoupdate +- Respect start period and chekc interval for hc +- Parse HEALTHCHECK from dockerfile +- Make s3 name and endpoint required +- Able to update source path for predefined volumes +- Get logs with non-root user +- Mongo 4.0 db backup + +### 💼 Other + +- Update resource operations view + +### ◀️ Revert + +- Variable parsing + +## [4.0.0-beta.266] - 2024-04-24 + +### 🐛 Bug Fixes + +- Refresh public ips on start + +## [4.0.0-beta.259] - 2024-04-17 + +### 🚀 Features + +- Literal env variables +- Lazy load stuffs + tell user if compose based deployments have missing envs +- Can edit file/dir volumes from ui in compose based apps +- Upgrade Appwrite service template to 1.5 +- Upgrade Appwrite service template to 1.5 +- Add db name to backup notifications + +### 🐛 Bug Fixes + +- Helper image only pulled if required, not every 10 mins +- Make sure that confs when checking if it is changed sorted +- Respect .env file (for default values) +- Remove temporary cloudflared config +- Remove lazy loading until bug figured out +- Rollback feature +- Base64 encode .env +- $ in labels escaped +- .env saved to deployment server, not to build server +- Do no able to delete gh app without deleting resources +- 500 error on edge case +- Able to select server when creating new destination +- N8n template + +### 💼 Other + +- Non-root user for remote servers +- Non-root + +## [4.0.0-beta.258] - 2024-04-12 + +### 🚀 Features + +- Dynamic mux time + +### 🐛 Bug Fixes + +- Check each required binaries one-by-one + +## [4.0.0-beta.256] - 2024-04-12 + +### 🚀 Features + +- Upload large backups +- Edit domains easier for compose +- Able to delete configuration from server +- Configuration checker for all resources +- Allow tab in textarea + +### 🐛 Bug Fixes + +- Service config hash update +- Redeploy if image not found in restart only mode + +### 💼 Other + +- New pricing +- Fix allowTab logic +- Use 2 space instead of tab + +## [4.0.0-beta.252] - 2024-04-09 + +### 🚀 Features + +- Add amazon linux 2023 + +### 🐛 Bug Fixes + +- Git submodule update +- Unintended left padding on sidebar +- Hashed random delimeter in ssh commands + make sure to remove the delimeter from the command + +## [4.0.0-beta.250] - 2024-04-05 + +### 🚀 Features + +- *(application)* Update submodules after git checkout + +## [4.0.0-beta.249] - 2024-04-03 + +### 🚀 Features + +- Able to make rsa/ed ssh keys + +### 🐛 Bug Fixes + +- Warning if you use multiple domains for a service +- New github app creation +- Always rebuild Dockerfile / dockerimage buildpacks +- Do not rebuild dockerfile based apps twice +- Make sure if envs are changed, rebuild is needed +- Members cannot manage subscriptions +- IsMember +- Storage layout +- How to update docker-compose, environment variables and fqdns + +### 💼 Other + +- Light buttons +- Multiple server view + +## [4.0.0-beta.242] - 2024-03-25 + +### 🚀 Features + +- Change page width +- Watch paths + +### 🐛 Bug Fixes + +- Compose env has SERVICE, but not defined for Coolify +- Public service database +- Make sure service db proxy restarted +- Restart service db proxies +- Two factor +- Ui for tags +- Update resources view +- Realtime connection check +- Multline env in dev mode +- Scheduled backup for other service databases (supabase) +- PR deployments should not be distributed to 2 servers +- Name/from address required for resend +- Autoupdater +- Async service loads +- Disabled inputs are not trucated +- Duplicated generated fqdns are now working +- Uis +- Ui for cftunnels +- Search services +- Trial users subscription page +- Async public key loading +- Unfunctional server should see resources + +### 💼 Other + +- Run cleanup every day +- Fix +- Fix log outputs +- Automatic cloudflare tunnels +- Backup executions + +## [4.0.0-beta.241] - 2024-03-20 + +### 🚀 Features + +- Able to run scheduler/horizon programatically + +### 🐛 Bug Fixes + +- Volumes for prs +- Shared env variable parsing + +### 💼 Other + +- Redesign +- Redesign + +## [4.0.0-beta.240] - 2024-03-18 + +### 🐛 Bug Fixes + +- Empty get logs number of lines +- Only escape envs after v239+ +- 0 in env value +- Consistent container name +- Custom ip address should turn off rolling update +- Multiline input +- Raw compose deployment +- Dashboard view if no project found + +## [4.0.0-beta.239] - 2024-03-14 + +### 🐛 Bug Fixes + +- Duplicate dockerfile +- Multiline env variables +- Server stopped, service page not reachable + +## [4.0.0-beta.237] - 2024-03-14 + +### 🚀 Features + +- Domains api endpoint +- Resources api endpoint +- Team api endpoint +- Add deployment details to deploy endpoint +- Add deployments api +- Experimental caddy support +- Dynamic configuration for caddy +- Reset password +- Show resources on source page + +### 🐛 Bug Fixes + +- Deploy api messages +- Fqdn null in case docker compose bp +- Reload caddy issue +- /realtime endpoint +- Proxy switch +- Service ports for services + caddy +- Failed deployments should send failed email/notification +- Consider custom healthchecks in dockerfile +- Create initial files async +- Docker compose validation + +## [4.0.0-beta.235] - 2024-03-05 + +### 🐛 Bug Fixes + +- Should note delete personal teams +- Make sure to show some buttons +- Sort repositories by name + +## [4.0.0-beta.224] - 2024-02-23 + +### 🚀 Features + +- Custom server limit +- Delay container/server jobs +- Add static ipv4 ipv6 support +- Server disabled by overflow +- Preview deployment logs +- Collect webhooks during maintenance +- Logs and execute commands with several servers + +### 🐛 Bug Fixes + +- Subscription / plan switch, etc +- Firefly service +- Force enable/disable server in case ultimate package quantity decreases +- Server disabled +- Custom dockerfile location always checked +- Import to mysql and mariadb +- Resource tab not loading if server is not reachable +- Load unmanaged async +- Do not show n/a networsk +- Service container status updates +- Public prs should not be commented +- Pull request deployments + build servers +- Env value generation +- Sentry error +- Service status updated + +### 💼 Other + +- Change + icon to hamburger. + +## [4.0.0-beta.222] - 2024-02-22 + +### 🚀 Features + +- Able to add dynamic configurations from proxy dashboard + +### 🐛 Bug Fixes + +- Connections being stuck and not processed until proxy restarts +- Use latest image if nothing is specified +- No coolify.yaml found +- Server validation +- Statuses +- Unknown image of service until it is uploaded + +## [4.0.0-beta.220] - 2024-02-19 + +### 🚀 Features + +- Save github app permission locally +- Minversion for services + +### 🐛 Bug Fixes + +- Add openbsd ssh server check +- Resources +- Empty build variables +- *(server)* Revalidate server button not showing in server's page +- Fluent bit ident level +- Submodule cloning +- Database status +- Permission change updates from webhook +- Server validation + +### 💼 Other + +- Updates + +## [4.0.0-beta.213] - 2024-02-12 + +### 🚀 Features + +- Magic for traefik redirectregex in services +- Revalidate server +- Disable gzip compression on service applications + +### 🐛 Bug Fixes + +- Cleanup scheduled tasks +- Padding left on input boxes +- Use ls / command instead ls +- Do not add the same server twice +- Only show redeployment required if status is not exited + +## [4.0.0-beta.212] - 2024-02-08 + +### 🚀 Features + +- Cleanup queue + +### 🐛 Bug Fixes + +- New menu on navbar +- Make sure resources are deleted in async mode +- Go to prod env from dashboard if there is no other envs defined +- User proper image_tag, if set +- New menu ui +- Lock logdrain configuration when one of them are enabled +- Add docker compose check during server validation +- Get service stack as uuid, not name +- Menu +- Flex wrap deployment previews +- Boolean docker options +- Only add 'networks' key if 'network_mode' is absent + +## [4.0.0-beta.206] - 2024-02-05 + +### 🚀 Features + +- Clone to env +- Multi deployments + +### 🐛 Bug Fixes + +- Wrap tags and avoid horizontal overflow +- Stripe webhooks +- Feedback from self-hosted envs to discord + +### 💼 Other + +- Specific about newrelic logdrains + +## [4.0.0-beta.201] - 2024-01-29 + +### 🚀 Features + +- Added manual webhook support for bitbucket +- Add initial support for custom docker run commands +- Cleanup unreachable servers +- Tags and tag deploy webhooks + +### 🐛 Bug Fixes + +- Bitbucket manual deployments +- Webhooks for multiple apps +- Unhealthy deployments should be failed +- Add env variables for wordpress template without database +- Service deletion function +- Service deletion fix +- Dns validation + duplicated fqdns +- Validate server navbar upated +- Regenerate labels on application clone +- Service deletion +- Not able to use other shared envs +- Sentry fix +- Sentry +- Sentry error +- Sentry +- Sentry error +- Create dynamic directory +- Migrate to new modal +- Duplicate domain check +- Tags + +### 💼 Other + +- New modal component + +## [4.0.0-beta.188] - 2024-01-11 + +### 🚀 Features + +- Search between resources +- Move resources between projects / environments +- Clone any resource +- Shared environments +- Concurrent builds / server +- Able to deploy multiple resources with webhook +- Add PR comments +- Dashboard live deployment view + +### 🐛 Bug Fixes + +- Preview deployments with nixpacks +- Cleanup docker stuffs before upgrading +- Service deletion command +- Cpuset limits was determined in a way that apps only used 1 CPU max, ehh, sorry. +- Service stack view +- Change proxy view +- Checkbox click +- Git pull command for deploy key based previews +- Server status job +- Service deletion bug! +- Links +- Redis custom conf +- Sentry error +- Restrict concurrent deployments per server +- Queue +- Change env variable length + +### 💼 Other + +- Send notification email if payment + +### 🚜 Refactor + +- Compose file and install script + +## [4.0.0-beta.186] - 2024-01-11 + +### 🚀 Features + +- Import backups + +### 🐛 Bug Fixes + +- Do not include thegameplan.json into build image +- Submit error on postgresql +- Email verification / forgot password +- Escape build envs properly for nixpacks + docker build +- Undead endpoint +- Upload limit on ui +- Save cmd output propely (merge) +- Load profile on remote commands +- Load profile and set envs on remote cmd +- Restart should not update config hash + +## [4.0.0-beta.184] - 2024-01-09 + +### 🐛 Bug Fixes + +- Healthy status +- Show framework based notification in build logs +- Traefik labels +- Use ip for sslip in dev if remote server is used +- Service labels without ports (unknown ports) +- Sort and rename (unique part) of labels +- Settings menu +- Remove traefik debug in dev mode +- Php pgsql to 8.2 +- Static buildpack should set port 80 +- Update navbar on build_pack change + +## [4.0.0-beta.183] - 2024-01-06 + +### 🚀 Features + +- Add www-non-www redirects to traefik + +### 🐛 Bug Fixes + +- Database env variables + +## [4.0.0-beta.182] - 2024-01-04 + +### 🐛 Bug Fixes + +- File storage save + +## [4.0.0-beta.181] - 2024-01-03 + +### 🐛 Bug Fixes + +- Nixpacks buildpack + +## [4.0.0-beta.180] - 2024-01-03 + +### 🐛 Bug Fixes + +- Nixpacks cache +- Only add restart policy if its empty (compose) + +## [4.0.0-beta.179] - 2024-01-02 + +### 🐛 Bug Fixes + +- Set deployment failed if new container is not healthy + +## [4.0.0-beta.177] - 2024-01-02 + +### 🚀 Features + +- Raw docker compose deployments + +### 🐛 Bug Fixes + +- Duplicate compose variable + +## [4.0.0-beta.176] - 2023-12-31 + +### 🐛 Bug Fixes + +- Horizon + +## [4.0.0-beta.175] - 2023-12-30 + +### 🚀 Features + +- Add environment description + able to change name + +### 🐛 Bug Fixes + +- Sub +- Wrong env variable parsing +- Deploy key + docker compose + +## [4.0.0-beta.174] - 2023-12-27 + +### 🐛 Bug Fixes + +- Restore falsely deleted coolify-db-backup + +## [4.0.0-beta.173] - 2023-12-27 + +### 🐛 Bug Fixes + +- Cpu limit to float from int +- Add source commit to final envs +- Routing, switch back to old one +- Deploy instead of restart in case swarm is used +- Button title + +## [4.0.0-beta.163] - 2023-12-15 + +### 🚀 Features + +- Custom docker compose commands + +### 🐛 Bug Fixes + +- Domains for compose bp +- No action in webhooks +- Add debug output to gitlab webhooks +- Do not push dockerimage +- Add alpha to swarm +- Server not found +- Do not autovalidate server on mount +- Server update schedule +- Swarm support ui +- Server ready +- Get swarm service logs +- Docker compose apps env rewritten +- Storage error on dbs +- Why?! +- Stay tuned + +### 💼 Other + +- Swarm +- Swarm + +## [4.0.0-beta.155] - 2023-12-11 + +### 🚀 Features + +- Autoupdate env during seed +- Disable autoupdate +- Randomly sleep between executions +- Pull latest images for services + +### 🐛 Bug Fixes + +- Do not send telegram noti on intent payment failed +- Database ui is realtime based +- Live mode for github webhooks +- Ui +- Realtime connection popup could be disabled +- Realtime check +- Add new destination +- Proxy logs +- Db status check +- Pusher host +- Add ipv6 +- Realtime connection?! +- Websocket +- Better handling of errors with install script +- Install script parse version +- Only allow to modify in .env file if AUTOUPDATE is set +- Is autoupdate not null +- Run init command after production seeder +- Init +- Comma in traefik custom labels +- Ignore if dynamic config could not be set +- Service env variable ovewritten if it has a default value +- Labelling +- Non-ascii chars in labels +- Labels +- Init script echos +- Update Coolify script +- Null notify +- Check queued deployments as well +- Copy invitation +- Password reset / invitation link requests +- Add catch all route +- Revert random container job delay +- Backup executions view +- Only check server status in container status job +- Improve server status check times +- Handle other types of generated values +- Server checking status +- Ui for adding new destination +- Reset domains on compose file change + +### 💼 Other + +- Fix for comma in labels +- Add image name to service stack + better options visibility + +### 🚜 Refactor + +- Service logs are now on one page +- Application status changed realtime +- Custom labels +- Clone project + +## [4.0.0-beta.154] - 2023-12-07 + +### 🚀 Features + +- Execute command in container + +### 🐛 Bug Fixes + +- Container selection +- Service navbar using new realtime events +- Do not create duplicated networks +- Live event +- Service start + event +- Service deletion job +- Double ws connection +- Boarding view + +### 💼 Other + +- Env vars +- Migrate to livewire 3 + +## [4.0.0-beta.124] - 2023-11-13 + +### 🚀 Features + +- Log drain (wip) +- Enable/disable log drain by service +- Log drainer container check +- Add docker engine support install script to rhel based systems +- Save timestamp configuration for logs +- Custom log drain endpoints +- Auto-restart tcp proxies for databases + +### 🐛 Bug Fixes + +- *(fider template)* Use the correct docs url +- Fqdn for minio +- Generate service fields +- Mariadb backups +- When to pull image +- Do not allow to enter local ip addresses +- Reset password +- Only report nonruntime errors +- Handle different label formats in services +- Server adding process +- Show defined resources in server tab, so you will know what you need to delete before you can delete the server. +- Lots of regarding git + docker compose deployments +- Pull request build variables +- Double default password length +- Do not remove deployment in case compose based failed +- No container servers +- Sentry issue +- Dockercompose save ./ volumes under /data/coolify +- Server view for link() +- Default value do not overwrite existing env value +- Use official install script with rancher (one will work for sure) +- Add cf tunnel to boarding server view +- Prevent autorefresh of proxy status +- Missing docker image thing +- Add hc for soketi +- Deploy the right compose file +- Bind volumes for compose bp +- Use hc port 80 in case of static build +- Switching to static build + +### 💼 Other + +- New deployment jobs +- Compose based apps +- Swarm +- Swarm +- Swarm +- Swarm +- Disable trial +- Meilisearch +- Broadcast +- 🌮 + +### 🚜 Refactor + +- Env variable generator + +### ◀️ Revert + +- Wip + +## [4.0.0-beta.109] - 2023-11-06 + +### 🚀 Features + +- Deployment logs fullscreen +- Service database backups +- Make service databases public + +### 🐛 Bug Fixes + +- Missing environment variables prevewi on service +- Invoice.paid should sleep for 5 seconds +- Local dev repo +- Deployments ui +- Dockerfile build pack fix +- Set labels on generate domain +- Network service parse +- Notification url in containerstatusjob +- Gh webhook response 200 to installation_repositories +- Delete destination +- No id found +- Missing $mailMessage +- Set default from/sender names +- No environments +- Telegram text +- Private key not found error +- UI +- Resourcesdelete command +- Port number should be int +- Separate delete with validation of server +- Add nixpacks info +- Remove filter +- Container logs are now followable in full-screen and sorted by timestamp +- Ui for labels +- Ui +- Deletions +- Build_image not found +- Github source view +- Github source view +- Dockercleanupjob should be released back +- Ui +- Local ip address +- Revert workdir to basedir +- Container status jobs for old pr deployments +- Service updates + +## [4.0.0-beta.99] - 2023-10-24 + +### 🚀 Features + +- Improve deployment time by a lot + +### 🐛 Bug Fixes + +- Space in build args +- Lock SERVICE_FQDN envs +- If user is invited, that means its email is verified +- Force password reset on invited accounts +- Add ssh options to git ls-remote +- Git ls-remote +- Remove coolify labels from ui + +### 💼 Other + +- Fix subs + +## [4.0.0-beta.97] - 2023-10-20 + +### 🚀 Features + +- Standalone mongodb +- Cloning project +- Api tokens + deploy webhook +- Start all kinds of things +- Simple search functionality +- Mysql, mariadb +- Lock environment variables +- Download local backups + +### 🐛 Bug Fixes + +- Service docs links +- Add PGUSER to prevent HC warning +- Preselect s3 storage if available +- Port exposes change, shoud regenerate label +- Boarding +- Clone to with the same environment name +- Cleanup stucked resources on start +- Do not allow to delete env if a resource is defined +- Service template generator + appwrite +- Mongodb backup +- Make sure coolfiy network exists on install +- Syncbunny command +- Encrypt mongodb password +- Mongodb healtcheck command +- Rate limit for api + add mariadb + mysql +- Server settings guarded + +### 💼 Other + +- Generate services +- Mongodb backup +- Mongodb backup +- Updates + +## [4.0.0-beta.93] - 2023-10-18 + +### 🚀 Features + +- Able to customize docker labels on applications +- Show if config is not applied + +### 🐛 Bug Fixes + +- Setup:dev script & contribution guide +- Do not show configuration changed if config_hash is null +- Add config_hash if its null (old deployments) +- Label generation +- Labels +- Email channel no recepients +- Limit horizon processes to 2 by default +- Add custom port as ssh option to deploy_key based commands +- Remove custom port from git repo url +- ContainerStatus job + +### 💼 Other + +- PAT by team + +## [4.0.0-beta.92] - 2023-10-17 + +### 🐛 Bug Fixes + +- Proxy start process + +## [4.0.0-beta.91] - 2023-10-17 + +### 🐛 Bug Fixes + +- Always start proxy if not NONE is selected + +### 💼 Other + +- Add helper to service domains + +## [4.0.0-beta.90] - 2023-10-17 + +### 🐛 Bug Fixes + +- Only include config.json if its exists and a file + +### 💼 Other + +- Wordpress + +## [4.0.0-beta.89] - 2023-10-17 + +### 🐛 Bug Fixes + +- Noindex meta tag +- Show docker build logs + +## [4.0.0-beta.88] - 2023-10-17 + +### 🚀 Features + +- Use docker login credentials from server + +## [4.0.0-beta.87] - 2023-10-17 + +### 🐛 Bug Fixes + +- Service status check is a bit better +- Generate fqdn if you deleted a service app, but it requires fqdn +- Cancel any deployments + queue next +- Add internal domain names during build process + +## [4.0.0-beta.86] - 2023-10-15 + +### 🐛 Bug Fixes + +- Build image before starting dockerfile buildpacks + +## [4.0.0-beta.85] - 2023-10-14 + +### 🐛 Bug Fixes + +- Redis URL generated + +## [4.0.0-beta.83] - 2023-10-13 + +### 🐛 Bug Fixes + +- Docker hub URL + +## [4.0.0-beta.70] - 2023-10-09 + +### 🚀 Features + +- Add email verification for cloud +- Able to deploy docker images +- Add dockerfile location +- Proxy logs on the ui +- Add custom redis conf + +### 🐛 Bug Fixes + +- Server validation process +- Fqdn could be null +- Small +- Server unreachable count +- Do not reset unreachable count +- Contact docs +- Check connection +- Server saving +- No env goto envs from dashboard +- Goto +- Tcp proxy for dbs +- Database backups +- Only send email if transactional email set +- Backupfailed notification is forced +- Use port exposed for reverse proxy +- Contact link +- Use only ip addresses for servers +- Deleted team and it is the current one +- Add new team button +- Transactional email link +- Dashboard goto link +- Only require registry image in case of dockerimage bp +- Instant save build pack change +- Public git +- Cannot remove localhost +- Check localhost connection +- Send unreachable/revived notifications +- Boarding + verification +- Make sure proxy wont start in NONE mode +- Service check status 10 sec +- IsCloud in production seeder +- Make sure to use IP address +- Dockerfile location feature +- Server ip could be hostname in self-hosted +- Urls should be password fields +- No backup for redis +- Show database logs in case of its not healthy and running +- Proxy check for ports, do not kill anything listening on port 80/443 +- Traefik dashboard ip +- Db labels +- Docker cleanup jobs +- Timeout for instant remote processes +- Dev containerjobs +- Backup database one-by-one. +- Turn off static deployment if you switch buildpacks + +### 💼 Other + +- Dockerimage +- Updated dashboard +- Fix +- Fix +- Coolify proxy access logs exposed in dev +- Able to select environment on new resource +- Delete server +- Redis + +## [4.0.0-beta.58] - 2023-10-02 + +### 🚀 Features + +- Reset root password +- Attach Coolify defined networks to services +- Delete resource command +- Multiselect removable resources +- Disable service, required version +- Basedir / monorepo initial support +- Init version of any git deployment +- Deploy private repo with ssh key + +### 🐛 Bug Fixes + +- If waitlist is disabled, redirect to register +- Add destination to new services +- Predefined content for files +- Move /data to ./_data in dev +- UI +- Show all storages in one place for services +- Ui +- Add _data to vite ignore +- Only use _ in volume names for services +- Volume names in services +- Volume names +- Service logs visible if the whole service stack is not running +- Ui +- Compose magic +- Compose parser updated +- Dev compose files +- Traefik labels for multiport deployments +- Visible version number +- Remove SERVICE_ from deployable compose +- Delete event to deleting +- Move dev data to volumes to prevent permission issues +- Traefik labelling in case of several http and https domain added +- PR deployments use the first fqdn as base +- Email notifications subscription fixed +- Services - do not remove unnecessary things for now +- Decrease max horizon processes to get lower memory usage +- Test emails only available for user owned smtp/resend +- Ui for self-hosted email settings +- Set smtp notifications on by default +- Select branch on other git +- Private repository +- Contribution guide +- Public repository names +- *(create)* Flex wrap on server & network selection +- Better unreachable/revived server statuses +- Able to set base dir for Dockerfile build pack + +### 💼 Other + +- Uptime kume hc updated +- Switch back to /data (volume errors) +- Notifications +- Add shared email option to everyone + +## [4.0.0-beta.57] - 2023-10-02 + +### 🚀 Features + +- Container logs + +### 🐛 Bug Fixes + +- Always pull helper image in dev +- Only show last 1000 lines +- Service status + +## [4.0.0-beta.47] - 2023-09-28 + +### 🐛 Bug Fixes + +- Next helper image +- Service templates +- Sync:bunny +- Update process if server has been renamed +- Reporting handler +- Localhost privatekey update +- Remove private key in case you removed a github app +- Only show manually added private keys on server view +- Show source on all type of applications +- Docker cleanup should be a job by server +- File/dir based volumes are now read from the server +- Respect server fqdn +- If public repository does not have a main branch +- Preselect branc on private repos +- Deploykey branch +- Backups are now working again +- Not found base_branch in git webhooks +- Coolify db backup +- Preview deployments name, status etc +- Services should have destination as well +- Dockerfile expose is not overwritten +- If app settings is not saved to db +- Do not show subscription cancelled noti +- Show real volume names +- Only parse expose in dockerfiles if ports_exposes is empty +- Add uuid to volume names +- New volumes for services should have - instead of _ + +### 💼 Other + +- Fix previews to preview + +## [4.0.0-beta.46] - 2023-09-28 + +### 🐛 Bug Fixes + +- Containerstatusjob +- Aaaaaaaaaaaaaaaaa +- Services view +- Services +- Manually create network for services +- Disable early updates +- Sslip for localhost +- ContainerStatusJob +- Cannot delete env with available services +- Sync command +- Install script drops an error +- Prevent sync version (it needs an option) +- Instance fqdn setting +- Sentry 4510197209 +- Sentry 4504136641 +- Sentry 4502634789 + +## [4.0.0-beta.45] - 2023-09-24 + +### 🚀 Features + +- Services +- Image tag for services + +### 🐛 Bug Fixes + +- Applications with port mappins do a normal update (not rolling update) +- Put back build pack chooser +- Proxy configuration + starter +- Show real storage name on services +- New service template layout + +### 💼 Other + +- Fixed z-index for version link. +- Add source button +- Fixed z-index for magicbar +- A bit better error +- More visible feedback button +- Update help modal +- Help +- Marketing emails + +## [4.0.0-beta.28] - 2023-09-08 + +### 🚀 Features + +- Telegram topics separation +- Developer view for env variables +- Cache team settings +- Generate public key from private keys +- Able to invite more people at once +- Trial +- Dynamic trial period +- Ssh-agent instead of filesystem based ssh keys +- New container status checks +- Generate ssh key +- Sentry add email for better support +- Healthcheck for apps +- Add cloudflare tunnel support + +### 🐛 Bug Fixes + +- Db backup job +- Sentry 4459819517 +- Sentry 4451028626 +- Ui +- Retry notifications +- Instance email settings +- Ui +- Test email on for admins or custom smtp +- Coolify already exists should not throw error +- Delete database related things when delete database +- Remove -q from docker compose +- Errors in views +- Only send internal notifcations to enabled channels +- Recovery code +- Email sending error +- Sentry 4469575117 +- Old docker version error +- Errors +- Proxy check, reduce jobs, etc +- Queue after commit +- Remove nixpkgarchive +- Remove nixpkgarchive from ui +- Webhooks should not run if server is not functional +- Server is functional check +- Confirm email before sending +- Help should send cc on email +- Sub type +- Show help modal everywhere +- Forgot password +- Disable dockerfile based healtcheck for now +- Add timeout for ssh commands +- Prevent weird ui bug for validateServer +- Lowercase email in forgot password +- Lower case email on waitlist +- Encrypt jobs +- ProcessWithEnv()->run +- Plus boarding step about Coolify +- SaveConfigurationSync +- Help uri +- Sub for root +- Redirect on server not found +- Ip check +- Uniqueips +- Simply reply to help messages +- Help +- Rate limit +- Collect billing address +- Invitation +- Smtp view +- Ssh-agent revert +- Restarting container state on ui +- Generate new key +- Missing upgrade js +- Team error +- 4.0.0-beta.37 +- Localhost +- Proxy start (if not proxy defined, use Traefik) +- Do not remove localhost in boarding +- Allow non ip address (DNS) +- InstallDocker id not found +- Boarding +- Errors +- Proxy container status +- Proxy configuration saving +- Convert startProxy to action +- Stop/start UI on apps and dbs +- Improve localhost boarding process +- Try to use old docker-compose +- Boarding again +- Send internal notifications of email errors +- Add github app change on new app view +- Delete environment variables on app/db delete +- Save proxy configuration +- Add proxy to network with periodic check +- Proxy connections +- Delete persistent storages on resource deletion +- Prevent overwrite already existing env variables in services +- Mappings +- Sentry issue 4478125289 +- Make sure proxy path created +- StartProxy +- Server validation with cf tunnels +- Only show traefik dashboard if its available +- Services +- Database schema +- Report livewire errors +- Links with path +- Add traefik labels no matter if traefik is selected or not +- Add expose port for containers +- Also check docker socks permission on validation + +### 💼 Other + +- User should know that the public key +- Services are not availble yet +- Show registered users on waitlist page +- Nixpacksarchive +- Add Plausible analytics +- Global env variables +- Fix +- Trial emails +- Server check instead of app check +- Show trial instead of sub +- Server lost connection +- Services +- Services +- Services +- Ui for services +- Services +- Services +- Services +- Fixes +- Fix typo + +## [4.0.0-beta.27] - 2023-09-08 + +### 🐛 Bug Fixes + +- Bug + +## [4.0.0-beta.26] - 2023-09-08 + +### 🚀 Features + +- Public database + +## [4.0.0-beta.25] - 2023-09-07 + +### 🐛 Bug Fixes + +- SaveModel email settings + +## [4.0.0-beta.24] - 2023-09-06 + +### 🚀 Features + +- Send request in cloud +- Add discord notifications + +### 🐛 Bug Fixes + +- Form address +- Show hosted email service, just disable for non pro subs +- Add navbar for source + keys +- Add docker network to build process +- Overlapping apps +- Do not show system wide git on cloud +- Lowercase image names +- Typo + +### 💼 Other + +- Backup existing database + +## [4.0.0-beta.23] - 2023-09-01 + +### 🐛 Bug Fixes + +- Sentry bug +- Button loading animation + +## [4.0.0-beta.22] - 2023-09-01 + +### 🚀 Features + +- Add resend as transactional emails + +### 🐛 Bug Fixes + +- DockerCleanupjob +- Validation +- Webhook endpoint in cloud and no system wide gh app +- Subscriptions +- Password confirmation +- Proxy start job +- Dockerimage jobs are not overlapping + +## [4.0.0-beta.21] - 2023-08-27 + +### 🚀 Features + +- Invite by email from waitlist +- Rolling update + +### 🐛 Bug Fixes + +- Limits & server creation page +- Fqdn on apps + +### 💼 Other + +- Boarding + +## [4.0.0-beta.20] - 2023-08-17 + +### 🚀 Features + +- Send internal notification to discord +- Monitor server connection + +### 🐛 Bug Fixes + +- Make coolify-db backups unique dir + +## [4.0.0-beta.19] - 2023-08-15 + +### 🚀 Features + +- Pricing plans ans subs +- Add s3 storages +- Init postgresql database +- Add backup notifications +- Dockerfile build pack +- Cloud +- Force password reset + waitlist + +### 🐛 Bug Fixes + +- Remove buggregator from dev +- Able to change localhost's private key +- Readonly input box +- Notifications +- Licensing +- Subscription link +- Migrate db schema for smtp + discord +- Text field +- Null fqdn notifications +- Remove old modal +- Proxy stop/start ui +- Proxy UI +- Empty description +- Input and textarea +- Postgres_username name to not name, lol +- DatabaseBackupJob.php +- No storage +- Backup now button +- Ui + subscription +- Self-hosted + +### 💼 Other + +- Scheduled backups + +## [4.0.0-beta.18] - 2023-07-14 + +### 🚀 Features + +- Able to control multiplexing +- Add runRemoteCommandSync +- Github repo with deployment key +- Add persistent volumes +- Debuggable executeNow commands +- Add private gh repos +- Delete gh app +- Installation/update github apps +- Auto-deploy +- Deploy key based deployments +- Resource limits +- Long running queue with 1 hour of timeout +- Add arm build to dev +- Disk cleanup threshold by server +- Notify user of disk cleanup init + +### 🐛 Bug Fixes + +- Logo of CCCareers +- Typo +- Ssh +- Nullable name on deploy_keys +- Enviroments +- Remove dd - oops +- Add inprogress activity +- Application view +- Only set status in case the last command block is finished +- Poll activity +- Small typo +- Show activity on load +- Deployment should fail on error +- Tests +- Version +- Status not needed +- No project redirect +- Gh actions +- Set status +- Seeders +- Do not modify localhost +- Deployment_uuid -> type_uuid +- Read env from config, bc of cache +- Private key change view +- New destination +- Do not update next channel all the time +- Cancel deployment button +- Public repo limit shown + branch should be preselected. +- Better status on ui for apps +- Arm coolify version +- Formatting +- Gh actions +- Show github app secrets +- Do not force next version updates +- Debug log button +- Deployment key based works +- Deployment cancel/debug buttons +- Upgrade button +- Changing static build changes port +- Overwrite default nginx configuration +- Do not overlap docker image names +- Oops +- Found image name +- Name length +- Semicolons encoding by traefik +- Base_dir wip & outputs +- Cleanup docker images +- Nginx try_files +- Master is the default, not main +- No ms in rate limit resets +- Loading after button text +- Default value +- Localhost is usable +- Update docker-compose prod +- Cloud/checkoutid/lms +- Type of license code +- More verbose error +- Version lol +- Update prod compose +- Version + +### 💼 Other + +- Extract process handling from async job. +- Extract process handling from async job. +- Extract process handling from async job. +- Extract process handling from async job. +- Extract process handling from async job. +- Extract process handling from async job. +- Extract process handling from async job. +- Persisting data + +## [3.12.28] - 2023-03-16 + +### 🐛 Bug Fixes + +- Revert from dockerhub if ghcr.io does not exists + +## [3.12.27] - 2023-03-07 + +### 🐛 Bug Fixes + +- Show ip address as host in public dbs + +## [3.12.24] - 2023-03-04 + +### 🐛 Bug Fixes + +- Nestjs buildpack + +## [3.12.22] - 2023-03-03 + +### 🚀 Features + +- Add host path to any container + +### 🐛 Bug Fixes + +- Set PACK_VERSION to 0.27.0 +- PublishDirectory +- Host volumes +- Replace . & .. & $PWD with ~ +- Handle log format volumes + +## [3.12.19] - 2023-02-20 + +### 🚀 Features + +- Github raw icon url +- Remove svg support + +### 🐛 Bug Fixes + +- Typos in docs +- Url +- Network in compose files +- Escape new line chars in wp custom configs +- Applications cannot be deleted +- Arm servics +- Base directory not found +- Cannot delete resource when you are not on root team +- Empty port in docker compose + +## [3.12.18] - 2023-01-24 + +### 🐛 Bug Fixes + +- CleanupStuckedContainers +- CleanupStuckedContainers + +## [3.12.16] - 2023-01-20 + +### 🐛 Bug Fixes + +- Stucked containers + +## [3.12.15] - 2023-01-20 + +### 🐛 Bug Fixes + +- Cleanup function +- Cleanup stucked containers +- Deletion + cleanupStuckedContainers + +## [3.12.14] - 2023-01-19 + +### 🐛 Bug Fixes + +- Www redirect + +## [3.12.13] - 2023-01-18 + +### 🐛 Bug Fixes + +- Secrets + +## [3.12.12] - 2023-01-17 + +### 🚀 Features + +- Init h2c (http2/grpc) support +- Http + h2c paralel + +### 🐛 Bug Fixes + +- Build args docker compose +- Grpc + +## [3.12.11] - 2023-01-16 + +### 🐛 Bug Fixes + +- Compose file location +- Docker log sequence +- Delete apps with previews +- Do not cleanup compose applications as unconfigured +- Build env variables with docker compose +- Public gh repo reload compose + +### 💼 Other + +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc + +## [3.12.10] - 2023-01-11 + +### 💼 Other + +- Add missing variables + +## [3.12.9] - 2023-01-11 + +### 🚀 Features + +- Add Openblocks icon +- Adding icon for whoogle +- *(ui)* Add libretranslate service icon +- Handle invite_only plausible analytics + +### 🐛 Bug Fixes + +- Custom gitlab git user +- Add documentation link again +- Remove prefetches +- Doc link +- Temporary disable dns check with dns servers +- Local images for reverting +- Secrets + +## [3.12.8] - 2022-12-27 + +### 🐛 Bug Fixes + +- Parsing secrets +- Read-only permission +- Read-only iam +- $ sign in secrets + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.12.5] - 2022-12-26 + +### 🐛 Bug Fixes + +- Remove unused imports + +### 💼 Other + +- Conditional on environment + +## [3.12.2] - 2022-12-19 + +### 🐛 Bug Fixes + +- Appwrite tmp volume +- Do not replace secret +- Root user for dbs on arm +- Escape secrets +- Escape env vars +- Envs +- Docker buildpack env +- Secrets with newline +- Secrets +- Add default node_env variable +- Add default node_env variable +- Secrets +- Secrets +- Gh actions +- Duplicate env variables +- Cleanupstorage + +### 💼 Other + +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc +- Trpc + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.12.1] - 2022-12-13 + +### 🐛 Bug Fixes + +- Build commands +- Migration file +- Adding missing appwrite volume + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.12.0] - 2022-12-09 + +### 🚀 Features + +- Use registry for building +- Docker registries working +- Custom docker compose file location in repo +- Save doNotTrackData to db +- Add default sentry +- Do not track in settings +- System wide git out of beta +- Custom previewseparator +- Sentry frontend +- Able to host static/php sites on arm +- Save application data before deploying +- SimpleDockerfile deployment +- Able to push image to docker registry +- Revert to remote image +- *(api)* Name label + +### 🐛 Bug Fixes + +- 0 destinations redirect after creation +- Seed +- Sentry dsn update +- Dnt +- Ui +- Only visible with publicrepo +- Migrations +- Prevent webhook errors to be logged +- Login error +- Remove beta from systemwide git +- Git checkout +- Remove sentry before migration +- Webhook previewseparator +- Apache on arm +- Update PR/MRs with new previewSeparator +- Static for arm +- Failed builds should not push images +- Turn off autodeploy for simpledockerfiles +- Security hole +- Rde +- Delete resource on dashboard +- Wrong port in case of docker compose +- Public db icon on dashboard +- Cleanup + +### 💼 Other + +- Pocketbase release + +## [3.11.10] - 2022-11-16 + +### 🚀 Features + +- Only show expose if no proxy conf defined in template +- Custom/private docker registries + +### 🐛 Bug Fixes + +- Local dev api/ws urls +- Wrong template/type +- Gitea icon is svg +- Gh actions +- Gh actions +- Replace $$generate vars +- Webhook traefik +- Exposed ports +- Wrong icons on dashboard +- Escape % in secrets +- Move debug log settings to build logs +- Storage for compose bp + debug on +- Hasura admin secret +- Logs +- Mounts +- Load logs after build failed +- Accept logged and not logged user in /base +- Remote haproxy password/etc +- Remove hardcoded sentry dsn +- Nope in database strings + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Version++ +- Version++ + +## [3.11.9] - 2022-11-15 + +### 🐛 Bug Fixes + +- IsBot issue + +## [3.11.8] - 2022-11-14 + +### 🐛 Bug Fixes + +- Default icon for new services + +## [3.11.1] - 2022-11-08 + +### 🚀 Features + +- Rollback coolify + +### 🐛 Bug Fixes + +- Remove contribution docs +- Umami template +- Compose webhooks fixed +- Variable replacements +- Doc links +- For rollback +- N8n and weblate icon +- Expose ports for services +- Wp + mysql on arm +- Show rollback button loading +- No tags error +- Update on mobile +- Dashboard error +- GetTemplates +- Docker compose persistent volumes +- Application persistent storage things +- Volume names for undefined volume names in compose +- Empty secrets on UI +- Ports for services + +### 💼 Other + +- Secrets on apps +- Fix +- Fixes +- Reload compose loading + +### 🚜 Refactor + +- Code + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Add jda icon for lavalink service +- Version++ + +### ◀️ Revert + +- Revert: revert + +## [3.11.0] - 2022-11-07 + +### 🚀 Features + +- Initial support for specific git commit +- Add default to latest commit and support for gitlab +- Redirect catch-all rule + +### 🐛 Bug Fixes + +- Secret errors +- Service logs +- Heroku bp +- Expose port is readonly on the wrong condition +- Toast +- Traefik proxy q 10s +- App logs view +- Tooltip +- Toast, rde, webhooks +- Pathprefix +- Load public repos +- Webhook simplified +- Remote webhooks +- Previews wbh +- Webhooks +- Websecure redirect +- Wb for previews +- Pr stopps main deployment +- Preview wbh +- Wh catchall for all +- Remove old minio proxies +- Template files +- Compose icon +- Templates +- Confirm restart service +- Template +- Templates +- Templates +- Plausible analytics things +- Appwrite webhook +- Coolify instance proxy +- Migrate template +- Preview webhooks +- Simplify webhooks +- Remove ghost-mariadb from the list +- More simplified webhooks +- Umami + ghost issues + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.10.16] - 2022-10-12 + +### 🐛 Bug Fixes + +- Single container logs and usage with compose + +### 💼 Other + +- New resource label + +## [3.10.15] - 2022-10-12 + +### 🚀 Features + +- Monitoring by container + +### 🐛 Bug Fixes + +- Do not show nope as ip address for dbs +- Add git sha to build args +- Smart search for new services +- Logs for not running containers +- Update docker binaries +- Gh release +- Dev container +- Gitlab auth and compose reload +- Check compose domains in general +- Port required if fqdn is set +- Appwrite v1 missing containers +- Dockerfile +- Pull does not work remotely on huge compose file + +### ⚙️ Miscellaneous Tasks + +- Update staging release + +## [3.10.14] - 2022-10-05 + +### 🚀 Features + +- Docker compose support +- Docker compose +- Docker compose + +### 🐛 Bug Fixes + +- Do not use npx +- Pure docker based development + +### 💼 Other + +- Docker-compose support +- Docker compose +- Remove worker jobs +- One less worker thread + +### 🧪 Testing + +- Remove prisma + +## [3.10.5] - 2022-09-26 + +### 🚀 Features + +- Add migration button to appwrite +- Custom certificate +- Ssl cert on traefik config +- Refresh resource status on dashboard +- Ssl certificate sets custom ssl for applications +- System-wide github apps +- Cleanup unconfigured applications +- Cleanup unconfigured services and databases + +### 🐛 Bug Fixes + +- Ui +- Tooltip +- Dropdown +- Ssl certificate distribution +- Db migration +- Multiplex ssh connections +- Able to search with id +- Not found redirect +- Settings db requests +- Error during saving logs +- Consider base directory in heroku bp +- Basedirectory should be empty if null +- Allow basedirectory for heroku +- Stream logs for heroku bp +- Debug log for bp +- Scp without host verification & cert copy +- Base directory & docker bp +- Laravel php chooser +- Multiplex ssh and ssl copy +- Seed new preview secret types +- Error notification +- Empty preview value +- Error notification +- Seed +- Service logs +- Appwrite function network is not the default +- Logs in docker bp +- Able to delete apps in unconfigured state +- Disable development low disk space +- Only log things to console in dev mode +- Do not get status of more than 10 resources defined by category +- BaseDirectory +- Dashboard statuses +- Default buildImage and baseBuildImage +- Initial deploy status +- Show logs better +- Do not start tcp proxy without main container +- Cleanup stucked tcp proxies +- Default 0 pending invitations +- Handle forked repositories +- Typo +- Pr branches +- Fork pr previews +- Remove unnecessary things +- Meilisearch data dir +- Verify and configure remote docker engines +- Add buildkit features +- Nope if you are not logged in + +### 💼 Other + +- Responsive! +- Fixes +- Fix git icon +- Dropdown as infobox +- Small logs on mobile +- Improvements +- Fix destination view +- Settings view +- More UI improvements +- Fixes +- Fixes +- Fix +- Fixes +- Beta features +- Fix button +- Service fixes +- Fix basedirectory meaning +- Resource button fix +- Main resource search +- Dev logs +- Loading button +- Fix gitlab importer view +- Small fix +- Beta flag +- Hasura console notification +- Fix +- Fix +- Fixes +- Inprogress version of iam +- Fix indicato +- Iam & settings update +- Send 200 for ping and installation wh +- Settings icon + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Version++ +- Version++ +- Version++ +- Version++ +- Version++ + +### ◀️ Revert + +- Show usage everytime + +## [3.10.2] - 2022-09-11 + +### 🚀 Features + +- Add queue reset button +- Previewapplications init +- PreviewApplications finalized +- Fluentbit +- Show remote servers +- *(layout)* Added drawer when user is in mobile +- Re-apply ui improves +- *(ui)* Improve header of pages +- *(styles)* Make header css component +- *(routes)* Improve ui for apps, databases and services logs + +### 🐛 Bug Fixes + +- Changing umami image URL to get latest version +- Gitlab importer for public repos +- Show error logs +- Umami init sql +- Plausible analytics actions +- Login +- Dev url +- UpdateMany build logs +- Fallback to db logs +- Fluentbit configuration +- Coolify update +- Fluentbit and logs +- Canceling build +- Logging +- Load more +- Build logs +- Versions of appwrite +- Appwrite?! +- Get building status +- Await +- Await #2 +- Update PR building status +- Appwrite default version 1.0 +- Undead endpoint does not require JWT +- *(routes)* Improve design of application page +- *(routes)* Improve design of git sources page +- *(routes)* Ui from destinations page +- *(routes)* Ui from databases page +- *(routes)* Ui from databases page +- *(routes)* Ui from databases page +- *(routes)* Ui from services page +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- *(routes)* Ui from settings page +- *(routes)* Duplicates classes in services page +- *(routes)* Searchbar ui +- Github conflicts +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- *(routes)* More ui tweaks +- Ui with headers +- *(routes)* Header of settings page in databases +- *(routes)* Ui from secrets table + +### 💼 Other + +- Fix plausible +- Fix cleanup button +- Fix buttons + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Minor changes +- Minor changes +- Minor changes +- Whoops + +## [3.10.1] - 2022-09-10 + +### 🐛 Bug Fixes + +- Show restarting apps +- Show restarting application & logs +- Remove unnecessary gitlab group name +- Secrets for PR +- Volumes for services +- Build secrets for apps +- Delete resource use window location + +### 💼 Other + +- Fix button +- Fix follow button +- Arm should be on next all the time + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.10.0] - 2022-09-08 + +### 🚀 Features + +- New servers view + +### 🐛 Bug Fixes + +- Change to execa from utils +- Save search input +- Ispublic status on databases +- Port checkers +- Ui variables +- Glitchtip env to pyhton boolean +- Autoupdater + +### 💼 Other + +- Dashboard updates +- Fix tooltip + +## [3.9.4] - 2022-09-07 + +### 🐛 Bug Fixes + +- DnsServer formatting +- Settings for service + +## [3.9.3] - 2022-09-07 + +### 🐛 Bug Fixes + +- Pr previews + +## [3.9.2] - 2022-09-07 + +### 🚀 Features + +- Add traefik acme json to coolify container +- Database secrets + +### 🐛 Bug Fixes + +- Gitlab webhook +- Use ip address instead of window location +- Use ip instead of window location host +- Service state update +- Add initial DNS servers +- Revert last change with domain check +- Service volume generation +- Minio default env variables +- Add php 8.1/8.2 +- Edgedb ui +- Edgedb stuff +- Edgedb + +### 💼 Other + +- Fix login/register page +- Update devcontainer +- Add debug log +- Fix initial loading icon bg +- Fix loading start/stop db/services +- Dashboard updates and a lot more + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ + +## [3.9.0] - 2022-09-06 + +### 🐛 Bug Fixes + +- Debug api logging + gh actions +- Workdir +- Move restart button to settings + +## [3.9.1-rc.1] - 2022-09-06 + +### 🚀 Features + +- *(routes)* Rework ui from login and register page + +### 🐛 Bug Fixes + +- Ssh pid agent name +- Repository link trim +- Fqdn or expose port required +- Service deploymentEnabled +- Expose port is not required +- Remote verification +- Dockerfile + +### 💼 Other + +- Database_branches +- Login page + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ + +## [3.9.0-rc.1] - 2022-09-02 + +### 🚀 Features + +- New service - weblate +- Restart application +- Show elapsed time on running builds +- Github allow fual branches +- Gitlab dual branch +- Taiga + +### 🐛 Bug Fixes + +- Glitchtip things +- Loading state on start +- Ui +- Submodule +- Gitlab webhooks +- UI + refactor +- Exposedport on save +- Appwrite letsencrypt +- Traefik appwrite +- Traefik +- Finally works! :) +- Rename components + remove PR/MR deployment from public repos +- Settings missing id +- Explainer component +- Database name on logs view +- Taiga + +### 💼 Other + +- Fixes +- Change tooltips and info boxes +- Added rc release + +### 🧪 Testing + +- Native binary target +- Dockerfile + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.8.9] - 2022-08-30 + +### 🐛 Bug Fixes + +- Oh god Prisma + +## [3.8.8] - 2022-08-30 + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.8.6] - 2022-08-30 + +### 🐛 Bug Fixes + +- Pr deployment +- CompareVersions +- Include +- Include +- Gitlab apps + +### 💼 Other + +- Fixes +- Route to the correct path when creating destination from db config + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.8.5] - 2022-08-27 + +### 🐛 Bug Fixes + +- Copy all files during install process +- Typo +- Process +- White labeled icon on navbar +- Whitelabeled icon +- Next/nuxt deployment type +- Again + +## [3.8.4] - 2022-08-27 + +### 🐛 Bug Fixes + +- UI thinkgs +- Delete team while it is active +- Team switching +- Queue cleanup +- Decrypt secrets +- Cleanup build cache as well +- Pr deployments + remove public gits + +### 💼 Other + +- Dashbord fixes +- Fixes + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.8.3] - 2022-08-26 + +### 🐛 Bug Fixes + +- Secrets decryption + +## [3.8.2] - 2022-08-26 + +### 🚀 Features + +- *(ui)* Rework home UI and with responsive design + +### 🐛 Bug Fixes + +- Never stop deplyo queue +- Build queue system +- High cpu usage +- Worker +- Better worker system + +### 💼 Other + +- Dashboard fine-tunes +- Fine-tune +- Fixes +- Fix + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.8.1] - 2022-08-24 + +### 🐛 Bug Fixes + +- Ui buttons +- Clear queue on cancelling jobs +- Cancelling jobs +- Dashboard for admins + +## [3.8.0] - 2022-08-23 + +### 🚀 Features + +- Searxng service + +### 🐛 Bug Fixes + +- Port checker +- Cancel build after 5 seconds +- ExposedPort checker +- Batch secret = +- Dashboard for non-root users +- Stream build logs +- Show build log start/end + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.7.0] - 2022-08-19 + +### 🚀 Features + +- Add GlitchTip service + +### 🐛 Bug Fixes + +- Missing commas +- ExposedPort is just optional + +### ⚙️ Miscellaneous Tasks + +- Add .pnpm-store in .gitignore +- Version++ + +## [3.6.0] - 2022-08-18 + +### 🚀 Features + +- Import public repos (wip) +- Public repo deployment +- Force rebuild + env.PORT for port + public repo build + +### 🐛 Bug Fixes + +- Bots without exposed ports + +### 💼 Other + +- Fixes here and there + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.5.2] - 2022-08-17 + +### 🐛 Bug Fixes + +- Restart containers on-failure instead of always +- Show that Ghost values could be changed + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.5.1] - 2022-08-17 + +### 🐛 Bug Fixes + +- Revert docker compose version to 2.6.1 +- Trim secrets + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.5.0] - 2022-08-17 + +### 🚀 Features + +- Deploy bots (no domains) +- Custom dns servers + +### 🐛 Bug Fixes + +- Dns button ui +- Bot deployments +- Bots +- AutoUpdater & cleanupStorage jobs + +### 💼 Other + +- Typing + +## [3.4.0] - 2022-08-16 + +### 🚀 Features + +- Appwrite service +- Heroku deployments + +### 🐛 Bug Fixes + +- Replace docker compose with docker-compose on CSB +- Dashboard ui +- Create coolify-infra, if it does not exists +- Gitpod conf and heroku buildpacks +- Appwrite +- Autoimport + readme +- Services import +- Heroku icon +- Heroku icon + +## [3.3.4] - 2022-08-15 + +### 🐛 Bug Fixes + +- Make it public button +- Loading indicator + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.3.3] - 2022-08-14 + +### 🐛 Bug Fixes + +- Decryption errors +- Postgresql on ARM + +## [3.3.2] - 2022-08-12 + +### 🐛 Bug Fixes + +- Debounce dashboard status requests + +### 💼 Other + +- Fider + +## [3.3.1] - 2022-08-12 + +### 🐛 Bug Fixes + +- Empty buildpack icons + +## [3.2.3] - 2022-08-12 + +### 🚀 Features + +- Databases on ARM +- Mongodb arm support +- New dashboard + +### 🐛 Bug Fixes + +- Cleanup stucked prisma-engines +- Toast +- Secrets +- Cleanup prisma engine if there is more than 1 +- !isARM to isARM +- Enterprise GH link + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.2.2] - 2022-08-11 + +### 🐛 Bug Fixes + +- Coolify-network on verification + +## [3.2.1] - 2022-08-11 + +### 🚀 Features + +- Init heroku buildpacks + +### 🐛 Bug Fixes + +- Follow/cancel buttons +- Only remove coolify managed containers +- White-labeled env +- Schema + +### 💼 Other + +- Fix + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.2.0] - 2022-08-11 + +### 🚀 Features + +- Persistent storage for all services +- Cleanup clickhouse db + +### 🐛 Bug Fixes + +- Rde local ports +- Empty remote destinations could be removed +- Tips +- Lowercase issues fider +- Tooltip colors +- Update clickhouse configuration +- Cleanup command +- Enterprise Github instance endpoint + +### 💼 Other + +- Local ssh port +- Redesign a lot +- Fixes +- Loading indicator for plausible buttons + +## [3.1.4] - 2022-08-01 + +### 🚀 Features + +- Moodle init +- Remote docker engine init +- Working on remote docker engine +- Rde +- Remote docker engine +- Ipv4 and ipv6 +- Contributors +- Add arch to database +- Stop preview deployment + +### 🐛 Bug Fixes + +- Settings from api +- Selectable destinations +- Gitpod hardcodes +- Typo +- Typo +- Expose port checker +- States and exposed ports +- CleanupStorage +- Remote traefik webhook +- Remote engine ip address +- RemoteipAddress +- Explanation for remote engine url +- Tcp proxy +- Lol +- Webhook +- Dns check for rde +- Gitpod +- Revert last commit +- Dns check +- Dns checker +- Webhook +- Df and more debug +- Webhooks +- Load previews async +- Destination icon +- Pr webhook +- Cache image +- No ssh key found +- Prisma migration + update of docker and stuffs +- Ui +- Ui +- Only 1 ssh-agent is needed +- Reuse ssh connection +- Ssh tunnel +- Dns checking +- Fider BASE_URL set correctly + +### 💼 Other + +- Error message https://github.com/coollabsio/coolify/issues/502 +- Changes +- Settings +- For removing app + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.1.3] - 2022-07-18 + +### 🚀 Features + +- Init moodle and separate stuffs to shared package + +### 🐛 Bug Fixes + +- More types for API +- More types +- Do not rebuild in case image exists and sha not changed +- Gitpod urls +- Remove new service start process +- Remove shared dir, deployment does not work +- Gitlab custom url +- Location url for services and apps + +## [3.1.2] - 2022-07-14 + +### 🐛 Bug Fixes + +- Admin password reset should not timeout +- Message for double branches +- Turn off autodeploy if double branch is configured + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.1.1] - 2022-07-13 + +### 🚀 Features + +- Gitpod integration + +### 🐛 Bug Fixes + +- Cleanup less often and can do it manually + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ + +## [3.1.0] - 2022-07-12 + +### 🚀 Features + +- Ability to change deployment type for nextjs +- Ability to change deployment type for nuxtjs +- Gitpod ready code(almost) +- Add Docker buildpack exposed port setting +- Custom port for git instances + +### 🐛 Bug Fixes + +- GitLab pagination load data +- Service domain checker +- Wp missing ftp solution +- Ftp WP issues +- Ftp?! +- Gitpod updates +- Gitpod +- Gitpod +- Wordpress FTP permission issues +- GitLab search fields +- GitHub App button +- GitLab loop on misconfigured source +- Gitpod + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [3.0.3] - 2022-07-06 + +### 🐛 Bug Fixes + +- Domain check +- Domain check +- TrustProxy for Fastify +- Hostname issue + +## [3.0.2] - 2022-07-06 + +### 🐛 Bug Fixes + +- New destination can be created +- Include post +- New destinations + +## [3.0.1] - 2022-07-06 + +### 🐛 Bug Fixes + +- Seeding +- Forgot that the version bump changed 😅 + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.11] - 2022-06-20 + +### 🐛 Bug Fixes + +- Be able to change database + service versions +- Lock file + +## [2.9.10] - 2022-06-17 + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.9] - 2022-06-10 + +### 🐛 Bug Fixes + +- Host and reload for uvicorn +- Remove package-lock + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.8] - 2022-06-10 + +### 🐛 Bug Fixes + +- Persistent nocodb +- Nocodb persistency + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.7] - 2022-06-09 + +### 🐛 Bug Fixes + +- Plausible custom script +- Plausible script and middlewares +- Remove console log +- Remove comments +- Traefik middleware + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.6] - 2022-06-02 + +### 🐛 Bug Fixes + +- Fider changed an env variable name +- Pnpm command + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.5] - 2022-06-02 + +### 🐛 Bug Fixes + +- Proxy stop missing argument + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.4] - 2022-06-01 + +### 🐛 Bug Fixes + +- Demo version forms +- Typo +- Revert gh and gl cloning + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.3] - 2022-05-31 + +### 🐛 Bug Fixes + +- Recurisve clone instead of submodule +- Versions +- Only reconfigure coolify proxy if its missconfigured + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.2] - 2022-05-31 + +### 🐛 Bug Fixes + +- TrustProxy +- Force restart proxy +- Only restart coolify proxy in case of version prior to 2.9.2 +- Force restart proxy on seeding +- Add GIT ENV variable for submodules + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.1] - 2022-05-31 + +### 🐛 Bug Fixes + +- GitHub fixes + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.9.0] - 2022-05-31 + +### 🚀 Features + +- PageLoader +- Database + service usage + +### 🐛 Bug Fixes + +- Service checks +- Remove console.log +- Traefik +- Remove debug things +- WIP Traefik +- Proxy for http +- PR deployments view +- Minio urls + domain checks +- Remove gh token on git source changes +- Do not fetch app state in case of missconfiguration +- Demo instance save domain instantly +- Instant save on demo instance +- New source canceled view +- Lint errors in database services +- Otherfqdns +- Host key verification +- Ftp connection + +### 💼 Other + +- Appwrite +- Testing WS +- Traefik?! +- Traefik +- Traefik +- Traefik migration +- Traefik +- Traefik +- Traefik +- Notifications and application usage +- *(fix)* Traefik +- Css + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.8.2] - 2022-05-16 + +### 🐛 Bug Fixes + +- Gastby buildpack + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.8.1] - 2022-05-10 + +### 🐛 Bug Fixes + +- WP custom db +- UI + +## [2.6.1] - 2022-05-03 + +### 🚀 Features + +- Basic server usage on dashboard +- Show usage trends +- Usage on dashboard +- Custom script path for Plausible +- WP could have custom db +- Python image selection + +### 🐛 Bug Fixes + +- ExposedPorts +- Logos for dbs +- Do not run SSL renew in development +- Check domain for coolify before saving +- Remove debug info +- Cancel jobs +- Cancel old builds in database +- Better DNS check to prevent errors +- Check DNS in prod only +- DNS check +- Disable sentry for now +- Cancel +- Sentry +- No image for Docker buildpack +- Default packagemanager +- Server usage only shown for root team +- Expose ports for services +- UI +- Navbar UI +- UI +- UI +- Remove RC python +- UI +- UI +- UI +- Default Python package + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Version++ +- Version++ + +## [2.6.0] - 2022-05-02 + +### 🚀 Features + +- Hasura as a service +- Gzip compression +- Laravel buildpack is working! +- Laravel +- Fider service +- Database and services logs +- DNS check settings for SSL generation +- Cancel builds! + +### 🐛 Bug Fixes + +- Unami svg size +- Team switching moved to IAM menu +- Always use IP address for webhooks +- Remove unnecessary test endpoint +- UI +- Migration +- Fider envs +- Checking low disk space +- Build image +- Update autoupdate env variable +- Renew certificates +- Webhook build images +- Missing node versions + +### 💼 Other + +- Laravel + +## [2.4.11] - 2022-04-20 + +### 🚀 Features + +- Deno DB migration +- Show exited containers on UI & better UX +- Query container state periodically +- Install svelte-18n and init setup +- Umami service +- Coolify auto-updater +- Autoupdater +- Select base image for buildpacks + +### 🐛 Bug Fixes + +- Deno configurations +- Text on deno buildpack +- Correct branch shown in build logs +- Vscode permission fix +- I18n +- Locales +- Application logs is not reversed and queried better +- Do not activate i18n for now +- GitHub token cleanup on team switch +- No logs found +- Code cleanups +- Reactivate posgtres password +- Contribution guide +- Simplify list services +- Contribution +- Contribution guide +- Contribution guide +- Packagemanager finder + +### 💼 Other + +- Umami service +- Base image selector + +### 📚 Documentation + +- How to add new services +- Update +- Update + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Version++ + +## [2.4.10] - 2022-04-17 + +### 🚀 Features + +- Add persistent storage for services +- Multiply dockerfile locations for docker buildpack +- Testing fluentd logging driver +- Fluentbit investigation +- Initial deno support + +### 🐛 Bug Fixes + +- Switch from bitnami/redis to normal redis +- Use redis-alpine +- Wordpress extra config +- Stop sFTP connection on wp stop +- Change user's id in sftp wp instance +- Use arm based certbot on arm +- Buildlog line number is not string +- Application logs paginated +- Switch to stream on applications logs +- Scroll to top for logs +- Pull new images for services all the time it's started. +- White-labeled custom logo +- Application logs + +### 💼 Other + +- Show extraconfig if wp is running + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ + +## [2.4.9] - 2022-04-14 + +### 🐛 Bug Fixes + +- Postgres root pw is pw field +- Teams view +- Improved tcp proxy monitoring for databases/ftp +- Add HTTP proxy checks +- Loading of new destinations +- Better performance for cleanup images +- Remove proxy container in case of dependent container is down +- Restart local docker coolify proxy in case of something happens to it +- Id of service container + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.8] - 2022-04-13 + +### 🐛 Bug Fixes + +- Register should happen if coolify proxy cannot be started +- GitLab typo +- Remove system wide pw reset + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.7] - 2022-04-13 + +### 🐛 Bug Fixes + +- Destinations to HAProxy + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.6] - 2022-04-13 + +### 🐛 Bug Fixes + +- Cleanup images older than a day +- Meilisearch service +- Load all branches, not just the first 30 +- ProjectID for Github +- DNS check before creating SSL cert +- Try catch me +- Restart policy for resources +- No permission on first registration +- Reverting postgres password for now + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.5] - 2022-04-12 + +### 🐛 Bug Fixes + +- Types +- Invitations +- Timeout values + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.4] - 2022-04-12 + +### 🐛 Bug Fixes + +- Haproxy build stuffs +- Proxy + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.3] - 2022-04-12 + +### 🐛 Bug Fixes + +- Remove unnecessary save button haha +- Update dockerfile + +### ⚙️ Miscellaneous Tasks + +- Update packages +- Version++ +- Update build scripts +- Update build packages + +## [2.4.2] - 2022-04-09 + +### 🐛 Bug Fixes + +- Missing install repositories GitHub +- Return own and other sources better +- Show config missing on sources + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.1] - 2022-04-09 + +### 🐛 Bug Fixes + +- Enable https for Ghost +- Postgres root passwor shown and set +- Able to change postgres user password from ui +- DB Connecting string generator + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.4.0] - 2022-04-08 + +### 🚀 Features + +- Wordpress on-demand SFTP +- Finalize on-demand sftp for wp +- PHP Composer support +- Working on-demand sftp to wp data +- Admin team sees everything +- Able to change service version/tag +- Basic white labeled version +- Able to modify database passwords + +### 🐛 Bug Fixes + +- Add openssl to image +- Permission issues +- On-demand sFTP for wp +- Fix for fix haha +- Do not pull latest image +- Updated db versions +- Only show proxy for admin team +- Team view for root team +- Do not trigger >1 webhooks on GitLab +- Possible fix for spikes in CPU usage +- Last commit +- Www or not-www, that's the question +- Fix for the fix that fixes the fix +- Ton of updates for users/teams +- Small typo +- Unique storage paths +- Self-hosted GitLab URL +- No line during buildLog +- Html/apiUrls cannot end with / +- Typo +- Missing buildpack + +### 💼 Other + +- Fix +- Better layout for root team +- Fix +- Fixes +- Fix +- Fix +- Fix +- Fix +- Fix +- Fix +- Fix +- Insane amount +- Fix +- Fixes +- Fixes +- Fix +- Fixes +- Fixes + +### 📚 Documentation + +- Contribution guide + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.3.3] - 2022-04-05 + +### 🐛 Bug Fixes + +- Add git lfs while deploying +- Try to update build status several times +- Update stucked builds +- Update stucked builds on startup +- Revert seed +- Lame fixing +- Remove asyncUntil + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.3.2] - 2022-04-04 + +### 🐛 Bug Fixes + +- *(php)* If .htaccess file found use apache +- Add default webhook domain for n8n + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.3.1] - 2022-04-04 + +### 🐛 Bug Fixes + +- Secrets build/runtime coudl be changed after save +- Default configuration + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.3.0] - 2022-04-04 + +### 🚀 Features + +- Initial python support +- Add loading on register button +- *(dev)* Allow windows users to use pnpm dev +- MeiliSearch service +- Add abilitry to paste env files + +### 🐛 Bug Fixes + +- Ignore coolify proxy error for now +- Python no wsgi +- If user not found +- Rename envs to secrets +- Infinite loop on www domains +- No need to paste clear text env for previews +- Build log fix attempt #1 +- Small UI fix on logs +- Lets await! +- Async progress +- Remove console.log +- Build log +- UI +- Gitlab & Github urls + +### 💼 Other + +- Improvements + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Lock file + fix packages + +## [2.2.7] - 2022-04-01 + +### 🐛 Bug Fixes + +- Haproxy errors +- Build variables +- Use NodeJS for sveltekit for now + +## [2.2.6] - 2022-03-31 + +### 🐛 Bug Fixes + +- Add PROTO headers + +## [2.2.5] - 2022-03-31 + +### 🐛 Bug Fixes + +- Registration enabled/disabled + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.2.4] - 2022-03-31 + +### 🐛 Bug Fixes + +- Gitlab repo url +- No need to dashify anymore + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.2.3] - 2022-03-31 + +### 🐛 Bug Fixes + +- List ghost services +- Reload window on settings saved +- Persistent storage on webhooks +- Add license +- Space in repo names + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ +- Version++ +- Fixed typo on New Git Source view + +## [2.2.0] - 2022-03-27 + +### 🚀 Features + +- Add n8n.io service +- Add update kuma service +- Ghost service + +### 🐛 Bug Fixes + +- Ghost logo size +- Ghost icon, remove console.log + +### 💼 Other + +- Colors on svelte-select + +### ⚙️ Miscellaneous Tasks + +- Version ++ + +## [2.1.1] - 2022-03-25 + +### 🐛 Bug Fixes + +- Cleanup only 2 hours+ old images + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.1.0] - 2022-03-23 + +### 🚀 Features + +- Use compose instead of normal docker cmd +- Be able to redeploy PRs + +### 🐛 Bug Fixes + +- Skip ssl cert in case of error +- Volumes + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.31] - 2022-03-20 + +### 🚀 Features + +- Add PHP modules + +### 🐛 Bug Fixes + +- Cleanup old builds +- Only cleanup same app +- Add nginx + htaccess files + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.30] - 2022-03-19 + +### 🐛 Bug Fixes + +- No cookie found +- Missing session data +- No error if GitSource is missing +- No webhook secret found? +- Basedir for dockerfiles +- Better queue system + more support on monorepos +- Remove build logs in case of app removed + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.29] - 2022-03-11 + +### 🚀 Features + +- Webhooks inititate all applications with the correct branch +- Check ssl for new apps/services first +- Autodeploy pause +- Install pnpm into docker image if pnpm lock file is used + +### 🐛 Bug Fixes + +- Personal Gitlab repos +- Autodeploy true by default for GH repos + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.28] - 2022-03-04 + +### 🚀 Features + +- Service secrets + +### 🐛 Bug Fixes + +- Do not error if proxy is not running + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.27] - 2022-03-02 + +### 🚀 Features + +- Send version with update request + +### 🐛 Bug Fixes + +- Check when a container is running +- Reload haproxy if new cert is added +- Cleanup coolify images +- Application state in UI + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.26] - 2022-03-02 + +### 🐛 Bug Fixes + +- Update process + +## [2.0.25] - 2022-03-02 + +### 🚀 Features + +- Languagetool service + +### 🐛 Bug Fixes + +- Reload proxy on ssl cert +- Volume name + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.24] - 2022-03-02 + +### 🐛 Bug Fixes + +- Better proxy check +- Ssl + sslrenew +- Null proxyhash on restart +- Reconfigure proxy on restart +- Update process + +## [2.0.23] - 2022-02-28 + +### 🐛 Bug Fixes + +- Be sure .env exists +- Missing fqdn for services +- Default npm command +- Add coolify-image label for build images +- Cleanup old images, > 3 days + +### 💼 Other + +- Colorful states +- Application start + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.22] - 2022-02-27 + +### 🐛 Bug Fixes + +- Coolify image pulls +- Remove wrong/stuck proxy configurations +- Always use a buildpack +- Add icons for eleventy + astro +- Fix proxy every 10 secs +- Do not remove coolify proxy +- Update version + +### 💼 Other + +- Remote docker engine + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.21] - 2022-02-24 + +### 🚀 Features + +- Random subdomain for demo +- Random domain for services +- Astro buildpack +- 11ty buildpack +- Registration page + +### 🐛 Bug Fixes + +- Http for demo, oops +- Docker scanner +- Improvement on image pulls + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.20] - 2022-02-23 + +### 🐛 Bug Fixes + +- Revert default network + +### 💼 Other + +- Dns check + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.19] - 2022-02-23 + +### 🐛 Bug Fixes + +- Random network name for demo +- Settings fqdn grr + +## [2.0.18] - 2022-02-22 + +### 🚀 Features + +- Ports range + +### 🐛 Bug Fixes + +- Email is lowercased in login +- Lowercase email everywhere +- Use normal docker-compose in dev + +### 💼 Other + +- Make copy/password visible + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.17] - 2022-02-21 + +### 🐛 Bug Fixes + +- Move tokens from session to cookie/store + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.14] - 2022-02-18 + +### 🚀 Features + +- Basic password reset form +- Scan for lock files and set right commands +- Public port range (WIP) + +### 🐛 Bug Fixes + +- SSL app off +- Local docker host +- Typo +- Lets encrypt +- Remove SSL with stop +- SSL off for services +- Grr +- Running state css +- Minor fixes +- Remove force SSL when doing let's encrypt request +- GhToken in session now +- Random port for certbot +- Follow icon +- Plausible volume fixed +- Database connection strings +- Gitlab webhooks fixed +- If DNS not found, do not redirect +- Github token + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version ++ + +## [2.0.13] - 2022-02-17 + +### 🐛 Bug Fixes + +- Login issues + +## [2.0.11] - 2022-02-15 + +### 🚀 Features + +- Follow logs +- Generate www & non-www SSL certs + +### 🐛 Bug Fixes + +- Window error in SSR +- GitHub sync PR's +- Load more button +- Small fixes +- Typo +- Error with follow logs +- IsDomainConfigured +- TransactionIds +- Coolify image cleanup +- Cleanup every 10 mins +- Cleanup images +- Add no user redis to uri +- Secure cookie disabled by default +- Buggy svelte-kit-cookie-session + +### 💼 Other + +- Only allow cleanup in production + +### ⚙️ Miscellaneous Tasks + +- Version++ +- Version++ + +## [2.0.10] - 2022-02-15 + +### 🐛 Bug Fixes + +- Typo +- Error handling +- Stopping service without proxy +- Coolify proxy start + +### ⚙️ Miscellaneous Tasks + +- Version++ + +## [2.0.8] - 2022-02-14 + +### 🐛 Bug Fixes + +- Validate secrets +- Truncate git clone errors +- Branch used does not throw error + +## [2.0.7] - 2022-02-13 + +### 🚀 Features + +- Www <-> non-www redirection for apps +- Www <-> non-www redirection + +### 🐛 Bug Fixes + +- Package.json +- Build secrets should be visible in runtime +- New secret should have default values + +## [2.0.5] - 2022-02-11 + +### 🚀 Features + +- VaultWarden service + +### 🐛 Bug Fixes + +- PreventDefault on a button, thats all +- Haproxy check should not throw error +- Delete all build files +- Cleanup images +- More error handling in proxy configuration + cleanups +- Local static assets +- Check sentry +- Typo + +### ⚙️ Miscellaneous Tasks + +- Version +- Version + +## [2.0.4] - 2022-02-11 + +### 🚀 Features + +- Use tags in update +- New update process (#115) + +### 🐛 Bug Fixes + +- Docker Engine bug related to live-restore and IPs +- Version + +## [2.0.3] - 2022-02-10 + +### 🐛 Bug Fixes + +- Capture non-error as error +- Only delete id.rsa in case of it exists +- Status is not available yet + +### ⚙️ Miscellaneous Tasks + +- Version bump + +## [2.0.2] - 2022-02-10 + +### 🐛 Bug Fixes + +- Secrets join +- ENV variables set differently + + From 12e139265e8a7a9fef3dd9c6560b545ef261c3d4 Mon Sep 17 00:00:00 2001 From: Rustypredator Date: Wed, 14 May 2025 15:15:17 +0200 Subject: [PATCH 010/229] feat(service): add Observium service (#5613) --- public/svgs/observium.webp | Bin 0 -> 65818 bytes templates/compose/observium.yaml | 53 +++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 public/svgs/observium.webp create mode 100644 templates/compose/observium.yaml diff --git a/public/svgs/observium.webp b/public/svgs/observium.webp new file mode 100644 index 0000000000000000000000000000000000000000..ff48b3194efea0040b1ba1d38f6bb221cc3254a5 GIT binary patch literal 65818 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⪙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 Date: Wed, 14 May 2025 17:33:52 +0200 Subject: [PATCH 011/229] refactore(service): observium --- templates/compose/observium.yaml | 48 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/templates/compose/observium.yaml b/templates/compose/observium.yaml index 9b3f0dc73..98abf29bc 100644 --- a/templates/compose/observium.yaml +++ b/templates/compose/observium.yaml @@ -6,47 +6,47 @@ services: observium: - image: 'mbixtech/observium:latest' - restart: unless-stopped + image: mbixtech/observium:latest volumes: - - 'observium-logs:/opt/observium/logs' - - 'observium-rrd:/opt/observium/rrd' + - observium_logs:/opt/observium/logs + - observium_rrd:/opt/observium/rrd environment: - - 'SERVICE_FQDN_OBSERVIUM=${SERVICE_FQDN_OBSERVIUM}' - - 'OBSERVIUM_ADMIN_PASS=${SERVICE_PASSWORD_OBSERVIUMADMIN}' - - 'OBSERVIUM_ADMIN_USER=${SERVICE_USER_OBSERVIUMADMIN}' - - 'OBSERVIUM_DB_HOST=db' - - 'OBSERVIUM_DB_NAME=observium' - - 'OBSERVIUM_DB_PASS=${SERVICE_PASSWORD_MARIADB}' - - 'OBSERVIUM_DB_USER=${SERVICE_USER_MARIADB}' + - SERVICE_FQDN_OBSERVIUM=${SERVICE_FQDN_OBSERVIUM} + - OBSERVIUM_ADMIN_PASS=${SERVICE_PASSWORD_OBSERVIUMADMIN} + - OBSERVIUM_ADMIN_USER=${SERVICE_USER_OBSERVIUMADMIN} + - OBSERVIUM_DB_HOST=mariadb + - OBSERVIUM_DB_NAME=${OBSERVIUM_DB_NAME:-observium-db} + - OBSERVIUM_DB_PASS=${SERVICE_PASSWORD_MARIADB} + - OBSERVIUM_DB_USER=${SERVICE_USER_MARIADB} depends_on: - - db + mariadb: + condition: service_healthy healthcheck: test: - CMD - curl - - '-f' - - 'http://localhost/' + - "-f" + - "http://localhost/" interval: 30s timeout: 10s retries: 3 start_period: 5s - db: - image: 'mariadb:lts' - restart: unless-stopped + + mariadb: + image: mariadb:lts volumes: - - 'db-data:/var/lib/mysql' + - observium_mariadb_data:/var/lib/mysql environment: - - 'MARIADB_ROOT_PASSWORD=${SERVICE_PASSWORD_MARIADBROOT}' - - 'MARIADB_USER=${SERVICE_USER_MARIADB}' - - 'MARIADB_PASSWORD=${SERVICE_PASSWORD_MARIADB}' - - 'MARIADB_DATABASE=observium' + - MARIADB_ROOT_PASSWORD=${SERVICE_PASSWORD_MARIADBROOT} + - MARIADB_USER=${SERVICE_USER_MARIADB} + - MARIADB_PASSWORD=${SERVICE_PASSWORD_MARIADB} + - MARIADB_DATABASE=${MARIADB_DATABASE:-observium-db} healthcheck: test: - CMD - healthcheck.sh - - '--connect' - - '--innodb_initialized' + - "--connect" + - "--innodb_initialized" start_period: 10s interval: 10s timeout: 5s From 4485cce9be4a7e8dd19c446e831bd8020328b34a Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 17:40:21 +0200 Subject: [PATCH 012/229] fix(service): add platform to Observium service --- templates/compose/observium.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/compose/observium.yaml b/templates/compose/observium.yaml index 98abf29bc..6d6b843f3 100644 --- a/templates/compose/observium.yaml +++ b/templates/compose/observium.yaml @@ -7,6 +7,7 @@ services: observium: image: mbixtech/observium:latest + platform: linux/amd64 volumes: - observium_logs:/opt/observium/logs - observium_rrd:/opt/observium/rrd From 2960801f08f774238e34ae92e9729f6036ee2344 Mon Sep 17 00:00:00 2001 From: Marcel Folaron Date: Wed, 14 May 2025 14:34:16 -0400 Subject: [PATCH 013/229] feat(service): add Leantime service (#5792) --- public/svgs/leantime.svg | 1 + templates/compose/leantime.yaml | 62 +++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100755 public/svgs/leantime.svg create mode 100644 templates/compose/leantime.yaml diff --git a/public/svgs/leantime.svg b/public/svgs/leantime.svg new file mode 100755 index 000000000..dac70d778 --- /dev/null +++ b/public/svgs/leantime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/compose/leantime.yaml b/templates/compose/leantime.yaml new file mode 100644 index 000000000..2083828b8 --- /dev/null +++ b/templates/compose/leantime.yaml @@ -0,0 +1,62 @@ +# documentation: https://leantime.io +# slogan: Leantime is a goals focused project management system for non-project managers. +# tags: project management,productivity,php,mysql,laravel,open source +# logo: svgs/leantime.svg +# port: 8080 + +services: + leantime: + image: leantime/leantime:latest + environment: + - SERVICE_FQDN_LEANTIME_8080 + - LEAN_APP_URL=${SERVICE_FQDN_LEANTIME} + - LEAN_DB_HOST=${DB_HOST:-leantimedb} + - LEAN_DB_USER=${SERVICE_USER_MYSQLDB} + - LEAN_DB_PASSWORD=${SERVICE_PASSWORD_MYSQLDB} + - LEAN_DB_DATABASE=${DB_NAME:-leantime} + - LEAN_SESSION_PASSWORD=${SERVICE_PASSWORD_64_SALT} + - LEAN_SESSION_EXPIRATION=${SESSION_EXPIRATION:-28800} + - LEAN_USE_REDIS=${USE_REDIS:-true} + - LEAN_REDIS_HOST=${REDIS_HOST:-leantimeredis} + - LEAN_REDIS_PORT=${REDIS_PORT:-6379} + - LEAN_REDIS_SCHEME=${REDIS_SCHEME:-tcp} + depends_on: + - leantimedb + - leantimeredis + volumes: + - public-userfiles:/var/www/html/public/userfiles + - userfiles:/var/www/html/userfiles + - plugins:/var/www/html/app/Plugins + healthcheck: + test: ["CMD", "curl", "-f", "http://127.0.0.1:8080"] + interval: 5s + timeout: 20s + retries: 10 + + leantimedb: + image: mysql:8.4 + volumes: + - db_data:/var/lib/mysql + restart: unless-stopped + environment: + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + - MYSQL_USER=${SERVICE_USER_MYSQLDB} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQLDB} + - MYSQL_DATABASE=${DB_NAME:-leantime} + command: --character-set-server=UTF8MB4 --collation-server=UTF8MB4_unicode_ci + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 30s + timeout: 10s + retries: 3 + + leantimeredis: + image: redis:7-alpine + command: redis-server --appendonly yes + volumes: + - leantimeredis-data:/data + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 5s + timeout: 5s + retries: 3 From aa8d85efdf67d39923002bc0eca1449198971c5e Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 20:44:20 +0200 Subject: [PATCH 014/229] refactor(service): improve leantime - rename some stuff - formatting --- templates/compose/leantime.yaml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/templates/compose/leantime.yaml b/templates/compose/leantime.yaml index 2083828b8..60d3c061b 100644 --- a/templates/compose/leantime.yaml +++ b/templates/compose/leantime.yaml @@ -10,19 +10,21 @@ services: environment: - SERVICE_FQDN_LEANTIME_8080 - LEAN_APP_URL=${SERVICE_FQDN_LEANTIME} - - LEAN_DB_HOST=${DB_HOST:-leantimedb} + - LEAN_DB_HOST=mysql - LEAN_DB_USER=${SERVICE_USER_MYSQLDB} - LEAN_DB_PASSWORD=${SERVICE_PASSWORD_MYSQLDB} - - LEAN_DB_DATABASE=${DB_NAME:-leantime} + - LEAN_DB_DATABASE=${DB_NAME:-leantime-db} - LEAN_SESSION_PASSWORD=${SERVICE_PASSWORD_64_SALT} - LEAN_SESSION_EXPIRATION=${SESSION_EXPIRATION:-28800} - LEAN_USE_REDIS=${USE_REDIS:-true} - - LEAN_REDIS_HOST=${REDIS_HOST:-leantimeredis} + - LEAN_REDIS_HOST=redis - LEAN_REDIS_PORT=${REDIS_PORT:-6379} - LEAN_REDIS_SCHEME=${REDIS_SCHEME:-tcp} depends_on: - - leantimedb - - leantimeredis + mysql: + condition: service_healthy + redis: + condition: service_started volumes: - public-userfiles:/var/www/html/public/userfiles - userfiles:/var/www/html/userfiles @@ -33,16 +35,15 @@ services: timeout: 20s retries: 10 - leantimedb: + mysql: image: mysql:8.4 volumes: - - db_data:/var/lib/mysql - restart: unless-stopped + - leantime_mysql_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} - MYSQL_USER=${SERVICE_USER_MYSQLDB} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQLDB} - - MYSQL_DATABASE=${DB_NAME:-leantime} + - MYSQL_DATABASE=${DB_NAME:-leantime-db} command: --character-set-server=UTF8MB4 --collation-server=UTF8MB4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] @@ -50,13 +51,13 @@ services: timeout: 10s retries: 3 - leantimeredis: + redis: image: redis:7-alpine command: redis-server --appendonly yes volumes: - - leantimeredis-data:/data + - leantime_redis_data:/data healthcheck: - test: [ "CMD", "redis-cli", "ping" ] + test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 3 From 2bd52d6cab5a2bbd01007077c2416afe0f145884 Mon Sep 17 00:00:00 2001 From: howardshand Date: Wed, 14 May 2025 13:46:14 -0500 Subject: [PATCH 015/229] feat(service): add Limesurvey service (#5751) --- public/svgs/limesurvey.svg | 32 +++++++++++++ templates/compose/limesurvey.yaml | 74 +++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 public/svgs/limesurvey.svg create mode 100644 templates/compose/limesurvey.yaml diff --git a/public/svgs/limesurvey.svg b/public/svgs/limesurvey.svg new file mode 100644 index 000000000..7f84f0f9d --- /dev/null +++ b/public/svgs/limesurvey.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/compose/limesurvey.yaml b/templates/compose/limesurvey.yaml new file mode 100644 index 000000000..ba9f7d7a0 --- /dev/null +++ b/templates/compose/limesurvey.yaml @@ -0,0 +1,74 @@ +# documentation: https://www.limesurvey.org/manual/ +# slogan: Simple, quick and anonymous online survey tool that's bursting with juicy insights. +# tags: online survey, forms, no code, open source +# logo: svgs/limesurvey.svg +# port: 80 + +services: + limesurvey: + image: adamzammit/limesurvey:latest + environment: + - SERVICE_FQDN_LIMESURVEY_80 + - LIMESURVEY_DB_HOST=mariadb + - LIMESURVEY_DB_PASSWORD=$SERVICE_PASSWORD_MYSQL + - LIMESURVEY_DB_USER=$SERVICE_USER_MYSQL + - LIMESURVEY_DB_NAME=${MYSQL_DATABASE:-limesurvey} + - LIMESURVEY_ADMIN_USER=${LIMESURVEY_ADMIN_USER:-admin} + - LIMESURVEY_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} + - LIMESURVEY_ADMIN_NAME=${LIMESURVEY_ADMIN_NAME:-Lime Administrator} + - LIMESURVEY_ADMIN_EMAIL=${LIMESURVEY_ADMIN_EMAIL:-lime@lime.lime} + - LIMESURVEY_FROM_EMAIL= + - LIMESURVEY_SMTP_HOST= + - LIMESURVEY_SMTP_USER= + - LIMESURVEY_SMTP_PASSWORD= + - LIMESURVEY_SMTP_SSL= + - LIMESURVEY_PHP_SESSION_SAVE_HANDLER=redis + - LIMESURVEY_PHP_SESSION_SAVE_PATH=tcp://redis:6379 + - TZ=America/Jamaica + volumes: + - limesurvey-plugins-data:/var/www/html/plugins + - limesurvey-upload-data:/var/www/html/upload + - limesurvey-config-data:/var/www/html/application/config + - limesurvey-sessions-data:/var/lime/sessions + depends_on: + mariadb: + condition: service_healthy + healthcheck: + test: + - CMD + - curl + - '-f' + - 'http://127.0.0.1' + interval: 2s + timeout: 10s + retries: 10 + + mariadb: + image: mariadb:11 + environment: + - MYSQL_USER=${SERVICE_USER_MYSQL:-limesurvey} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - MYSQL_DATABASE=${MYSQL_DATABASE:-limesurvey} + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + volumes: + - limesurvey-mariadb-data:/var/lib/mysql + healthcheck: + test: + - CMD + - healthcheck.sh + - '--connect' + - '--innodb_initialized' + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: redis:7 + healthcheck: + test: + - CMD + - redis-cli + - ping + interval: 5s + timeout: 3s + retries: 3 From bb06d35e7b61aee3805451e19b6bf96cbecb810a Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 20:51:22 +0200 Subject: [PATCH 016/229] refactor(service): imporve limesurvey - improve ENV naming and add missing ones - formatting --- templates/compose/limesurvey.yaml | 52 ++++++++++++++++--------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/templates/compose/limesurvey.yaml b/templates/compose/limesurvey.yaml index ba9f7d7a0..edd5a6542 100644 --- a/templates/compose/limesurvey.yaml +++ b/templates/compose/limesurvey.yaml @@ -4,41 +4,43 @@ # logo: svgs/limesurvey.svg # port: 80 -services: +services: limesurvey: image: adamzammit/limesurvey:latest environment: - SERVICE_FQDN_LIMESURVEY_80 - LIMESURVEY_DB_HOST=mariadb - - LIMESURVEY_DB_PASSWORD=$SERVICE_PASSWORD_MYSQL - - LIMESURVEY_DB_USER=$SERVICE_USER_MYSQL - - LIMESURVEY_DB_NAME=${MYSQL_DATABASE:-limesurvey} + - LIMESURVEY_DB_PASSWORD=${SERVICE_PASSWORD_MYSQL} + - LIMESURVEY_DB_USER=${SERVICE_USER_MYSQL} + - LIMESURVEY_DB_NAME=${MYSQL_DATABASE:-limesurvey-db} - LIMESURVEY_ADMIN_USER=${LIMESURVEY_ADMIN_USER:-admin} - LIMESURVEY_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN} - - LIMESURVEY_ADMIN_NAME=${LIMESURVEY_ADMIN_NAME:-Lime Administrator} - - LIMESURVEY_ADMIN_EMAIL=${LIMESURVEY_ADMIN_EMAIL:-lime@lime.lime} - - LIMESURVEY_FROM_EMAIL= - - LIMESURVEY_SMTP_HOST= - - LIMESURVEY_SMTP_USER= - - LIMESURVEY_SMTP_PASSWORD= - - LIMESURVEY_SMTP_SSL= + - LIMESURVEY_ADMIN_NAME=${LIMESURVEY_ADMIN_NAME:-Admin} + - LIMESURVEY_ADMIN_EMAIL=${LIMESURVEY_ADMIN_EMAIL:-admin@example.com} + - LIMESURVEY_FROM_EMAIL=${LIMESURVEY_FROM_EMAIL} + - LIMESURVEY_SMTP_HOST=${LIMESURVEY_SMTP_HOST} + - LIMESURVEY_SMTP_USER=${LIMESURVEY_SMTP_USER} + - LIMESURVEY_SMTP_PASSWORD=${LIMESURVEY_SMTP_PASSWORD} + - LIMESURVEY_SMTP_SSL=${LIMESURVEY_SMTP_SSL} - LIMESURVEY_PHP_SESSION_SAVE_HANDLER=redis - LIMESURVEY_PHP_SESSION_SAVE_PATH=tcp://redis:6379 - - TZ=America/Jamaica + - TZ=${TZ:-America/Jamaica} volumes: - - limesurvey-plugins-data:/var/www/html/plugins - - limesurvey-upload-data:/var/www/html/upload - - limesurvey-config-data:/var/www/html/application/config - - limesurvey-sessions-data:/var/lime/sessions + - limesurvey_plugins_data:/var/www/html/plugins + - limesurvey_upload_data:/var/www/html/upload + - limesurvey_config_data:/var/www/html/application/config + - limesurvey_sessions_data:/var/lime/sessions depends_on: mariadb: condition: service_healthy + redis: + condition: service_healthy healthcheck: test: - CMD - curl - - '-f' - - 'http://127.0.0.1' + - "-f" + - "http://127.0.0.1" interval: 2s timeout: 10s retries: 10 @@ -46,24 +48,24 @@ services: mariadb: image: mariadb:11 environment: - - MYSQL_USER=${SERVICE_USER_MYSQL:-limesurvey} + - MYSQL_USER=${SERVICE_USER_MYSQL} - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} - - MYSQL_DATABASE=${MYSQL_DATABASE:-limesurvey} + - MYSQL_DATABASE=${MYSQL_DATABASE:-limesurvey-db} - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} volumes: - - limesurvey-mariadb-data:/var/lib/mysql + - limesurvey_mariadb_data:/var/lib/mysql healthcheck: test: - CMD - healthcheck.sh - - '--connect' - - '--innodb_initialized' + - "--connect" + - "--innodb_initialized" interval: 5s timeout: 20s retries: 10 - + redis: - image: redis:7 + image: redis:7-alpine healthcheck: test: - CMD From e1301ffc6d8d9fd6ebd65849cda5ffe15387c0ab Mon Sep 17 00:00:00 2001 From: Corwin Date: Wed, 14 May 2025 20:56:42 +0200 Subject: [PATCH 017/229] feat(service): add Paymenter service (#5809) --- public/svgs/paymenter.svg | 11 ++++++ templates/compose/paymenter.yaml | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 public/svgs/paymenter.svg create mode 100644 templates/compose/paymenter.yaml diff --git a/public/svgs/paymenter.svg b/public/svgs/paymenter.svg new file mode 100644 index 000000000..8c063ff9e --- /dev/null +++ b/public/svgs/paymenter.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/templates/compose/paymenter.yaml b/templates/compose/paymenter.yaml new file mode 100644 index 000000000..132d64b1e --- /dev/null +++ b/templates/compose/paymenter.yaml @@ -0,0 +1,57 @@ +# documentation: https://paymenter.org/docs/guides/docker +# slogan: Open-Source Billing, Built for Hosting +# tags: automation, billing, open source +# logo: svgs/paymenter.svg +# port: 80 + +services: + database: + image: mariadb:10.11 + command: --default-authentication-plugin=mysql_native_password + volumes: + - "mysql:/var/lib/mysql" + healthcheck: + test: + ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized || exit 1"] + start_period: 10s + interval: 10s + timeout: 1s + retries: 3 + environment: + MYSQL_PASSWORD: ${SERVICE_PASSWORD_MYSQL} + MYSQL_ROOT_PASSWORD: ${SERVICE_PASSWORD_MYSQLROOT} + MYSQL_DATABASE: "paymenter" + MYSQL_USER: "paymenter" + cache: + image: redis:alpine + environment: + - 'REDIS_PASSWORD=${SERVICE_PASSWORD_64_REDIS}' + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + interval: 10s + timeout: 1s + retries: 3 + paymenter: + image: ghcr.io/paymenter/paymenter:latest + volumes: + - "app_logs:/app/storage/logs" + - "app_public:/app/storage/public" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] + interval: 10s + timeout: 1s + retries: 3 + environment: + SERVICE_FQDN_PAYMENTER: '${SERVICE_FQDN_PAYMENTER}' + DB_PASSWORD: ${SERVICE_PASSWORD_MYSQL} + APP_ENV: "production" + CACHE_STORE: "redis" + SESSION_DRIVER: "redis" + QUEUE_CONNECTION: "redis" + REDIS_HOST: "cache" + REDIS_USERNAME: default + REDIS_PASSWORD: '${SERVICE_PASSWORD_64_REDIS}' + DB_CONNECTION: "mariadb" + DB_HOST: "database" + DB_PORT: "3306" + APP_KEY: ${SERVICE_BASE64_KEY} From 73258d49189412237c00f808637f3ccc26cef6bb Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Wed, 14 May 2025 21:20:07 +0200 Subject: [PATCH 018/229] Update service-templates.json --- templates/service-templates.json | 103 ++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/templates/service-templates.json b/templates/service-templates.json index 912b57a56..c123d7a9a 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -605,6 +605,18 @@ "minversion": "0.0.0", "port": "8055" }, + "diun": { + "documentation": "https://crazymax.dev/diun/?utm_source=coolify.io", + "slogan": "Docker Image Update Notifier is a CLI application to receive notifications when a Docker image is updated on a Docker registry.", + "compose": "c2VydmljZXM6CiAgZGl1bjoKICAgIGltYWdlOiAnY3JhenltYXgvZGl1bjpsYXRlc3QnCiAgICBjb21tYW5kOiBzZXJ2ZQogICAgdm9sdW1lczoKICAgICAgLSAnZGl1bl9kYXRhOi9kYXRhJwogICAgICAtICcvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29jaycKICAgIGVudmlyb25tZW50OgogICAgICAtICdUWj0ke1RJTUVfWk9ORTotRXVyb3BlL1ZpZW5uYX0nCiAgICAgIC0gJ0xPR19MRVZFTD0ke0xPR19MRVZFTDotaW5mb30nCiAgICAgIC0gJ0xPR19KU09OPSR7TE9HX0pTT046LWZhbHNlfScKICAgICAgLSAnRElVTl9XQVRDSF9XT1JLRVJTPSR7RElVTl9XQVRDSF9XT1JLRVJTOi0yMH0nCiAgICAgIC0gJ0RJVU5fV0FUQ0hfU0NIRURVTEU9JHtDUk9OX1dBVENIX1NDSEVEVUxFOi0gKiAqLzYgKiAqICp9JwogICAgICAtICdESVVOX1dBVENIX0pJVFRFUj0ke0RJVU5fV0FUQ0hfSklUVEVSOi0zMHN9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVI9JHtESVVOX1BST1ZJREVSU19ET0NLRVI6LXRydWV9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ9JHtESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ6LXRydWV9JwogICAgICAtICdESVVOX05PVElGX1NMQUNLX1dFQkhPT0tVUkw9JHtTRVJWSUNFX1dFQkhPT0tfVVJMX1NMQUNLfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkaXVuCiAgICAgICAgLSAnLS12ZXJzaW9uJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDMK", + "tags": [ + "docker", + "notifier", + "slack" + ], + "logo": "svgs/diun.svg", + "minversion": "0.0.0" + }, "docker-registry": { "documentation": "https://docs.docker.com/registry/?utm_source=coolify.io", "slogan": "The Docker Registry lets you distribute Docker images.", @@ -1686,6 +1698,22 @@ "minversion": "0.0.0", "port": "3000" }, + "leantime": { + "documentation": "https://leantime.io?utm_source=coolify.io", + "slogan": "Leantime is a goals focused project management system for non-project managers.", + "compose": "c2VydmljZXM6CiAgbGVhbnRpbWU6CiAgICBpbWFnZTogJ2xlYW50aW1lL2xlYW50aW1lOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9MRUFOVElNRV84MDgwCiAgICAgIC0gJ0xFQU5fQVBQX1VSTD0ke1NFUlZJQ0VfRlFETl9MRUFOVElNRX0nCiAgICAgIC0gTEVBTl9EQl9IT1NUPW15c3FsCiAgICAgIC0gJ0xFQU5fREJfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTERCfScKICAgICAgLSAnTEVBTl9EQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxEQn0nCiAgICAgIC0gJ0xFQU5fREJfREFUQUJBU0U9JHtEQl9OQU1FOi1sZWFudGltZS1kYn0nCiAgICAgIC0gJ0xFQU5fU0VTU0lPTl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfNjRfU0FMVH0nCiAgICAgIC0gJ0xFQU5fU0VTU0lPTl9FWFBJUkFUSU9OPSR7U0VTU0lPTl9FWFBJUkFUSU9OOi0yODgwMH0nCiAgICAgIC0gJ0xFQU5fVVNFX1JFRElTPSR7VVNFX1JFRElTOi10cnVlfScKICAgICAgLSBMRUFOX1JFRElTX0hPU1Q9cmVkaXMKICAgICAgLSAnTEVBTl9SRURJU19QT1JUPSR7UkVESVNfUE9SVDotNjM3OX0nCiAgICAgIC0gJ0xFQU5fUkVESVNfU0NIRU1FPSR7UkVESVNfU0NIRU1FOi10Y3B9JwogICAgZGVwZW5kc19vbjoKICAgICAgbXlzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX3N0YXJ0ZWQKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3B1YmxpYy11c2VyZmlsZXM6L3Zhci93d3cvaHRtbC9wdWJsaWMvdXNlcmZpbGVzJwogICAgICAtICd1c2VyZmlsZXM6L3Zhci93d3cvaHRtbC91c2VyZmlsZXMnCiAgICAgIC0gJ3BsdWdpbnM6L3Zhci93d3cvaHRtbC9hcHAvUGx1Z2lucycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MDgwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgbXlzcWw6CiAgICBpbWFnZTogJ215c3FsOjguNCcKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2xlYW50aW1lX215c3FsX2RhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTERCfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMREJ9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke0RCX05BTUU6LWxlYW50aW1lLWRifScKICAgIGNvbW1hbmQ6ICctLWNoYXJhY3Rlci1zZXQtc2VydmVyPVVURjhNQjQgLS1jb2xsYXRpb24tc2VydmVyPVVURjhNQjRfdW5pY29kZV9jaScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSBsb2NhbGhvc3QKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMwogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczo3LWFscGluZScKICAgIGNvbW1hbmQ6ICdyZWRpcy1zZXJ2ZXIgLS1hcHBlbmRvbmx5IHllcycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2xlYW50aW1lX3JlZGlzX2RhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcmVkaXMtY2xpCiAgICAgICAgLSBwaW5nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAzCg==", + "tags": [ + "project management", + "productivity", + "php", + "mysql", + "laravel", + "open source" + ], + "logo": "svgs/leantime.svg", + "minversion": "0.0.0", + "port": "8080" + }, "libreoffice": { "documentation": "https://docs.linuxserver.io/images/docker-libreoffice/?utm_source=coolify.io", "slogan": "LibreOffice is a free and powerful office suite.", @@ -1713,6 +1741,20 @@ "minversion": "0.0.0", "port": "5000" }, + "limesurvey": { + "documentation": "https://www.limesurvey.org/manual/?utm_source=coolify.io", + "slogan": "Simple, quick and anonymous online survey tool that's bursting with juicy insights.", + "compose": "c2VydmljZXM6CiAgbGltZXN1cnZleToKICAgIGltYWdlOiAnYWRhbXphbW1pdC9saW1lc3VydmV5OmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9MSU1FU1VSVkVZXzgwCiAgICAgIC0gTElNRVNVUlZFWV9EQl9IT1NUPW1hcmlhZGIKICAgICAgLSAnTElNRVNVUlZFWV9EQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdMSU1FU1VSVkVZX0RCX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdMSU1FU1VSVkVZX0RCX05BTUU9JHtNWVNRTF9EQVRBQkFTRTotbGltZXN1cnZleS1kYn0nCiAgICAgIC0gJ0xJTUVTVVJWRVlfQURNSU5fVVNFUj0ke0xJTUVTVVJWRVlfQURNSU5fVVNFUjotYWRtaW59JwogICAgICAtICdMSU1FU1VSVkVZX0FETUlOX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9BRE1JTn0nCiAgICAgIC0gJ0xJTUVTVVJWRVlfQURNSU5fTkFNRT0ke0xJTUVTVVJWRVlfQURNSU5fTkFNRTotQWRtaW59JwogICAgICAtICdMSU1FU1VSVkVZX0FETUlOX0VNQUlMPSR7TElNRVNVUlZFWV9BRE1JTl9FTUFJTDotYWRtaW5AZXhhbXBsZS5jb219JwogICAgICAtICdMSU1FU1VSVkVZX0ZST01fRU1BSUw9JHtMSU1FU1VSVkVZX0ZST01fRU1BSUx9JwogICAgICAtICdMSU1FU1VSVkVZX1NNVFBfSE9TVD0ke0xJTUVTVVJWRVlfU01UUF9IT1NUfScKICAgICAgLSAnTElNRVNVUlZFWV9TTVRQX1VTRVI9JHtMSU1FU1VSVkVZX1NNVFBfVVNFUn0nCiAgICAgIC0gJ0xJTUVTVVJWRVlfU01UUF9QQVNTV09SRD0ke0xJTUVTVVJWRVlfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0xJTUVTVVJWRVlfU01UUF9TU0w9JHtMSU1FU1VSVkVZX1NNVFBfU1NMfScKICAgICAgLSBMSU1FU1VSVkVZX1BIUF9TRVNTSU9OX1NBVkVfSEFORExFUj1yZWRpcwogICAgICAtICdMSU1FU1VSVkVZX1BIUF9TRVNTSU9OX1NBVkVfUEFUSD10Y3A6Ly9yZWRpczo2Mzc5JwogICAgICAtICdUWj0ke1RaOi1BbWVyaWNhL0phbWFpY2F9JwogICAgdm9sdW1lczoKICAgICAgLSAnbGltZXN1cnZleV9wbHVnaW5zX2RhdGE6L3Zhci93d3cvaHRtbC9wbHVnaW5zJwogICAgICAtICdsaW1lc3VydmV5X3VwbG9hZF9kYXRhOi92YXIvd3d3L2h0bWwvdXBsb2FkJwogICAgICAtICdsaW1lc3VydmV5X2NvbmZpZ19kYXRhOi92YXIvd3d3L2h0bWwvYXBwbGljYXRpb24vY29uZmlnJwogICAgICAtICdsaW1lc3VydmV5X3Nlc3Npb25zX2RhdGE6L3Zhci9saW1lL3Nlc3Npb25zJwogICAgZGVwZW5kc19vbjoKICAgICAgbWFyaWFkYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDEwCiAgbWFyaWFkYjoKICAgIGltYWdlOiAnbWFyaWFkYjoxMScKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotbGltZXN1cnZleS1kYn0nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICB2b2x1bWVzOgogICAgICAtICdsaW1lc3VydmV5X21hcmlhZGJfZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczo3LWFscGluZScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSByZWRpcy1jbGkKICAgICAgICAtIHBpbmcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDNzCiAgICAgIHJldHJpZXM6IDMK", + "tags": [ + "online survey", + "forms", + "no code", + "open source" + ], + "logo": "svgs/limesurvey.svg", + "minversion": "0.0.0", + "port": "80" + }, "listmonk": { "documentation": "https://listmonk.app/?utm_source=coolify.io", "slogan": "Self-hosted newsletter and mailing list manager", @@ -2287,7 +2329,7 @@ "ntfy": { "documentation": "https://docs.ntfy.sh/?utm_source=coolify.io", "slogan": "ntfy is a simple HTTP-based pub-sub notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, and/or using a REST API.", - "compose": "c2VydmljZXM6CiAgbnRmeToKICAgIGltYWdlOiBiaW53aWVkZXJoaWVyL250ZnkKICAgIGNvbW1hbmQ6CiAgICAgIC0gc2VydmUKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9OVEZZXzgwCiAgICAgIC0gJ05URllfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTlRGWX0nCiAgICAgIC0gJ1RaPSR7VFo6LVVUQ30nCiAgICAgIC0gTlRGWV9DQUNIRV9GSUxFPS92YXIvY2FjaGUvbnRmeS9jYWNoZS5kYgogICAgICAtIE5URllfQVVUSF9GSUxFPS92YXIvbGliL250ZnkvYXV0aC5kYgogICAgICAtICdOVEZZX1VQU1RSRUFNX0JBU0VfVVJMPSR7VVBTVFJFQU1fQkFTRV9VUkw6LWh0dHBzOi8vbnRmeS5zaH0nCiAgICAgIC0gJ05URllfRU5BQkxFX1NJR05VUD0ke05URllfRU5BQkxFX1NJR05VUDotdHJ1ZX0nCiAgICAgIC0gJ05URllfRU5BQkxFX0xPR0lOPSR7TlRGWV9FTkFCTEVfTE9HSU46LXRydWV9JwogICAgICAtICdOVEZZX0NBQ0hFX0RVUkFUSU9OPSR7TlRGWV9DQUNIRV9EVVJBVElPTjotMjRofScKICAgICAgLSAnTlRGWV9BVFRBQ0hNRU5UX1RPVEFMX1NJWkVfTElNSVQ9JHtOVEZZX0FUVEFDSE1FTlRfVE9UQUxfU0laRV9MSU1JVDotMUd9JwogICAgICAtICdOVEZZX0FUVEFDSE1FTlRfRklMRV9TSVpFX0xJTUlUPSR7TlRGWV9BVFRBQ0hNRU5UX0ZJTEVfU0laRV9MSU1JVDotMTBNfScKICAgICAgLSAnTlRGWV9BVFRBQ0hNRU5UX0VYUElSWV9EVVJBVElPTj0ke05URllfQVRUQUNITUVOVF9FWFBJUllfRFVSQVRJT046LTI0aH0nCiAgICAgIC0gJ05URllfU01UUF9TRU5ERVJfQUREUj0ke05URllfU01UUF9TRU5ERVJfQUREUjotc210cC55b3VyLWRvbWFpbi5kZX0nCiAgICAgIC0gJ05URllfU01UUF9TRU5ERVJfVVNFUj0ke05URllfU01UUF9TRU5ERVJfVVNFUjotbm8tcmVwbHlAZGV9JwogICAgICAtICdOVEZZX1NNVFBfU0VOREVSX1BBU1M9JHtOVEZZX1NNVFBfU0VOREVSX1BBU1M6LXBhc3N3b3JkfScKICAgICAgLSAnTlRGWV9TTVRQX1NFTkRFUl9GUk9NPSR7TlRGWV9TTVRQX1NFTkRFUl9GUk9NOi1uby1yZXBseUBkZX0nCiAgICAgIC0gJ05URllfS0VFUEFMSVZFX0lOVEVSVkFMPSR7TlRGWV9LRUVQQUxJVkVfSU5URVJWQUw6LTVtfScKICAgICAgLSAnTlRGWV9NQU5BR0VSX0lOVEVSVkFMPSR7TlRGWV9NQU5BR0VSX0lOVEVSVkFMOi01bX0nCiAgICAgIC0gJ05URllfVklTSVRPUl9NRVNTQUdFX0RBSUxZX0xJTUlUPSR7TlRGWV9WSVNJVE9SX01FU1NBR0VfREFJTFlfTElNSVQ6LTEwMH0nCiAgICAgIC0gJ05URllfVklTSVRPUl9BVFRBQ0hNRU5UX0RBSUxZX0JBTkRXSURUSF9MSU1JVD0ke05URllfVklTSVRPUl9BVFRBQ0hNRU5UX0RBSUxZX0JBTkRXSURUSF9MSU1JVDotMUd9JwogICAgICAtICdOVEZZX1VQU1RSRUFNX0FDQ0VTU19UT0tFTj0ke1VQU1RSRUFNX0FDQ0VTU19UT0tFTn0nCiAgICAgIC0gJ05URllfQVVUSF9ERUZBVUxUX0FDQ0VTUz0ke05URllfQVVUSF9ERUZBVUxUX0FDQ0VTUzotcmVhZC13cml0ZX0nCiAgICAgIC0gJ05URllfV0VCX1BVU0hfUFVCTElDX0tFWT0ke05URllfV0VCX1BVU0hfUFVCTElDX0tFWX0nCiAgICAgIC0gJ05URllfV0VCX1BVU0hfUFJJVkFURV9LRVk9JHtOVEZZX1dFQl9QVVNIX1BSSVZBVEVfS0VZfScKICAgICAgLSAnTlRGWV9XRUJfUFVTSF9FTUFJTF9BRERSRVNTPSR7TlRGWV9XRUJfUFVTSF9FTUFJTF9BRERSRVNTfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ250ZnktY2FjaGU6L3Zhci9jYWNoZS9udGZ5JwogICAgICAtICdudGZ5LWRiOi92YXIvbGliL250ZnkvJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xIC0tdHJpZXM9MSBodHRwOi8vbG9jYWxob3N0OjgwL3YxL2hlYWx0aCAtTyAtIHwgZ3JlcCAtRW8gJyciaGVhbHRoeSJccyo6XHMqdHJ1ZScnIHx8IGV4aXQgMScKICAgICAgaW50ZXJ2YWw6IDYwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMwogICAgICBzdGFydF9wZXJpb2Q6IDQwcwo=", + "compose": "c2VydmljZXM6CiAgbnRmeToKICAgIGltYWdlOiBiaW53aWVkZXJoaWVyL250ZnkKICAgIGNvbW1hbmQ6CiAgICAgIC0gc2VydmUKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9OVEZZXzgwCiAgICAgIC0gJ05URllfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTlRGWX0nCiAgICAgIC0gJ1RaPSR7VFo6LVVUQ30nCiAgICAgIC0gTlRGWV9DQUNIRV9GSUxFPS92YXIvY2FjaGUvbnRmeS9jYWNoZS5kYgogICAgICAtIE5URllfQVVUSF9GSUxFPS92YXIvbGliL250ZnkvYXV0aC5kYgogICAgICAtIE5URllfV0VCX1BVU0hfRklMRT0vdmFyL2NhY2hlL250Znkvd2VicHVzaC5kYgogICAgICAtICdOVEZZX0JFSElORF9QUk9YWT0ke05URllfQkVISU5EX1BST1hZOi10cnVlfScKICAgICAgLSAnTlRGWV9VUFNUUkVBTV9CQVNFX1VSTD0ke1VQU1RSRUFNX0JBU0VfVVJMOi1odHRwczovL250Znkuc2h9JwogICAgICAtICdOVEZZX0VOQUJMRV9TSUdOVVA9JHtOVEZZX0VOQUJMRV9TSUdOVVA6LXRydWV9JwogICAgICAtICdOVEZZX0VOQUJMRV9MT0dJTj0ke05URllfRU5BQkxFX0xPR0lOOi10cnVlfScKICAgICAgLSAnTlRGWV9DQUNIRV9EVVJBVElPTj0ke05URllfQ0FDSEVfRFVSQVRJT046LTI0aH0nCiAgICAgIC0gJ05URllfQVRUQUNITUVOVF9UT1RBTF9TSVpFX0xJTUlUPSR7TlRGWV9BVFRBQ0hNRU5UX1RPVEFMX1NJWkVfTElNSVQ6LTFHfScKICAgICAgLSAnTlRGWV9BVFRBQ0hNRU5UX0ZJTEVfU0laRV9MSU1JVD0ke05URllfQVRUQUNITUVOVF9GSUxFX1NJWkVfTElNSVQ6LTEwTX0nCiAgICAgIC0gJ05URllfQVRUQUNITUVOVF9FWFBJUllfRFVSQVRJT049JHtOVEZZX0FUVEFDSE1FTlRfRVhQSVJZX0RVUkFUSU9OOi0yNGh9JwogICAgICAtICdOVEZZX1NNVFBfU0VOREVSX0FERFI9JHtOVEZZX1NNVFBfU0VOREVSX0FERFI6LXNtdHAueW91ci1kb21haW4uZGV9JwogICAgICAtICdOVEZZX1NNVFBfU0VOREVSX1VTRVI9JHtOVEZZX1NNVFBfU0VOREVSX1VTRVI6LW5vLXJlcGx5QGRlfScKICAgICAgLSAnTlRGWV9TTVRQX1NFTkRFUl9QQVNTPSR7TlRGWV9TTVRQX1NFTkRFUl9QQVNTOi1wYXNzd29yZH0nCiAgICAgIC0gJ05URllfU01UUF9TRU5ERVJfRlJPTT0ke05URllfU01UUF9TRU5ERVJfRlJPTTotbm8tcmVwbHlAZGV9JwogICAgICAtICdOVEZZX0tFRVBBTElWRV9JTlRFUlZBTD0ke05URllfS0VFUEFMSVZFX0lOVEVSVkFMOi01bX0nCiAgICAgIC0gJ05URllfTUFOQUdFUl9JTlRFUlZBTD0ke05URllfTUFOQUdFUl9JTlRFUlZBTDotNW19JwogICAgICAtICdOVEZZX1ZJU0lUT1JfTUVTU0FHRV9EQUlMWV9MSU1JVD0ke05URllfVklTSVRPUl9NRVNTQUdFX0RBSUxZX0xJTUlUOi0xMDB9JwogICAgICAtICdOVEZZX1ZJU0lUT1JfQVRUQUNITUVOVF9EQUlMWV9CQU5EV0lEVEhfTElNSVQ9JHtOVEZZX1ZJU0lUT1JfQVRUQUNITUVOVF9EQUlMWV9CQU5EV0lEVEhfTElNSVQ6LTFHfScKICAgICAgLSAnTlRGWV9VUFNUUkVBTV9BQ0NFU1NfVE9LRU49JHtVUFNUUkVBTV9BQ0NFU1NfVE9LRU59JwogICAgICAtICdOVEZZX0FVVEhfREVGQVVMVF9BQ0NFU1M9JHtOVEZZX0FVVEhfREVGQVVMVF9BQ0NFU1M6LXJlYWQtd3JpdGV9JwogICAgICAtICdOVEZZX1dFQl9QVVNIX1BVQkxJQ19LRVk9JHtOVEZZX1dFQl9QVVNIX1BVQkxJQ19LRVl9JwogICAgICAtICdOVEZZX1dFQl9QVVNIX1BSSVZBVEVfS0VZPSR7TlRGWV9XRUJfUFVTSF9QUklWQVRFX0tFWX0nCiAgICAgIC0gJ05URllfV0VCX1BVU0hfRU1BSUxfQUREUkVTUz0ke05URllfV0VCX1BVU0hfRU1BSUxfQUREUkVTU30nCiAgICB2b2x1bWVzOgogICAgICAtICdudGZ5LWNhY2hlOi92YXIvY2FjaGUvbnRmeScKICAgICAgLSAnbnRmeS1kYjovdmFyL2xpYi9udGZ5LycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnd2dldCAtcSAtLXRyaWVzPTEgaHR0cDovL2xvY2FsaG9zdDo4MC92MS9oZWFsdGggLU8gLSB8IGdyZXAgLUVvICcnImhlYWx0aHkiXHMqOlxzKnRydWUnJyB8fCBleGl0IDEnCiAgICAgIGludGVydmFsOiA2MHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICAgICAgc3RhcnRfcGVyaW9kOiA0MHMK", "tags": [ "ntfy", "notification", @@ -2299,6 +2341,18 @@ "minversion": "0.0.0", "port": "80" }, + "observium": { + "documentation": "https://docs.observium.org/?utm_source=coolify.io", + "slogan": "Observium is a comprehensive network monitoring platform designed to deliver powerful monitoring capabilities, combined with an elegant and intuitive user interface.", + "compose": "c2VydmljZXM6CiAgb2JzZXJ2aXVtOgogICAgaW1hZ2U6ICdtYml4dGVjaC9vYnNlcnZpdW06bGF0ZXN0JwogICAgcGxhdGZvcm06IGxpbnV4L2FtZDY0CiAgICB2b2x1bWVzOgogICAgICAtICdvYnNlcnZpdW1fbG9nczovb3B0L29ic2Vydml1bS9sb2dzJwogICAgICAtICdvYnNlcnZpdW1fcnJkOi9vcHQvb2JzZXJ2aXVtL3JyZCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdTRVJWSUNFX0ZRRE5fT0JTRVJWSVVNPSR7U0VSVklDRV9GUUROX09CU0VSVklVTX0nCiAgICAgIC0gJ09CU0VSVklVTV9BRE1JTl9QQVNTPSR7U0VSVklDRV9QQVNTV09SRF9PQlNFUlZJVU1BRE1JTn0nCiAgICAgIC0gJ09CU0VSVklVTV9BRE1JTl9VU0VSPSR7U0VSVklDRV9VU0VSX09CU0VSVklVTUFETUlOfScKICAgICAgLSBPQlNFUlZJVU1fREJfSE9TVD1tYXJpYWRiCiAgICAgIC0gJ09CU0VSVklVTV9EQl9OQU1FPSR7T0JTRVJWSVVNX0RCX05BTUU6LW9ic2Vydml1bS1kYn0nCiAgICAgIC0gJ09CU0VSVklVTV9EQl9QQVNTPSR7U0VSVklDRV9QQVNTV09SRF9NQVJJQURCfScKICAgICAgLSAnT0JTRVJWSVVNX0RCX1VTRVI9JHtTRVJWSUNFX1VTRVJfTUFSSUFEQn0nCiAgICBkZXBlbmRzX29uOgogICAgICBtYXJpYWRiOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3QvJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgICAgIHN0YXJ0X3BlcmlvZDogNXMKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOmx0cycKICAgIHZvbHVtZXM6CiAgICAgIC0gJ29ic2Vydml1bV9tYXJpYWRiX2RhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTUFSSUFEQl9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NQVJJQURCUk9PVH0nCiAgICAgIC0gJ01BUklBREJfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NQVJJQURCfScKICAgICAgLSAnTUFSSUFEQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTUFSSUFEQn0nCiAgICAgIC0gJ01BUklBREJfREFUQUJBU0U9JHtNQVJJQURCX0RBVEFCQVNFOi1vYnNlcnZpdW0tZGJ9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGhlYWx0aGNoZWNrLnNoCiAgICAgICAgLSAnLS1jb25uZWN0JwogICAgICAgIC0gJy0taW5ub2RiX2luaXRpYWxpemVkJwogICAgICBzdGFydF9wZXJpb2Q6IDEwcwogICAgICBpbnRlcnZhbDogMTBzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDMK", + "tags": [ + "networking", + "monitoring" + ], + "logo": "svgs/observium.webp", + "minversion": "0.0.0", + "port": "80" + }, "odoo": { "documentation": "https://www.odoo.com/?utm_source=coolify.io", "slogan": "Odoo is a suite of open-source business apps that cover all your company needs.", @@ -2773,6 +2827,23 @@ "minversion": "0.0.0", "port": "3000" }, + "ryot": { + "documentation": "https://github.com/ignisda/ryot?utm_source=coolify.io", + "slogan": "Roll your own tracker! Ryot is a self-hosted platform for tracking various aspects of life such as media consumption, fitness activities, and more.", + "compose": "c2VydmljZXM6CiAgcnlvdDoKICAgIGltYWdlOiAnaWduaXNkYS9yeW90OnY4JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1JZT1RfODAwMAogICAgICAtICdEQVRBQkFTRV9VUkw9cG9zdGdyZXM6Ly8ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU306JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfUBwb3N0Z3Jlc3FsOjU0MzIvJHtQT1NUR1JFU19EQn0nCiAgICAgIC0gJ1NFUlZFUl9BRE1JTl9BQ0NFU1NfVE9LRU49JHtTRVJWSUNFX1BBU1NXT1JEXzY0X1JZT1R9JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQW1zdGVyZGFtfScKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2hlYWx0aCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3J5b3RfcG9zdGdyZXNxbF9kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotcnlvdC1kYn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9BbXN0ZXJkYW19JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "tags": [ + "rss", + "reader", + "self-hosted", + "automation", + "tracker", + "media", + "fitness" + ], + "logo": "svgs/ryot.svg", + "minversion": "0.0.0", + "port": "8000" + }, "searxng": { "documentation": "https://docs.searxng.org?utm_source=coolify.io", "slogan": "SearXNG is a free internet metasearch engine which aggregates results from more than 70 search services.", @@ -3188,6 +3259,22 @@ "minversion": "0.0.0", "port": "80" }, + "vert": { + "documentation": "https://github.com/VERT-sh/VERT?utm_source=coolify.io", + "slogan": "The next-generation file converter. Open source, fully local and free forever.", + "compose": "c2VydmljZXM6CiAgdmVydDoKICAgIGltYWdlOiAnZ2hjci5pby92ZXJ0LXNoL3ZlcnQ6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1ZFUlRfODAKICAgICAgLSAnUFVCX1ZFUlRfVVJMPSR7U0VSVklDRV9GUUROX1ZFUlRfODB9JwogICAgICAtICdQVUJfSE9TVE5BTUU9JHtTRVJWSUNFX1VSTF9WRVJUXzgwfScKICAgICAgLSBQVUJfUE9SVD04MAogICAgICAtIFBVQl9FTlY9cHJvZHVjdGlvbgo=", + "tags": [ + "converter", + "file", + "documents", + "files", + "ffmpeg", + "wasm" + ], + "logo": "svgs/vert.png", + "minversion": "0.0.0", + "port": "80" + }, "vikunja-with-postgresql": { "documentation": "https://vikunja.io?utm_source=coolify.io", "slogan": "The open-source, self-hostable to-do app. Organize everything, on all platforms.", @@ -3462,5 +3549,19 @@ "logo": "svgs/convertx.png", "minversion": "0.0.0", "port": "3000" + }, + "marimo": { + "documentation": "https://marimo.io/?utm_source=coolify.io", + "slogan": "An open-source reactive notebook for Python \u2014 reproducible, git-friendly, SQL built-in, executable as a script, and shareable as an app.", + "compose": "c2VydmljZXM6CiAgbWFyaW1vOgogICAgaW1hZ2U6ICdnaGNyLmlvL21hcmltby10ZWFtL21hcmltbzpsYXRlc3Qtc3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX01BUklNT184MDgwCiAgICAgIC0gVE9LRU5fUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfTUFSSU1PCiAgICB2b2x1bWVzOgogICAgICAtICdtYXJpbW86L2FwcCcKICAgIGNvbW1hbmQ6CiAgICAgIC0gbWFyaW1vCiAgICAgIC0gZWRpdAogICAgICAtICctLXRva2VuLXBhc3N3b3JkJwogICAgICAtICcke1NFUlZJQ0VfUEFTU1dPUkRfTUFSSU1PfScKICAgICAgLSAnLS1wb3J0JwogICAgICAtICc4MDgwJwogICAgICAtICctLWhvc3QnCiAgICAgIC0gMC4wLjAuMAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHV2eAogICAgICAgIC0gJy0td2l0aCcKICAgICAgICAtICdodHRweFtjbGldJwogICAgICAgIC0gaHR0cHgKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwODAvaGVhbHRoJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwo=", + "tags": [ + "notebook", + "python", + "data", + "analysis" + ], + "logo": "svgs/marimo.svg", + "minversion": "0.0.0", + "port": "8080" } } From ba51f7eb6fff491c9017153b396940d65ac42893 Mon Sep 17 00:00:00 2001 From: Manaf941 Date: Thu, 15 May 2025 19:02:56 +0200 Subject: [PATCH 019/229] feat(service): add CodiMD service (#4867) --- public/svgs/codimd.png | Bin 0 -> 4837 bytes templates/compose/codimd.yaml | 68 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 public/svgs/codimd.png create mode 100644 templates/compose/codimd.yaml diff --git a/public/svgs/codimd.png b/public/svgs/codimd.png new file mode 100644 index 0000000000000000000000000000000000000000..eebdcf78495b91997fe1b86eda124cb8abe6f8f0 GIT binary patch literal 4837 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 FzW|Y-AUFU3 literal 0 HcmV?d00001 diff --git a/templates/compose/codimd.yaml b/templates/compose/codimd.yaml new file mode 100644 index 000000000..3004fa4b6 --- /dev/null +++ b/templates/compose/codimd.yaml @@ -0,0 +1,68 @@ +# documentation: https://hackmd.io/c/codimd-documentation +# slogan: Realtime collaborative markdown notes on all platforms +# tags: markdown, md, editor, opensource, collaborative, realtime-collaboration, notes +# logo: svgs/codimd.png +# port: 3000 + +services: + codimd: + image: "nabo.codimd.dev/hackmdio/hackmd:latest" + environment: + # Port setup for Coolify/Traefik + - SERVICE_FQDN_CODIMD_3000 + - CMD_DOMAIN=$SERVICE_URL_CODIMD + - CMD_PROTOCOL_USESSL=true + # This forces the use of https in return urls (for oauth2 ? if used) + + # Session secret, autogenerated by coolify + - CMD_SESSION_SECRET=$SERVICE_PASSWORD_SESSIONSECRET + + # Force resources to be loaded without any external CDN (privacy, security, and isolation) + - CMD_USECDN=false + + # DB url + - "CMD_DB_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-codimd}" + + # GitHub Configuration + # - CMD_GITHUB_CLIENTID=$GITHUB_CLIENTID + # - CMD_GITHUB_CLIENTSECRET=$GITHUB_CLIENTSECRET + # If you're planning to use it, uncomment and provide GITHUB_CLIENTID and GITHUB_CLIENTSECRET environment variables + # I ran into some issues where nothing would happen after login, so you should test it first + + # Email Configuration + # https://hackmd.io/c/codimd-documentation/%2Fs%2Fcodimd-configuration#Authentication + # Warning: CodiMD does *not* verify emails + - CMD_EMAIL=true + - CMD_ALLOW_EMAIL_REGISTER=true + # You're forced to have CMD_ALLOW_EMAIL_REGISTER=true at least once for the first time you create an account + # However, can be safely disabled afterwards + # You can also use the manage_users script to create users: https://github.com/hackmdio/codimd/blob/master/bin/manage_users + # Example: docker exec -t codimd-fgcgkg8gsc8ocww004o0k8g8 node bin/manage_users --add user@example.com + depends_on: + postgresql: + condition: service_healthy + healthcheck: + test: + - CMD-SHELL + - "curl -f http://localhost:3000/ || exit 1" + interval: 5s + timeout: 20s + retries: 5 + volumes: + - "upload-data:/home/hackmd/app/public/uploads" + restart: always + postgresql: + image: "postgres:16-alpine" + volumes: + - "postgresql-data:/var/lib/postgresql/data" + environment: + - POSTGRES_USER=$SERVICE_USER_POSTGRES + - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES + - "POSTGRES_DB=${POSTGRES_DB:-codimd}" + healthcheck: + test: + - CMD-SHELL + - "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" + interval: 5s + timeout: 20s + retries: 10 From 4a2159cdaa8248a5328a874bfddf8e33d6b16758 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Thu, 15 May 2025 19:22:30 +0200 Subject: [PATCH 020/229] refactor(service): improve CodiMD - fix CSS styles not loading on http - make all ENVs configurable - remove comments - formatting and naming --- templates/compose/codimd.yaml | 56 +++++++++++------------------------ 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/templates/compose/codimd.yaml b/templates/compose/codimd.yaml index 3004fa4b6..c23b9a429 100644 --- a/templates/compose/codimd.yaml +++ b/templates/compose/codimd.yaml @@ -6,40 +6,18 @@ services: codimd: - image: "nabo.codimd.dev/hackmdio/hackmd:latest" + image: nabo.codimd.dev/hackmdio/hackmd:latest environment: - # Port setup for Coolify/Traefik - SERVICE_FQDN_CODIMD_3000 - - CMD_DOMAIN=$SERVICE_URL_CODIMD - - CMD_PROTOCOL_USESSL=true - # This forces the use of https in return urls (for oauth2 ? if used) - - # Session secret, autogenerated by coolify - - CMD_SESSION_SECRET=$SERVICE_PASSWORD_SESSIONSECRET - - # Force resources to be loaded without any external CDN (privacy, security, and isolation) - - CMD_USECDN=false - - # DB url - - "CMD_DB_URL=postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgresql:5432/${POSTGRES_DB:-codimd}" - - # GitHub Configuration - # - CMD_GITHUB_CLIENTID=$GITHUB_CLIENTID - # - CMD_GITHUB_CLIENTSECRET=$GITHUB_CLIENTSECRET - # If you're planning to use it, uncomment and provide GITHUB_CLIENTID and GITHUB_CLIENTSECRET environment variables - # I ran into some issues where nothing would happen after login, so you should test it first - - # Email Configuration - # https://hackmd.io/c/codimd-documentation/%2Fs%2Fcodimd-configuration#Authentication - # Warning: CodiMD does *not* verify emails - - CMD_EMAIL=true - - CMD_ALLOW_EMAIL_REGISTER=true - # You're forced to have CMD_ALLOW_EMAIL_REGISTER=true at least once for the first time you create an account - # However, can be safely disabled afterwards - # You can also use the manage_users script to create users: https://github.com/hackmdio/codimd/blob/master/bin/manage_users - # Example: docker exec -t codimd-fgcgkg8gsc8ocww004o0k8g8 node bin/manage_users --add user@example.com + - CMD_DOMAIN=${SERVICE_URL_CODIMD} + - CMD_PROTOCOL_USESSL=${CMD_PROTOCOL_USESSL:-false} + - CMD_SESSION_SECRET=${SERVICE_PASSWORD_SESSIONSECRET} + - CMD_USECDN=${CMD_USECDN:-false} + - CMD_DB_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-codimd-db} + - CMD_EMAIL=${CMD_EMAIL:-true} + - CMD_ALLOW_EMAIL_REGISTER=${CMD_ALLOW_EMAIL_REGISTER:-true} depends_on: - postgresql: + postgres: condition: service_healthy healthcheck: test: @@ -49,16 +27,16 @@ services: timeout: 20s retries: 5 volumes: - - "upload-data:/home/hackmd/app/public/uploads" - restart: always - postgresql: - image: "postgres:16-alpine" + - uploads_data:/home/hackmd/app/public/uploads + + postgres: + image: postgres:16-alpine volumes: - - "postgresql-data:/var/lib/postgresql/data" + - codimd_postgres_data:/var/lib/postgresql/data environment: - - POSTGRES_USER=$SERVICE_USER_POSTGRES - - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - - "POSTGRES_DB=${POSTGRES_DB:-codimd}" + - POSTGRES_USER=${SERVICE_USER_POSTGRES} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-codimd-db} healthcheck: test: - CMD-SHELL From e97cf2db3a988cdb8ae8bd6fee2912d93fa22e16 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Thu, 15 May 2025 22:21:34 +0200 Subject: [PATCH 021/229] feat(modal): add dispatchAction property to confirmation modal --- resources/views/components/modal-confirmation.blade.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/resources/views/components/modal-confirmation.blade.php b/resources/views/components/modal-confirmation.blade.php index 24282dd89..626d55329 100644 --- a/resources/views/components/modal-confirmation.blade.php +++ b/resources/views/components/modal-confirmation.blade.php @@ -6,6 +6,7 @@ 'buttonFullWidth' => false, 'customButton' => null, 'disabled' => false, + 'dispatchAction' => false, 'submitAction' => 'delete', 'content' => null, 'checkboxes' => [], @@ -42,6 +43,7 @@ confirmWithText: @js($confirmWithText && !$disableTwoStepConfirmation), confirmWithPassword: @js($confirmWithPassword && !$disableTwoStepConfirmation), submitAction: @js($submitAction), + dispatchAction: @js($dispatchAction), passwordError: '', selectedActions: @js(collect($checkboxes)->pluck('id')->filter(fn($id) => $this->$id)->values()->all()), dispatchEvent: @js($dispatchEvent), @@ -72,6 +74,10 @@ return Promise.resolve(this.passwordError); } } + if (this.dispatchAction) { + $wire.dispatch(this.submitAction); + return true; + } const methodName = this.submitAction.split('(')[0]; const paramsMatch = this.submitAction.match(/\((.*?)\)/); From 24d7429e4f403003c30ac7e82a8ecc2d02c7c4c1 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Thu, 15 May 2025 22:21:46 +0200 Subject: [PATCH 022/229] fix(ActivityMonitor): prevent multiple event dispatches during polling --- app/Livewire/ActivityMonitor.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/Livewire/ActivityMonitor.php b/app/Livewire/ActivityMonitor.php index 024f53c3d..3bb76cc1f 100644 --- a/app/Livewire/ActivityMonitor.php +++ b/app/Livewire/ActivityMonitor.php @@ -22,6 +22,8 @@ class ActivityMonitor extends Component protected $activity; + public static $eventDispatched = false; + protected $listeners = ['activityMonitor' => 'newMonitorActivity']; public function newMonitorActivity($activityId, $eventToDispatch = 'activityFinished') @@ -51,15 +53,19 @@ class ActivityMonitor extends Component $causer_id = data_get($this->activity, 'causer_id'); $user = User::find($causer_id); if ($user) { - foreach ($user->teams as $team) { - $teamId = $team->id; + $teamId = $user->currentTeam()->id; + if (! self::$eventDispatched) { $this->eventToDispatch::dispatch($teamId); + self::$eventDispatched = true; } } return; } - $this->dispatch($this->eventToDispatch); + if (! self::$eventDispatched) { + $this->dispatch($this->eventToDispatch); + self::$eventDispatched = true; + } } } } From e7536d3fb8ee45b7d9f69465b41c1d09065c9ef1 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Thu, 15 May 2025 22:21:54 +0200 Subject: [PATCH 023/229] feat(security): implement server patching functionality - Add CheckUpdates and UpdatePackage actions for managing server updates. - Create ServerPackageUpdated event for broadcasting update status. - Introduce Patches Livewire component for user interface to check and apply updates. - Update navigation and sidebar to include security patching options. --- app/Actions/Server/CheckUpdates.php | 227 ++++++++++++++++++ app/Actions/Server/UpdatePackage.php | 81 +++++++ app/Events/ServerPackageUpdated.php | 35 +++ app/Livewire/Server/Security/Patches.php | 92 +++++++ .../views/components/server/navbar.blade.php | 6 + .../server/sidebar-security.blade.php | 6 + .../server/security/patches.blade.php | 118 +++++++++ routes/web.php | 3 + 8 files changed, 568 insertions(+) create mode 100644 app/Actions/Server/CheckUpdates.php create mode 100644 app/Actions/Server/UpdatePackage.php create mode 100644 app/Events/ServerPackageUpdated.php create mode 100644 app/Livewire/Server/Security/Patches.php create mode 100644 resources/views/components/server/sidebar-security.blade.php create mode 100644 resources/views/livewire/server/security/patches.blade.php diff --git a/app/Actions/Server/CheckUpdates.php b/app/Actions/Server/CheckUpdates.php new file mode 100644 index 000000000..01a9a764d --- /dev/null +++ b/app/Actions/Server/CheckUpdates.php @@ -0,0 +1,227 @@ +serverStatus() === false) { + return [ + 'error' => 'Server is not reachable or not ready.', + ]; + } + + // Try first method - using instant_remote_process + $output = instant_remote_process(['cat /etc/os-release'], $server); + + // Parse os-release into an associative array + $osInfo = []; + foreach (explode("\n", $output) as $line) { + if (empty($line)) { + continue; + } + if (strpos($line, '=') === false) { + continue; + } + [$key, $value] = explode('=', $line, 2); + $osInfo[$key] = trim($value, '"'); + } + + // Get the main OS identifier + $osId = $osInfo['ID'] ?? ''; + // $osIdLike = $osInfo['ID_LIKE'] ?? ''; + // $versionId = $osInfo['VERSION_ID'] ?? ''; + + // Normalize OS types based on install.sh logic + switch ($osId) { + case 'manjaro': + case 'manjaro-arm': + case 'endeavouros': + $osType = 'arch'; + break; + case 'pop': + case 'linuxmint': + case 'zorin': + $osType = 'ubuntu'; + break; + case 'fedora-asahi-remix': + $osType = 'fedora'; + break; + default: + $osType = $osId; + } + + // Determine package manager based on OS type + $packageManager = match ($osType) { + 'arch' => 'pacman', + 'alpine' => 'apk', + 'ubuntu', 'debian', 'raspbian' => 'apt', + 'centos', 'fedora', 'rhel', 'ol', 'rocky', 'almalinux', 'amzn' => 'dnf', + 'sles', 'opensuse-leap', 'opensuse-tumbleweed' => 'zypper', + default => null + }; + + switch ($packageManager) { + case 'zypper': + $output = instant_remote_process(['LANG=C zypper -tx list-updates'], $server); + $out = $this->parseZypperOutput($output); + $out['osId'] = $osId; + $out['package_manager'] = $packageManager; + + return $out; + case 'dnf': + $output = instant_remote_process(['LANG=C dnf list -q --updates --refresh'], $server); + $out = $this->parseDnfOutput($output); + $out['osId'] = $osId; + $out['package_manager'] = $packageManager; + $rebootRequired = instant_remote_process(['LANG=C dnf needs-restarting -r'], $server); + $out['reboot_required'] = $rebootRequired === '0' ? true : false; + + return $out; + case 'apt': + instant_remote_process(['apt-get update -qq'], $server); + $output = instant_remote_process(['LANG=C apt list --upgradable 2>/dev/null'], $server); + + $out = $this->parseAptOutput($output); + $out['osId'] = $osId; + $out['package_manager'] = $packageManager; + $rebootRequired = instant_remote_process(['LANG=C test -f /var/run/reboot-required && echo "YES" || echo "NO"'], $server); + $out['reboot_required'] = $rebootRequired === 'YES' ? true : false; + + return $out; + default: + return [ + 'osId' => $osId, + 'error' => 'Unsupported package manager', + 'package_manager' => $packageManager, + ]; + } + } catch (\Throwable $e) { + ray('Error:', $e->getMessage()); + + return [ + 'osId' => $osId, + 'package_manager' => $packageManager, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + ]; + } + } + + private function parseZypperOutput(string $output): array + { + $updates = []; + + try { + $xml = simplexml_load_string($output); + if ($xml === false) { + return [ + 'total_updates' => 0, + 'updates' => [], + 'error' => 'Failed to parse XML output', + ]; + } + + // Navigate to the update-list node + $updateList = $xml->xpath('//update-list/update'); + + foreach ($updateList as $update) { + $updates[] = [ + 'package' => (string) $update['name'], + 'new_version' => (string) $update['edition'], + 'current_version' => (string) $update['edition-old'], + 'architecture' => (string) $update['arch'], + 'repository' => (string) $update->source['alias'], + 'summary' => (string) $update->summary, + 'description' => (string) $update->description, + ]; + } + + return [ + 'total_updates' => count($updates), + 'updates' => $updates, + ]; + } catch (\Throwable $e) { + return [ + 'total_updates' => 0, + 'updates' => [], + 'error' => 'Error parsing zypper output: '.$e->getMessage(), + ]; + } + } + + private function parseDnfOutput(string $output): array + { + $updates = []; + $lines = explode("\n", $output); + + foreach ($lines as $line) { + if (empty($line)) { + continue; + } + + // Split by multiple spaces/tabs and filter out empty elements + $parts = array_values(array_filter(preg_split('/\s+/', $line))); + + if (count($parts) >= 3) { + $package = $parts[0]; + $new_version = $parts[1]; + $repository = $parts[2]; + + // Extract architecture from package name (e.g., "cloud-init.noarch" -> "noarch") + $architecture = str_contains($package, '.') ? explode('.', $package)[1] : 'noarch'; + + $updates[] = [ + 'package' => $package, + 'new_version' => $new_version, + 'repository' => $repository, + 'architecture' => $architecture, + 'current_version' => 'unknown', // DNF doesn't show current version in check-update output + ]; + } + } + + return [ + 'total_updates' => count($updates), + 'updates' => $updates, + ]; + } + + private function parseAptOutput(string $output): array + { + $updates = []; + $lines = explode("\n", $output); + + foreach ($lines as $line) { + // Skip the "Listing... Done" line and empty lines + if (empty($line) || str_contains($line, 'Listing...')) { + continue; + } + + // Example line: package/stable 2.0-1 amd64 [upgradable from: 1.0-1] + if (preg_match('/^(.+?)\/(\S+)\s+(\S+)\s+(\S+)\s+\[upgradable from: (.+?)\]/', $line, $matches)) { + $updates[] = [ + 'package' => $matches[1], + 'repository' => $matches[2], + 'new_version' => $matches[3], + 'architecture' => $matches[4], + 'current_version' => $matches[5], + ]; + } + } + + return [ + 'total_updates' => count($updates), + 'updates' => $updates, + ]; + } +} diff --git a/app/Actions/Server/UpdatePackage.php b/app/Actions/Server/UpdatePackage.php new file mode 100644 index 000000000..85e495784 --- /dev/null +++ b/app/Actions/Server/UpdatePackage.php @@ -0,0 +1,81 @@ +serverStatus() === false) { + return [ + 'error' => 'Server is not reachable or not ready.', + ]; + } + switch ($packageManager) { + case 'zypper': + $commandAll = 'zypper update -y'; + $commandInstall = 'zypper install -y '.$package; + break; + case 'dnf': + $commandAll = 'dnf update -y'; + $commandInstall = 'dnf update -y '.$package; + break; + case 'apt': + $commandAll = 'apt update && apt upgrade -y'; + $commandInstall = 'apt install -y '.$package; + break; + default: + return [ + 'error' => 'OS not supported', + ]; + } + if ($all) { + return remote_process([$commandAll], $server); + } + + return remote_process([$commandInstall], $server); + } catch (\Exception $e) { + return [ + 'error' => $e->getMessage(), + ]; + } + } + + private function parseAptOutput(string $output): array + { + $updates = []; + $lines = explode("\n", $output); + + foreach ($lines as $line) { + // Skip the "Listing... Done" line and empty lines + if (empty($line) || str_contains($line, 'Listing...')) { + continue; + } + + // Example line: package/stable 2.0-1 amd64 [upgradable from: 1.0-1] + if (preg_match('/^(.+?)\/(\S+)\s+(\S+)\s+(\S+)\s+\[upgradable from: (.+?)\]/', $line, $matches)) { + $updates[] = [ + 'package' => $matches[1], + 'repository' => $matches[2], + 'new_version' => $matches[3], + 'architecture' => $matches[4], + 'current_version' => $matches[5], + ]; + } + } + + return [ + 'total_updates' => count($updates), + 'updates' => $updates, + ]; + } +} diff --git a/app/Events/ServerPackageUpdated.php b/app/Events/ServerPackageUpdated.php new file mode 100644 index 000000000..4bde14068 --- /dev/null +++ b/app/Events/ServerPackageUpdated.php @@ -0,0 +1,35 @@ +check() && auth()->user()->currentTeam()) { + $teamId = auth()->user()->currentTeam()->id; + } + $this->teamId = $teamId; + } + + public function broadcastOn(): array + { + if (is_null($this->teamId)) { + return []; + } + + return [ + new PrivateChannel("team.{$this->teamId}"), + ]; + } +} diff --git a/app/Livewire/Server/Security/Patches.php b/app/Livewire/Server/Security/Patches.php new file mode 100644 index 000000000..183055813 --- /dev/null +++ b/app/Livewire/Server/Security/Patches.php @@ -0,0 +1,92 @@ +user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServerPackageUpdated" => 'checkForUpdatesDispatch', + ]; + } + + public function mount() + { + if (! auth()->user()->isAdmin()) { + abort(403); + } + $this->parameters = get_route_parameters(); + $this->server = Server::ownedByCurrentTeam()->whereUuid($this->parameters['server_uuid'])->firstOrFail(); + } + + public function checkForUpdatesDispatch() + { + $this->totalUpdates = null; + $this->updates = null; + $this->error = null; + $this->osId = null; + $this->packageManager = null; + $this->dispatch('checkForUpdatesDispatch'); + } + + public function checkForUpdates() + { + $job = CheckUpdates::run($this->server); + if (isset($job['error'])) { + $this->error = data_get($job, 'error', 'Something went wrong.'); + } else { + $this->totalUpdates = data_get($job, 'total_updates', 0); + $this->updates = data_get($job, 'updates', []); + $this->osId = data_get($job, 'osId', null); + $this->packageManager = data_get($job, 'package_manager', null); + } + } + + public function updateAllPackages() + { + try { + $activity = UpdatePackage::run(server: $this->server, packageManager: $this->packageManager, osId: $this->osId, all: true); + $this->dispatch('activityMonitor', $activity->id, ServerPackageUpdated::class); + } catch (\Exception $e) { + $this->dispatch('error', message: $e->getMessage()); + } + } + + public function updatePackage($package) + { + try { + $activity = UpdatePackage::run(server: $this->server, packageManager: $this->packageManager, osId: $this->osId, package: $package); + $this->dispatch('activityMonitor', $activity->id, ServerPackageUpdated::class); + } catch (\Exception $e) { + $this->dispatch('error', message: $e->getMessage()); + } + } + + public function render() + { + return view('livewire.server.security.patches'); + } +} diff --git a/resources/views/components/server/navbar.blade.php b/resources/views/components/server/navbar.blade.php index fe0b02ce8..ff56a096d 100644 --- a/resources/views/components/server/navbar.blade.php +++ b/resources/views/components/server/navbar.blade.php @@ -45,6 +45,12 @@ ]) }}"> + + +
diff --git a/resources/views/components/server/sidebar-security.blade.php b/resources/views/components/server/sidebar-security.blade.php new file mode 100644 index 000000000..e89092179 --- /dev/null +++ b/resources/views/components/server/sidebar-security.blade.php @@ -0,0 +1,6 @@ + diff --git a/resources/views/livewire/server/security/patches.blade.php b/resources/views/livewire/server/security/patches.blade.php new file mode 100644 index 000000000..d2059f14c --- /dev/null +++ b/resources/views/livewire/server/security/patches.blade.php @@ -0,0 +1,118 @@ +
+ + {{ data_get_str($server, 'name')->limit(10) }} > Security | Coolify + + + + Updating Packages + + + + + +
+ +
+
+
+

Server Patching

+ Manually + Check +
+
Check if your server has updates available.
+
(only available for apt, dnf and zypper package managers atm, more coming + soon as well as more features...) +
+
+
+
+
+
+ Checking for updates. It may take a few minutes. +
+ @if ($error) +
{{ $error }}
+ @else + @if ($totalUpdates === 0) +
Your server is up to date.
+ @endif + @if (isset($updates) && count($updates) > 0) + + + + + + @if ($packageManager !== 'dnf') + + @endif + + + + + + @foreach ($updates as $update) + + + @if ($packageManager !== 'dnf') + + @endif + + + + @endforeach + +
PackageCurrent VersionNew VersionAction
+ @if (data_get_str($update, 'package')->contains('docker')) + + + + + + + + + @endif + {{ data_get($update, 'package') }} + {{ data_get($update, 'current_version') }}{{ data_get($update, 'new_version') }} + Update +
+ @endif + @endif +
+
+
+
+
+
+
+ @script + + @endscript +
diff --git a/routes/web.php b/routes/web.php index 3ddd77361..f1031e629 100644 --- a/routes/web.php +++ b/routes/web.php @@ -49,6 +49,7 @@ use App\Livewire\Server\Proxy\DynamicConfigurations as ProxyDynamicConfiguration use App\Livewire\Server\Proxy\Logs as ProxyLogs; use App\Livewire\Server\Proxy\Show as ProxyShow; use App\Livewire\Server\Resources as ResourcesShow; +use App\Livewire\Server\Security\Patches; use App\Livewire\Server\Show as ServerShow; use App\Livewire\Settings\Index as SettingsIndex; use App\Livewire\SettingsBackup; @@ -252,6 +253,8 @@ Route::middleware(['auth', 'verified'])->group(function () { Route::get('/proxy/logs', ProxyLogs::class)->name('server.proxy.logs'); Route::get('/terminal', ExecuteContainerCommand::class)->name('server.command'); Route::get('/docker-cleanup', DockerCleanup::class)->name('server.docker-cleanup'); + Route::get('/security', fn () => redirect(route('dashboard'))); + Route::get('/security/patches', Patches::class)->name('server.security.patches'); }); Route::get('/destinations', DestinationIndex::class)->name('destination.index'); Route::get('/destination/{destination_uuid}', DestinationShow::class)->name('destination.show'); From f64de364cb376f85aefd8f32be1fafad6436210b Mon Sep 17 00:00:00 2001 From: Narendra Patwardhan Date: Thu, 15 May 2025 22:22:18 +0200 Subject: [PATCH 024/229] fix(service): convex ENVs and update image versions (#5827) --- templates/compose/convex.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/compose/convex.yaml b/templates/compose/convex.yaml index 74d2db5bf..cdaf985bb 100644 --- a/templates/compose/convex.yaml +++ b/templates/compose/convex.yaml @@ -6,7 +6,7 @@ services: backend: - image: ghcr.io/get-convex/convex-backend:4499dd4fd7f2148687a7774599c613d052950f46 + image: ghcr.io/get-convex/convex-backend:5143fec81f146ca67495c12c6b7a15c5802c37e2 volumes: - data:/convex/data environment: @@ -15,8 +15,8 @@ services: - INSTANCE_SECRET=${SERVICE_HEX_32_SECRET} - CONVEX_RELEASE_VERSION_DEV=${CONVEX_RELEASE_VERSION_DEV:-} - ACTIONS_USER_TIMEOUT_SECS=${ACTIONS_USER_TIMEOUT_SECS:-} - - CONVEX_CLOUD_ORIGIN=${SERVICE_FQDN_CONVEX_6791} - - CONVEX_SITE_ORIGIN=${SERVICE_FQDN_CONVEX_6791}/http + - CONVEX_CLOUD_ORIGIN=${SERVICE_FQDN_CONVEX_3210} + - CONVEX_SITE_ORIGIN=${SERVICE_FQDN_CONVEX_3211} - DATABASE_URL=${DATABASE_URL:-} - DISABLE_BEACON=${DISABLE_BEACON:-} - REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-} @@ -27,7 +27,7 @@ services: start_period: 5s dashboard: - image: ghcr.io/get-convex/convex-dashboard:4499dd4fd7f2148687a7774599c613d052950f46 + image: ghcr.io/get-convex/convex-dashboard:5143fec81f146ca67495c12c6b7a15c5802c37e2 environment: - SERVICE_FQDN_CONVEX_6791 - NEXT_PUBLIC_DEPLOYMENT_URL=$SERVICE_FQDN_BACKEND_3210 From 9b1e328370e144a10f3a05f2bd2475bd882b9610 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Thu, 15 May 2025 22:24:10 +0200 Subject: [PATCH 025/229] chore(service): switch convex vars --- templates/compose/convex.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/convex.yaml b/templates/compose/convex.yaml index cdaf985bb..82139d7c5 100644 --- a/templates/compose/convex.yaml +++ b/templates/compose/convex.yaml @@ -15,8 +15,8 @@ services: - INSTANCE_SECRET=${SERVICE_HEX_32_SECRET} - CONVEX_RELEASE_VERSION_DEV=${CONVEX_RELEASE_VERSION_DEV:-} - ACTIONS_USER_TIMEOUT_SECS=${ACTIONS_USER_TIMEOUT_SECS:-} - - CONVEX_CLOUD_ORIGIN=${SERVICE_FQDN_CONVEX_3210} - - CONVEX_SITE_ORIGIN=${SERVICE_FQDN_CONVEX_3211} + - CONVEX_CLOUD_ORIGIN=${SERVICE_URL_CONVEX_3210} + - CONVEX_SITE_ORIGIN=${SERVICE_URL_CONVEX_3211} - DATABASE_URL=${DATABASE_URL:-} - DISABLE_BEACON=${DISABLE_BEACON:-} - REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-} From 574b193c835c2879b6e5a074b2efd281023b05c5 Mon Sep 17 00:00:00 2001 From: Dusan <55688658+dusanbre@users.noreply.github.com> Date: Thu, 15 May 2025 22:32:23 +0200 Subject: [PATCH 026/229] feat(service): add Typesense service (#5643) --- public/svgs/typesense.webp | Bin 0 -> 550 bytes templates/compose/typesense.yaml | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 public/svgs/typesense.webp create mode 100644 templates/compose/typesense.yaml diff --git a/public/svgs/typesense.webp b/public/svgs/typesense.webp new file mode 100644 index 0000000000000000000000000000000000000000..e1e3acd1feab1f8110f42c61dfdb4ba7a110b0fe GIT binary patch literal 550 zcmV+>0@?jiNk&E<0ssJ4MM6+kP&iBx0ssIn$G|ZVw-5%>wrPL=mRABv8+rdQPxvE< zWE-b}C>rSBLIW#-K;I7uR0u$VQy-W*0u#CJExRwkmL#igvzv1Sa)d49i~j##ZFG>T zynad?(f3 z5MAA&m-p$aPZI7NFyTsoMK?rPKL(y;vk>hh+7Kf-%!-vRB(q+yPNd~Utf?DGpQS?D zfwZa=Y!5Oi1>1#Ig@W%wR-v%&!zvW2@4`hWV75I>Dxju*ELs8hwO%F{uw?7Pq8ETU z^%x`rs>e(;U=2|=tf5&p43SB<5-GYZkx8K1t469m&Y||n5y&%=q(6EvX!`KAAJg=BJkWj0 o7V-6g{%`Jxw^~lmWv(~uE6;)d&vKOyIVDdy/dev/tcp/localhost/8108 && printf 'GET /health HTTP/1.1\\r\\nConnection: close\\r\\n\\r\\n' >&3 && head -n1 <&3 | grep '200' && exec 3>&-"] + retries: 5 + timeout: 7s From af60ffb7e0cfb36e7607427f7028f9c0a66b8a5c Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Thu, 15 May 2025 22:51:16 +0200 Subject: [PATCH 027/229] refactore(service): typsense - new logo - make all ENVs configurable - formatting and naming --- public/svgs/typesense.png | Bin 0 -> 29941 bytes public/svgs/typesense.webp | Bin 550 -> 0 bytes templates/compose/typesense.yaml | 17 +++++++++++------ 3 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 public/svgs/typesense.png delete mode 100644 public/svgs/typesense.webp diff --git a/public/svgs/typesense.png b/public/svgs/typesense.png new file mode 100644 index 0000000000000000000000000000000000000000..ba91aa2dabf2853062cd450db987f1ef4d6f2ed6 GIT binary patch literal 29941 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 GpZ^1O)qrOJ literal 0 HcmV?d00001 diff --git a/public/svgs/typesense.webp b/public/svgs/typesense.webp deleted file mode 100644 index e1e3acd1feab1f8110f42c61dfdb4ba7a110b0fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?jiNk&E<0ssJ4MM6+kP&iBx0ssIn$G|ZVw-5%>wrPL=mRABv8+rdQPxvE< zWE-b}C>rSBLIW#-K;I7uR0u$VQy-W*0u#CJExRwkmL#igvzv1Sa)d49i~j##ZFG>T zynad?(f3 z5MAA&m-p$aPZI7NFyTsoMK?rPKL(y;vk>hh+7Kf-%!-vRB(q+yPNd~Utf?DGpQS?D zfwZa=Y!5Oi1>1#Ig@W%wR-v%&!zvW2@4`hWV75I>Dxju*ELs8hwO%F{uw?7Pq8ETU z^%x`rs>e(;U=2|=tf5&p43SB<5-GYZkx8K1t469m&Y||n5y&%=q(6EvX!`KAAJg=BJkWj0 o7V-6g{%`Jxw^~lmWv(~uE6;)d&vKOyIVDdy/dev/tcp/localhost/8108 && printf 'GET /health HTTP/1.1\\r\\nConnection: close\\r\\n\\r\\n' >&3 && head -n1 <&3 | grep '200' && exec 3>&-"] + test: + [ + CMD, + bash, + -c, + "exec 3<>/dev/tcp/localhost/8108 && printf 'GET /health HTTP/1.1\\r\\nConnection: close\\r\\n\\r\\n' >&3 && head -n1 <&3 | grep '200' && exec 3>&-", + ] retries: 5 timeout: 7s From 237a5468fdeec7422d4bed38aaaf4d71aff4dcd8 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Thu, 15 May 2025 22:53:05 +0200 Subject: [PATCH 028/229] fix(service): paymenter - fix MariaDB setup - more modern version & remove legacy plugin - fix ENVs - formatting and naming improvements --- templates/compose/paymenter.yaml | 63 ++++++++++++++++---------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/templates/compose/paymenter.yaml b/templates/compose/paymenter.yaml index 132d64b1e..c05c93d7c 100644 --- a/templates/compose/paymenter.yaml +++ b/templates/compose/paymenter.yaml @@ -5,53 +5,52 @@ # port: 80 services: - database: - image: mariadb:10.11 - command: --default-authentication-plugin=mysql_native_password - volumes: - - "mysql:/var/lib/mysql" - healthcheck: - test: - ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized || exit 1"] - start_period: 10s - interval: 10s - timeout: 1s - retries: 3 - environment: - MYSQL_PASSWORD: ${SERVICE_PASSWORD_MYSQL} - MYSQL_ROOT_PASSWORD: ${SERVICE_PASSWORD_MYSQLROOT} - MYSQL_DATABASE: "paymenter" - MYSQL_USER: "paymenter" - cache: - image: redis:alpine - environment: - - 'REDIS_PASSWORD=${SERVICE_PASSWORD_64_REDIS}' - healthcheck: - test: ["CMD-SHELL", "redis-cli ping || exit 1"] - interval: 10s - timeout: 1s - retries: 3 paymenter: image: ghcr.io/paymenter/paymenter:latest volumes: - - "app_logs:/app/storage/logs" - - "app_public:/app/storage/public" + - app_logs:/app/storage/logs + - app_public:/app/storage/public healthcheck: test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] interval: 10s timeout: 1s retries: 3 environment: - SERVICE_FQDN_PAYMENTER: '${SERVICE_FQDN_PAYMENTER}' + SERVICE_FQDN_PAYMENTER: ${SERVICE_FQDN_PAYMENTER_80} + DB_DATABASE: ${MYSQL_DATABASE:-paymenter-db} DB_PASSWORD: ${SERVICE_PASSWORD_MYSQL} + DB_USERNAME: ${SERVICE_USER_MYSQL} APP_ENV: "production" CACHE_STORE: "redis" SESSION_DRIVER: "redis" QUEUE_CONNECTION: "redis" - REDIS_HOST: "cache" + REDIS_HOST: "redis" REDIS_USERNAME: default - REDIS_PASSWORD: '${SERVICE_PASSWORD_64_REDIS}' + REDIS_PASSWORD: "${SERVICE_PASSWORD_64_REDIS}" DB_CONNECTION: "mariadb" - DB_HOST: "database" + DB_HOST: "mariadb" DB_PORT: "3306" APP_KEY: ${SERVICE_BASE64_KEY} + + mariadb: + image: mariadb:11 + volumes: + - paymenter_mariadb_data:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT} + - MYSQL_DATABASE=${MYSQL_DATABASE:-paymenter-db} + - MYSQL_USER=${SERVICE_USER_MYSQL} + - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL} + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: redis:alpine + healthcheck: + test: ["CMD-SHELL", "redis-cli ping || exit 1"] + interval: 10s + timeout: 1s + retries: 3 From 0409e9184c1b2729633c8d0658000bf1debc5264 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Thu, 15 May 2025 22:53:15 +0200 Subject: [PATCH 029/229] Update service-templates.json --- templates/service-templates.json | 46 +++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/templates/service-templates.json b/templates/service-templates.json index c123d7a9a..6d1c85451 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -497,10 +497,27 @@ "minversion": "0.0.0", "port": "8443" }, + "codimd": { + "documentation": "https://hackmd.io/c/codimd-documentation?utm_source=coolify.io", + "slogan": "Realtime collaborative markdown notes on all platforms", + "compose": "c2VydmljZXM6CiAgY29kaW1kOgogICAgaW1hZ2U6ICduYWJvLmNvZGltZC5kZXYvaGFja21kaW8vaGFja21kOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9DT0RJTURfMzAwMAogICAgICAtICdDTURfRE9NQUlOPSR7U0VSVklDRV9VUkxfQ09ESU1EfScKICAgICAgLSAnQ01EX1BST1RPQ09MX1VTRVNTTD0ke0NNRF9QUk9UT0NPTF9VU0VTU0w6LWZhbHNlfScKICAgICAgLSAnQ01EX1NFU1NJT05fU0VDUkVUPSR7U0VSVklDRV9QQVNTV09SRF9TRVNTSU9OU0VDUkVUfScKICAgICAgLSAnQ01EX1VTRUNETj0ke0NNRF9VU0VDRE46LWZhbHNlfScKICAgICAgLSAnQ01EX0RCX1VSTD1wb3N0Z3JlczovLyR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfToke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9QHBvc3RncmVzOjU0MzIvJHtQT1NUR1JFU19EQjotY29kaW1kLWRifScKICAgICAgLSAnQ01EX0VNQUlMPSR7Q01EX0VNQUlMOi10cnVlfScKICAgICAgLSAnQ01EX0FMTE9XX0VNQUlMX1JFR0lTVEVSPSR7Q01EX0FMTE9XX0VNQUlMX1JFR0lTVEVSOi10cnVlfScKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ2N1cmwgLWYgaHR0cDovL2xvY2FsaG9zdDozMDAwLyB8fCBleGl0IDEnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogNQogICAgdm9sdW1lczoKICAgICAgLSAndXBsb2Fkc19kYXRhOi9ob21lL2hhY2ttZC9hcHAvcHVibGljL3VwbG9hZHMnCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2NvZGltZF9wb3N0Z3Jlc19kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotY29kaW1kLWRifScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", + "tags": [ + "markdown", + "md", + "editor", + "opensource", + "collaborative", + "realtime-collaboration", + "notes" + ], + "logo": "svgs/codimd.png", + "minversion": "0.0.0", + "port": "3000" + }, "convex": { "documentation": "https://docs.convex.dev/?utm_source=coolify.io", "slogan": "Convex is the open-source reactive database for app developers.", - "compose": "c2VydmljZXM6CiAgYmFja2VuZDoKICAgIGltYWdlOiAnZ2hjci5pby9nZXQtY29udmV4L2NvbnZleC1iYWNrZW5kOjQ0OTlkZDRmZDdmMjE0ODY4N2E3Nzc0NTk5YzYxM2QwNTI5NTBmNDYnCiAgICB2b2x1bWVzOgogICAgICAtICdkYXRhOi9jb252ZXgvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9CQUNLRU5EXzMyMTAKICAgICAgLSAnSU5TVEFOQ0VfTkFNRT0ke0lOU1RBTkNFX05BTUU6LXNlbGYtaG9zdGVkLWNvbnZleH0nCiAgICAgIC0gJ0lOU1RBTkNFX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzMyX1NFQ1JFVH0nCiAgICAgIC0gJ0NPTlZFWF9SRUxFQVNFX1ZFUlNJT05fREVWPSR7Q09OVkVYX1JFTEVBU0VfVkVSU0lPTl9ERVY6LX0nCiAgICAgIC0gJ0FDVElPTlNfVVNFUl9USU1FT1VUX1NFQ1M9JHtBQ1RJT05TX1VTRVJfVElNRU9VVF9TRUNTOi19JwogICAgICAtICdDT05WRVhfQ0xPVURfT1JJR0lOPSR7U0VSVklDRV9GUUROX0NPTlZFWF82NzkxfScKICAgICAgLSAnQ09OVkVYX1NJVEVfT1JJR0lOPSR7U0VSVklDRV9GUUROX0NPTlZFWF82NzkxfS9odHRwJwogICAgICAtICdEQVRBQkFTRV9VUkw9JHtEQVRBQkFTRV9VUkw6LX0nCiAgICAgIC0gJ0RJU0FCTEVfQkVBQ09OPSR7RElTQUJMRV9CRUFDT046LX0nCiAgICAgIC0gJ1JFREFDVF9MT0dTX1RPX0NMSUVOVD0ke1JFREFDVF9MT0dTX1RPX0NMSUVOVDotfScKICAgICAgLSAnQ09OVkVYX1NFTEZfSE9TVEVEX1VSTD0ke1NFUlZJQ0VfRlFETl9DT05WRVhfNjc5MX0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDogJ2N1cmwgLWYgaHR0cDovLzEyNy4wLjAuMTozMjEwL3ZlcnNpb24nCiAgICAgIGludGVydmFsOiA1cwogICAgICBzdGFydF9wZXJpb2Q6IDVzCiAgZGFzaGJvYXJkOgogICAgaW1hZ2U6ICdnaGNyLmlvL2dldC1jb252ZXgvY29udmV4LWRhc2hib2FyZDo0NDk5ZGQ0ZmQ3ZjIxNDg2ODdhNzc3NDU5OWM2MTNkMDUyOTUwZjQ2JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NPTlZFWF82NzkxCiAgICAgIC0gTkVYVF9QVUJMSUNfREVQTE9ZTUVOVF9VUkw9JFNFUlZJQ0VfRlFETl9CQUNLRU5EXzMyMTAKICAgIGRlcGVuZHNfb246CiAgICAgIGJhY2tlbmQ6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OiAnd2dldCAtcU8tIGh0dHA6Ly8xMjcuMC4wLjE6Njc5MS8nCiAgICAgIGludGVydmFsOiA1cwogICAgICBzdGFydF9wZXJpb2Q6IDVzCg==", + "compose": "c2VydmljZXM6CiAgYmFja2VuZDoKICAgIGltYWdlOiAnZ2hjci5pby9nZXQtY29udmV4L2NvbnZleC1iYWNrZW5kOjUxNDNmZWM4MWYxNDZjYTY3NDk1YzEyYzZiN2ExNWM1ODAyYzM3ZTInCiAgICB2b2x1bWVzOgogICAgICAtICdkYXRhOi9jb252ZXgvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9CQUNLRU5EXzMyMTAKICAgICAgLSAnSU5TVEFOQ0VfTkFNRT0ke0lOU1RBTkNFX05BTUU6LXNlbGYtaG9zdGVkLWNvbnZleH0nCiAgICAgIC0gJ0lOU1RBTkNFX1NFQ1JFVD0ke1NFUlZJQ0VfSEVYXzMyX1NFQ1JFVH0nCiAgICAgIC0gJ0NPTlZFWF9SRUxFQVNFX1ZFUlNJT05fREVWPSR7Q09OVkVYX1JFTEVBU0VfVkVSU0lPTl9ERVY6LX0nCiAgICAgIC0gJ0FDVElPTlNfVVNFUl9USU1FT1VUX1NFQ1M9JHtBQ1RJT05TX1VTRVJfVElNRU9VVF9TRUNTOi19JwogICAgICAtICdDT05WRVhfQ0xPVURfT1JJR0lOPSR7U0VSVklDRV9VUkxfQ09OVkVYXzMyMTB9JwogICAgICAtICdDT05WRVhfU0lURV9PUklHSU49JHtTRVJWSUNFX1VSTF9DT05WRVhfMzIxMX0nCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD0ke0RBVEFCQVNFX1VSTDotfScKICAgICAgLSAnRElTQUJMRV9CRUFDT049JHtESVNBQkxFX0JFQUNPTjotfScKICAgICAgLSAnUkVEQUNUX0xPR1NfVE9fQ0xJRU5UPSR7UkVEQUNUX0xPR1NfVE9fQ0xJRU5UOi19JwogICAgICAtICdDT05WRVhfU0VMRl9IT1NURURfVVJMPSR7U0VSVklDRV9GUUROX0NPTlZFWF82NzkxfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OiAnY3VybCAtZiBodHRwOi8vMTI3LjAuMC4xOjMyMTAvdmVyc2lvbicKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHN0YXJ0X3BlcmlvZDogNXMKICBkYXNoYm9hcmQ6CiAgICBpbWFnZTogJ2doY3IuaW8vZ2V0LWNvbnZleC9jb252ZXgtZGFzaGJvYXJkOjUxNDNmZWM4MWYxNDZjYTY3NDk1YzEyYzZiN2ExNWM1ODAyYzM3ZTInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fQ09OVkVYXzY3OTEKICAgICAgLSBORVhUX1BVQkxJQ19ERVBMT1lNRU5UX1VSTD0kU0VSVklDRV9GUUROX0JBQ0tFTkRfMzIxMAogICAgZGVwZW5kc19vbjoKICAgICAgYmFja2VuZDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6ICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo2NzkxLycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHN0YXJ0X3BlcmlvZDogNXMK", "tags": [ "database", "reactive", @@ -2515,6 +2532,19 @@ "minversion": "0.0.0", "port": "80" }, + "paymenter": { + "documentation": "https://paymenter.org/docs/guides/docker?utm_source=coolify.io", + "slogan": "Open-Source Billing, Built for Hosting", + "compose": "c2VydmljZXM6CiAgcGF5bWVudGVyOgogICAgaW1hZ2U6ICdnaGNyLmlvL3BheW1lbnRlci9wYXltZW50ZXI6bGF0ZXN0JwogICAgdm9sdW1lczoKICAgICAgLSAnYXBwX2xvZ3M6L2FwcC9zdG9yYWdlL2xvZ3MnCiAgICAgIC0gJ2FwcF9wdWJsaWM6L2FwcC9zdG9yYWdlL3B1YmxpYycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnY3VybCAtc2YgaHR0cDovL2xvY2FsaG9zdDo4MCB8fCBleGl0IDEnCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMXMKICAgICAgcmV0cmllczogMwogICAgZW52aXJvbm1lbnQ6CiAgICAgIFNFUlZJQ0VfRlFETl9QQVlNRU5URVI6ICcke1NFUlZJQ0VfRlFETl9QQVlNRU5URVJfODB9JwogICAgICBEQl9EQVRBQkFTRTogJyR7TVlTUUxfREFUQUJBU0U6LXBheW1lbnRlci1kYn0nCiAgICAgIERCX1BBU1NXT1JEOiAnJHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgREJfVVNFUk5BTUU6ICcke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIEFQUF9FTlY6IHByb2R1Y3Rpb24KICAgICAgQ0FDSEVfU1RPUkU6IHJlZGlzCiAgICAgIFNFU1NJT05fRFJJVkVSOiByZWRpcwogICAgICBRVUVVRV9DT05ORUNUSU9OOiByZWRpcwogICAgICBSRURJU19IT1NUOiByZWRpcwogICAgICBSRURJU19VU0VSTkFNRTogZGVmYXVsdAogICAgICBSRURJU19QQVNTV09SRDogJyR7U0VSVklDRV9QQVNTV09SRF82NF9SRURJU30nCiAgICAgIERCX0NPTk5FQ1RJT046IG1hcmlhZGIKICAgICAgREJfSE9TVDogbWFyaWFkYgogICAgICBEQl9QT1JUOiAnMzMwNicKICAgICAgQVBQX0tFWTogJyR7U0VSVklDRV9CQVNFNjRfS0VZfScKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjExJwogICAgdm9sdW1lczoKICAgICAgLSAncGF5bWVudGVyX21hcmlhZGJfZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1wYXltZW50ZXItZGJ9JwogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczphbHBpbmUnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3JlZGlzLWNsaSBwaW5nIHx8IGV4aXQgMScKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAxcwogICAgICByZXRyaWVzOiAzCg==", + "tags": [ + "automation", + "billing", + "open source" + ], + "logo": "svgs/paymenter.svg", + "minversion": "0.0.0", + "port": "80" + }, "penpot": { "documentation": "https://help.penpot.app/technical-guide/getting-started/#install-with-docker?utm_source=coolify.io", "slogan": "Penpot is the first Open Source design and prototyping platform for product teams.", @@ -3150,6 +3180,20 @@ "minversion": "0.0.0", "port": "3000" }, + "typesense": { + "documentation": "https://typesense.org/docs?utm_source=coolify.io", + "slogan": "Cutting-edge, in-memory search engine for mere mortals. Knowledge of rocket science optional.", + "compose": "c2VydmljZXM6CiAgdHlwZXNlbnNlOgogICAgaW1hZ2U6ICd0eXBlc2Vuc2UvdHlwZXNlbnNlOjI4LjAnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVFlQRVNFTlNFXzgxMDgKICAgICAgLSAnVFlQRVNFTlNFX0VOQUJMRV9DT1JTPSR7VFlQRVNFTlNFX0VOQUJMRV9DT1JTOi10cnVlfScKICAgICAgLSBUWVBFU0VOU0VfREFUQV9ESVI9L2RhdGEKICAgICAgLSAnVFlQRVNFTlNFX0FQSV9LRVk9JHtUWVBFU0VOU0VfQVBJX0tFWToteHl6fScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3R5cGVzZW5zZV9kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGJhc2gKICAgICAgICAtICctYycKICAgICAgICAtICdleGVjIDM8Pi9kZXYvdGNwL2xvY2FsaG9zdC84MTA4ICYmIHByaW50ZiAnJ0dFVCAvaGVhbHRoIEhUVFAvMS4xXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4nJyA+JjMgJiYgaGVhZCAtbjEgPCYzIHwgZ3JlcCAnJzIwMCcnICYmIGV4ZWMgMz4mLScKICAgICAgcmV0cmllczogNQogICAgICB0aW1lb3V0OiA3cwo=", + "tags": [ + "search", + "search-engine", + "search-api", + "elasticsearch-alternative" + ], + "logo": "svgs/typesense.png", + "minversion": "0.0.0", + "port": "8108" + }, "umami": { "documentation": "https://umami.is?utm_source=coolify.io", "slogan": "Umami is web analytics platform which provides insights into visitor behavior without compromising user privacy.", From 8d359cd53efa2e4fb66ae6e0dceeec744b99f799 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bayram=20Kaz=C4=B1k?= Date: Fri, 16 May 2025 09:50:18 +0300 Subject: [PATCH 030/229] fix(ApplicationDeploymentJob): ensure correct COOLIFY_FQDN/COOLIFY_URL values (#4719) --- app/Jobs/ApplicationDeploymentJob.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index bebec64cf..aab6a222d 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -1365,9 +1365,9 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue $fqdn = $this->preview->fqdn; } if (isset($fqdn)) { - $this->coolify_variables .= "COOLIFY_FQDN={$fqdn} "; - $url = str($fqdn)->replace('http://', '')->replace('https://', ''); - $this->coolify_variables .= "COOLIFY_URL={$url} "; + $this->coolify_variables .= "COOLIFY_URL={$fqdn} "; + $fqdn_without_protocol = str($fqdn)->replace('http://', '')->replace('https://', ''); + $this->coolify_variables .= "COOLIFY_FQDN={$fqdn_without_protocol} "; } if (isset($this->application->git_branch)) { $this->coolify_variables .= "COOLIFY_BRANCH={$this->application->git_branch} "; From 525072c733868f0cc88195e7accaf890056fb9e6 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 16 May 2025 12:41:34 +0200 Subject: [PATCH 031/229] Enhance server patching UI in patches.blade.php - Update layout to improve user experience with a more structured design. - Add experimental label and helper text for clarity on package manager support. - Change button text to "Check Now" for better action indication. - Introduce automatic server update messaging. --- .../livewire/server/security/patches.blade.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/resources/views/livewire/server/security/patches.blade.php b/resources/views/livewire/server/security/patches.blade.php index d2059f14c..7dc2748fc 100644 --- a/resources/views/livewire/server/security/patches.blade.php +++ b/resources/views/livewire/server/security/patches.blade.php @@ -14,15 +14,16 @@
-
+

Server Patching

- Manually - Check -
-
Check if your server has updates available.
-
(only available for apt, dnf and zypper package managers atm, more coming - soon as well as more features...) + (experimental) + + + Check Now
+
Update your servers automatically.
From a5a7f8ae55b131557a019a4d5d06cc656f545725 Mon Sep 17 00:00:00 2001 From: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com> Date: Mon, 19 May 2025 16:23:31 +0530 Subject: [PATCH 032/229] fix(service): Snapdrop no matching manifest error (#5849) --- templates/compose/snapdrop.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/snapdrop.yaml b/templates/compose/snapdrop.yaml index 336a75737..82ad5fecc 100644 --- a/templates/compose/snapdrop.yaml +++ b/templates/compose/snapdrop.yaml @@ -4,7 +4,7 @@ services: snapdrop: - image: lscr.io/linuxserver/snapdrop:latest + image: 'linuxserver/snapdrop:version-b8b78cc2' environment: - SERVICE_FQDN_SNAPDROP - PUID=1000 From f061147d43e93d500e28f81c1aee47ff27cc25b8 Mon Sep 17 00:00:00 2001 From: Datenschmutz <63157166+Datenschmutz@users.noreply.github.com> Date: Mon, 19 May 2025 13:00:22 +0200 Subject: [PATCH 033/229] chore(deps): update Authentik service to 2025.4.1 (#5830) --- templates/compose/authentik.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/compose/authentik.yaml b/templates/compose/authentik.yaml index 4947140b9..d6e2a9968 100644 --- a/templates/compose/authentik.yaml +++ b/templates/compose/authentik.yaml @@ -6,7 +6,7 @@ services: authentik-server: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.2.3} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.4.1} restart: unless-stopped command: server environment: @@ -35,7 +35,7 @@ services: redis: condition: service_healthy authentik-worker: - image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.2.3} + image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2025.4.1} restart: unless-stopped command: worker environment: From 42a7b13dbabc4464286bb3754cace7be26b85cda Mon Sep 17 00:00:00 2001 From: Almuzaini <62063512+YAlmuzaini@users.noreply.github.com> Date: Mon, 19 May 2025 14:02:50 +0300 Subject: [PATCH 034/229] fix(service): use the same volume between chatwoot and sidekiq (#5851) --- templates/compose/chatwoot.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/chatwoot.yaml b/templates/compose/chatwoot.yaml index b7eec88cc..900d3354b 100644 --- a/templates/compose/chatwoot.yaml +++ b/templates/compose/chatwoot.yaml @@ -80,7 +80,7 @@ services: - ACTIVE_STORAGE_SERVICE=${ACTIVE_STORAGE_SERVICE:-local} command: ['bundle', 'exec', 'sidekiq', '-C', 'config/sidekiq.yml'] volumes: - - sidekiq-data:/app/storage + - rails-data:/app/storage healthcheck: test: ["CMD-SHELL", "bundle exec rails runner 'puts Sidekiq.redis(&:info)' > /dev/null 2>&1"] interval: 30s From 38d9471de1404cc1cd88907e1bb12a9290bb6a1a Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:29:23 +0200 Subject: [PATCH 035/229] fix(api): validate docker_compose_raw input in ApplicationsController - Ensure docker_compose_raw is provided and base64 encoded before processing. - Return appropriate validation error messages for missing or incorrectly formatted input. --- .../Api/ApplicationsController.php | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 3e0627b21..7818c3df2 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -989,7 +989,34 @@ class ApplicationsController extends Controller $dockerComposeDomainsJson = collect(); if ($request->has('docker_compose_domains')) { - $yaml = Yaml::parse($application->docker_compose_raw); + if (! $request->has('docker_compose_raw')) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.', + ], + ], 422); + } + + if (! isBase64Encoded($request->docker_compose_raw)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + $yaml = Yaml::parse($dockerComposeRaw); $services = data_get($yaml, 'services'); $dockerComposeDomains = collect($request->docker_compose_domains); if ($dockerComposeDomains->count() > 0) { @@ -1918,7 +1945,34 @@ class ApplicationsController extends Controller $dockerComposeDomainsJson = collect(); if ($request->has('docker_compose_domains')) { - $yaml = Yaml::parse($application->docker_compose_raw); + if (! $request->has('docker_compose_raw')) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.', + ], + ], 422); + } + + if (! isBase64Encoded($request->docker_compose_raw)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + $yaml = Yaml::parse($dockerComposeRaw); $services = data_get($yaml, 'services'); $dockerComposeDomains = collect($request->docker_compose_domains); if ($dockerComposeDomains->count() > 0) { From cee9dfcf52d8af3b08ca1bc1bc92c4c59370f5f4 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:30:31 +0200 Subject: [PATCH 036/229] fix(api): enhance validation for docker_compose_raw in ApplicationsController - Add checks to ensure docker_compose_raw is provided and correctly base64 encoded. - Implement detailed error responses for validation failures to improve user feedback. --- .../Api/ApplicationsController.php | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 7818c3df2..59e2692ba 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -1122,7 +1122,34 @@ class ApplicationsController extends Controller $dockerComposeDomainsJson = collect(); if ($request->has('docker_compose_domains')) { - $yaml = Yaml::parse($application->docker_compose_raw); + if (! $request->has('docker_compose_raw')) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The base64 encoded docker_compose_raw is required.', + ], + ], 422); + } + + if (! isBase64Encoded($request->docker_compose_raw)) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + if (mb_detect_encoding($dockerComposeRaw, 'ASCII', true) === false) { + return response()->json([ + 'message' => 'Validation failed.', + 'errors' => [ + 'docker_compose_raw' => 'The docker_compose_raw should be base64 encoded.', + ], + ], 422); + } + $dockerComposeRaw = base64_decode($request->docker_compose_raw); + $yaml = Yaml::parse($dockerComposeRaw); $services = data_get($yaml, 'services'); $dockerComposeDomains = collect($request->docker_compose_domains); if ($dockerComposeDomains->count() > 0) { From befc8a014276fb87f1c0855d9e34753809a62ba2 Mon Sep 17 00:00:00 2001 From: CrazyTim71 <118295691+CrazyTim71@users.noreply.github.com> Date: Mon, 19 May 2025 13:39:08 +0200 Subject: [PATCH 037/229] feat(service): add Yamtrack service (#5845) --- public/svgs/yamtrack.svg | 28 ++++++++ .../compose/yamtrack-with-postgresql.yaml | 70 +++++++++++++++++++ templates/compose/yamtrack.yaml | 45 ++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 public/svgs/yamtrack.svg create mode 100644 templates/compose/yamtrack-with-postgresql.yaml create mode 100644 templates/compose/yamtrack.yaml diff --git a/public/svgs/yamtrack.svg b/public/svgs/yamtrack.svg new file mode 100644 index 000000000..8fd79ded2 --- /dev/null +++ b/public/svgs/yamtrack.svg @@ -0,0 +1,28 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/templates/compose/yamtrack-with-postgresql.yaml b/templates/compose/yamtrack-with-postgresql.yaml new file mode 100644 index 000000000..4dae2ae3d --- /dev/null +++ b/templates/compose/yamtrack-with-postgresql.yaml @@ -0,0 +1,70 @@ +# documentation: https://github.com/FuzzyGrim/Yamtrack/wiki +# slogan: Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books. +# tags: self-hosted, automation, tracker, media, movies, shows, anime, manga, games, books, comics +# logo: svgs/yamtrack.svg +# port: 8000 + +services: + yamtrack: + image: ghcr.io/fuzzygrim/yamtrack + depends_on: + - db + - redis + environment: + - SERVICE_FQDN_YAMTRACK_8000 + - TZ=${TZ:-Europe/Berlin} + - SECRET=$SERVICE_PASSWORD_SECRET + - REGISTRATION=${REGISTRATION_ENABLED:-true} + - URLS=$SERVICE_FQDN_YAMTRACK + - "REDIS_URL=redis://redis:6379" + + - DB_HOST=db + - DB_NAME=${POSTGRESQL_DATABASE:-yamtrack} + - DB_USER=${SERVICE_USER_POSTGRESQL} + - DB_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - DB_PORT=5432 + healthcheck: + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://127.0.0.1:8000/health/", + ] + interval: 5s + timeout: 20s + retries: 10 + + db: + image: postgres:16-alpine + container_name: yamtrack-db + environment: + - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} + - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-yamtrack} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: "redis:7-alpine" + volumes: + - "redis_data:/data" + healthcheck: + test: + - CMD + - redis-cli + - ping + interval: 5s + timeout: 20s + retries: 10 + +volumes: + redis_data: null + postgres_data: null diff --git a/templates/compose/yamtrack.yaml b/templates/compose/yamtrack.yaml new file mode 100644 index 000000000..f20a0575f --- /dev/null +++ b/templates/compose/yamtrack.yaml @@ -0,0 +1,45 @@ +# documentation: https://github.com/FuzzyGrim/Yamtrack/wiki +# slogan: Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books. +# tags: self-hosted, automation, tracker, media, movies, shows, anime, manga, games, books, comics +# logo: svgs/yamtrack.svg +# port: 8000 + +services: + yamtrack: + image: ghcr.io/fuzzygrim/yamtrack + depends_on: + redis: + condition: service_healthy + environment: + - SERVICE_FQDN_YAMTRACK_8000 + - TZ=${TZ:-Europe/Berlin} + - SECRET=$SERVICE_PASSWORD_SECRET + - REGISTRATION=${REGISTRATION_ENABLED:-true} + - URLS=$SERVICE_FQDN_YAMTRACK + - "REDIS_URL=redis://redis:6379" + volumes: + - "yamtrack_data:/yamtrack/db" + healthcheck: + test: + - CMD-SHELL + - "wget --no-verbose --tries=1 --spider http://127.0.0.1:8000/health/ || exit 1" + interval: 5s + timeout: 20s + retries: 10 + + redis: + image: "redis:7-alpine" + volumes: + - "redis_data:/data" + healthcheck: + test: + - CMD + - redis-cli + - ping + interval: 5s + timeout: 20s + retries: 10 + +volumes: + redis_data: null + yamtrack_data: null From bd3f987fefbef7657d2085dfafb0dcba01a40589 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:43:08 +0200 Subject: [PATCH 038/229] style(css): update padding utility for password input and add newline in app.css --- resources/css/app.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/css/app.css b/resources/css/app.css index 1150917e7..79e5f0c13 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -38,6 +38,7 @@ color utility to any element that depends on these defaults. */ @layer base { + *, ::after, ::before, @@ -161,9 +162,9 @@ section { * Utility classes */ .input[type="password"] { - padding-right: var(--padding-10); + @apply pr-[2.4rem]; } .lds-heart { animation: lds-heart 1.2s infinite cubic-bezier(0.215, 0.61, 0.355, 1); -} +} \ No newline at end of file From a5ba61945f582b836c8f4cee79faa3c76e086de3 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:43:22 +0200 Subject: [PATCH 039/229] fix(select): update PostgreSQL versions and titles in resource selection - Change default PostgreSQL version from 16 to 17. - Update Supabase PostgreSQL version to 17.4.1.032. - Modify PostGIS title to indicate AMD compatibility. - Update PGVector title to reflect version 17. --- .../views/livewire/project/new/select.blade.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index c27163000..b0f324d4d 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -277,12 +277,12 @@ @if ($current_step === 'select-postgresql-type')

Select a Postgresql type

If you need extra extensions, you can select Supabase PostgreSQL (or others), otherwise select PostgreSQL - 16 (default).
+ 17 (default).
+ wire:click="setPostgresqlType('postgres:17-alpine')">
-
PostgreSQL 16 (default)
+
PostgreSQL 17 (default)
PostgreSQL is a powerful, open-source object-relational database system (no extensions).
@@ -297,7 +297,7 @@
+ wire:click="setPostgresqlType('supabase/postgres:17.4.1.032')">
Supabase PostgreSQL (with extensions)
@@ -314,9 +314,9 @@
+ wire:click="setPostgresqlType('postgis/postgis:17-3.5-alpine')">
-
PostGIS
+
PostGIS (AMD only)
PostGIS is a PostgreSQL extension for geographic objects.
@@ -331,9 +331,9 @@
+ wire:click="setPostgresqlType('pgvector/pgvector:pg17')">
-
PGVector (16)
+
PGVector (17)
PGVector is a PostgreSQL extension for vector data types.
From daefe28fd818c8e0aaed97f6440342303f13649d Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 13:46:52 +0200 Subject: [PATCH 040/229] fix(database): include DatabaseStatusChanged event in activityMonitor dispatch --- app/Livewire/Project/Database/Heading.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Livewire/Project/Database/Heading.php b/app/Livewire/Project/Database/Heading.php index 9ddb1909c..2f304c5e6 100644 --- a/app/Livewire/Project/Database/Heading.php +++ b/app/Livewire/Project/Database/Heading.php @@ -6,6 +6,7 @@ use App\Actions\Database\RestartDatabase; use App\Actions\Database\StartDatabase; use App\Actions\Database\StopDatabase; use App\Actions\Docker\GetContainersStatus; +use App\Events\DatabaseStatusChanged; use Illuminate\Support\Facades\Auth; use Livewire\Component; @@ -69,13 +70,13 @@ class Heading extends Component public function restart() { $activity = RestartDatabase::run($this->database); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, DatabaseStatusChanged::class); } public function start() { $activity = StartDatabase::run($this->database); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, DatabaseStatusChanged::class); } public function render() From c7f1e9444230303016a08e1c6d48a20b90860fd4 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 13:51:31 +0200 Subject: [PATCH 041/229] refactore(services): improve yamtrack - make sure DBs are healty before starting yamtrack - formatting & naming improvements --- .../compose/yamtrack-with-postgresql.yaml | 34 ++++++++----------- templates/compose/yamtrack.yaml | 26 ++++++-------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/templates/compose/yamtrack-with-postgresql.yaml b/templates/compose/yamtrack-with-postgresql.yaml index 4dae2ae3d..470cabfbd 100644 --- a/templates/compose/yamtrack-with-postgresql.yaml +++ b/templates/compose/yamtrack-with-postgresql.yaml @@ -7,22 +7,23 @@ services: yamtrack: image: ghcr.io/fuzzygrim/yamtrack - depends_on: - - db - - redis environment: - SERVICE_FQDN_YAMTRACK_8000 + - URLS=${SERVICE_FQDN_YAMTRACK} - TZ=${TZ:-Europe/Berlin} - - SECRET=$SERVICE_PASSWORD_SECRET + - SECRET=${SERVICE_PASSWORD_SECRET} - REGISTRATION=${REGISTRATION_ENABLED:-true} - - URLS=$SERVICE_FQDN_YAMTRACK - - "REDIS_URL=redis://redis:6379" - - - DB_HOST=db - - DB_NAME=${POSTGRESQL_DATABASE:-yamtrack} + - REDIS_URL=redis://redis:6379 + - DB_HOST=postgres + - DB_NAME=${POSTGRESQL_DATABASE:-yamtrack-db} - DB_USER=${SERVICE_USER_POSTGRESQL} - DB_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} - DB_PORT=5432 + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy healthcheck: test: [ @@ -37,15 +38,14 @@ services: timeout: 20s retries: 10 - db: + postgres: image: postgres:16-alpine - container_name: yamtrack-db environment: - POSTGRES_USER=${SERVICE_USER_POSTGRESQL} - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL} - - POSTGRES_DB=${POSTGRESQL_DATABASE:-yamtrack} + - POSTGRES_DB=${POSTGRESQL_DATABASE:-yamtrack-db} volumes: - - postgres_data:/var/lib/postgresql/data + - yamtrack_postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s @@ -53,9 +53,9 @@ services: retries: 10 redis: - image: "redis:7-alpine" + image: redis:7-alpine volumes: - - "redis_data:/data" + - yamtrack_redis_data:/data healthcheck: test: - CMD @@ -64,7 +64,3 @@ services: interval: 5s timeout: 20s retries: 10 - -volumes: - redis_data: null - postgres_data: null diff --git a/templates/compose/yamtrack.yaml b/templates/compose/yamtrack.yaml index f20a0575f..7b626e737 100644 --- a/templates/compose/yamtrack.yaml +++ b/templates/compose/yamtrack.yaml @@ -7,18 +7,18 @@ services: yamtrack: image: ghcr.io/fuzzygrim/yamtrack + environment: + - SERVICE_FQDN_YAMTRACK_8000 + - URLS=${SERVICE_FQDN_YAMTRACK} + - TZ=${TZ:-Europe/Berlin} + - SECRET=${SERVICE_PASSWORD_SECRET} + - REGISTRATION=${REGISTRATION_ENABLED:-true} + - REDIS_URL=redis://redis:6379 + volumes: + - yamtrack_data:/yamtrack/db depends_on: redis: condition: service_healthy - environment: - - SERVICE_FQDN_YAMTRACK_8000 - - TZ=${TZ:-Europe/Berlin} - - SECRET=$SERVICE_PASSWORD_SECRET - - REGISTRATION=${REGISTRATION_ENABLED:-true} - - URLS=$SERVICE_FQDN_YAMTRACK - - "REDIS_URL=redis://redis:6379" - volumes: - - "yamtrack_data:/yamtrack/db" healthcheck: test: - CMD-SHELL @@ -28,9 +28,9 @@ services: retries: 10 redis: - image: "redis:7-alpine" + image: redis:7-alpine volumes: - - "redis_data:/data" + - yamtrack_redis_data:/data healthcheck: test: - CMD @@ -39,7 +39,3 @@ services: interval: 5s timeout: 20s retries: 10 - -volumes: - redis_data: null - yamtrack_data: null From fe69a70d19a4dec4d397bab2f7edc866e4738aa7 Mon Sep 17 00:00:00 2001 From: Eugene Scheepers <52255287+ejscheepers@users.noreply.github.com> Date: Mon, 19 May 2025 15:00:56 +0200 Subject: [PATCH 042/229] feat(service): add PG Back Web service (#5079) --- public/svgs/pgbackweb.png | Bin 0 -> 23304 bytes templates/compose/pgbackweb.yaml | 36 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 public/svgs/pgbackweb.png create mode 100644 templates/compose/pgbackweb.yaml diff --git a/public/svgs/pgbackweb.png b/public/svgs/pgbackweb.png new file mode 100644 index 0000000000000000000000000000000000000000..6c76c8075400408413050e590ef5f626b46bc340 GIT binary patch literal 23304 zcmV(vKL+M00027P)t-sM{rCE z95n|RG6)(p2^=^F88iwXItCas5FBGC&n5I3P1e8Yn*>EIRi8 z|33B6JowZr=g1f&I43tq^!xo0EIcXV#6SGjFYL@U@Xtx{&rAE*1vNh=+`kVVF(%Zz z7{am)%(PDF%oMh&>ht*oLP#`0PGZ{2MYOSO<<&5soMG|X4qIQCqpM3+U&_q`ItS^Y^wK~#9! z>{?xOtGE(ef5bLOLcjwOZ(Dhycmr(w|Nq%`&q&xgIeV+N?nzE1yGs1+5Y+Va^o;b! zAODRnG)~9k3&xpaj~kvJPpAKIAv7=N{b6^hjq%qru|K_YrLpEWy|)y=TVvzhIs3;KYasyj6l=Nq=}Ff#58>Y9a{-VO@+}s zkNk=pN~w^whv-9W)|TLFm{IDCq|2`pZ>K#32x$wtj5O^ue=%JHA{*|v z6TE5j|c-G9O*vtw-ne)z;q9t>Uhq2RtpvN244cCV%a>tVORq}}m5CCuUARw6f+uE#5)26&{IuLn=oZmfQT=1h^-o zT%xsP>I8QWKcUKLCqA7p*8AUQgQP^D5B`$`qWcLbGTb~}bDGK`T_$J>WlE+~imkZa zZJ#}dtyO;-y6XI(XB{mJG> zG$`Q$7>Z0AJbea4-VxB4)XI!6;guw(K*jZ*CCP}T44xnXj`Q2o+XWSN7JE3e-@&7^ z>HEN63N;J)(R$~``?{qpnU@C1gChlR2^T&Vi6(C-_jsATK$#CIR02hEH0p`wTAQJ0la^bBt+oWfihsbzkD)62hCut!UKCj2)WSAAkdKGt6*L# z%gmzot;ob8zC-6pecHDpf@@J(SMXkJ<(+L63m_Qe6?jEB>MTiTKvZRjJOK=!N~7b& zc)4^zTr|DV*vyOM_M#{yD9S>G=0S*OWllr<(OW7N<@+JXu!a-2#3y`jxiwvl>;{ww zfip;@I31OwT@Pw+-6+XwpQ+gUKBN-dYP}j5VsT6Fr5Kx}I5DI1tjgs>dfK<2{|uoV zXR*)&$0Y0VdUFt^+SVkJ);@R?N$N~(tJEK-i{+V~K952ol45avP=o*w&UwhzaGQ4u zj8s%`hDCDHMH?U59NV7_{Mt>pB>dy9Z70CwbBmvQ|EbBVSSl4yAUSmuiAz@r3klr$^ zjoWdH*j{fa;A$tSJ@=F9S|Y6Peey*jM}GflDg@e8T5m%oox86?B1f4jh;l2q3Pp*T zNisiWK=RUJD+6&~eDV59A>9i?3G;viK2A|JENvL;d25~R@)rrb>u&gf{Y zpXW~2owzFZ8D{Yy$&0?<$jZjp+!vObZ2oLD)*EG!m`Z7FSf_bpU^pk;N3nob`myo^ zKWr|^8y!l#+j@PJFaW72iYJIl@)j=!{EsQ%pw-sBeXOgvIZjg7i7hyOf)^rh*{ml( zh8nc0e=br{^_;jhBy@@~UMG~HiiI(czU$UXw0+aF+bvUb0Li+hYr=d3pN4@ANt$sC z@c>ValR~6#8C~NV`&dp94pmK9+U2#8AjI#7N7`Qc&pur%=uo&_**t7xF~sLM+fsTe z83+&C)mG+EZ+&``rm}UUtt<)f1IJ!0foeK8gH6O}h}l?XX)8*CraAQH(!$EN)`Yn2 zZuk)IQjN@qyT=n(etI7|x_KrtMYluYwzBtdfwi(nBOc)d=&9gCNR^Wkb31p2J;{P7-7Vf`X=pn zFk7T;JW5ShW48tD#_IPe%$dau0 zwhzi8U^K2#%CR!{FQU4_p+JIRT@i;ByhkpU6$~rAFGQM`LO?NWHvi zBvi-|0#aM*Re35|ctYZ~#V?|)Rv{>Eq!F8wCY(RYE?WOer6xYy>2be`4;*s$R9YOR z0K|*iE_Vnl>u{8owEw#PEL)7k)TJ&@&24*!eHw?I?C;a9YQ}V4ZkQL>Q8s}>mTE?T z1P40Mu@;*qWsufD+f{KRN+MBQ5=1EeKcV~y5E+JP`w%igtO$N zLw)%hY~CZa>wK*-S8W??r1$}!kx&8BRhX1&KV<#3AVQ$`Gy){JMxivl|DF53gooV+ zr2Uf-^^tW1_7o(@XitVHo=tK)OHGNf32CHqA?=;1d`jH1>!rIK{@Ie&algB~Y8m>- zc(T=mau|e30O?7LV(OO+D0Jo}t?A;ewXi8VwQ^Sb~4_H&-jJ8Ax~d=6>9 zfVN`%I0=siTq8tT-29PTvFEj36wi!yI0^HM)Bd>%z2XD?wAHw5OU?vJWO5Lp1cmNZ z@Oje=VXBaqY9H#uuV`ew9Ow(UW`;xRZX=F5h)=o_qxfVYw~kbsmIZE|uHrV`FYaKU zUp;(VuiFn%lU@H}?pm7?*S6pw$ScXt4p`ZwtO6<@rVxj5#0QT5|A*b~UOS2BoO^Dm zFmfX*&R8XO*0WcyE#vfL(e+8_U#Bvp*?pFU=HAi|oC{PLjZdZlf-RLMTT9aBUXamC zpB`aHk7E26Z~3H!O(!ivJ)_%)L%8h3b6MI@BB>z*QFcHv5{tz+(NMaDtIrCoyqkhm_oMqkBUh2wKu{E%Vtp|uwg6$yk(uAG8l~j4|)8Q zMWYM%HXBq$jp^(L2b1aE ziHAvxaKavBlvil!D@WJQ((UtXG3%5H9YwvMkGUWLdfs?||5vTX38v)U!kr1THO@;= zim<=^%P?j3hCZJxEEusc@|Pz>C=JE}2A6JaM%LESEgv*PEsKJi=pf5WLsOxl{-d*o zi`+NzP&AIAWKp|UxotCn$>g6irf27xHt|%RHj*wpH%begFGZH!Cm z%2RmSWr=#oxCgX@&!*vQ&}jvm4_h)5YB`u(=wrPv70g}KWd+X(Q9O&(vPIhEc!_>#$#zCp=6jG>#%kCwRZbS8S66I0%rK&~lQRPMjjYr?U_8Rn@ ztJK(f3x#>OS6dVznl|hsolFLv8*^1&h`&0_8jacXja+K+cqlm2uoq?$ z(Eb^eseNC%C@_K@Rp}O~S4C07v>8Ht=?X^9A!r|6U=PRQ&I*$@>}TSr8;CU5!{c!e z^on2t&_v|Nc?6dih``bq*k(=$&$A83ksUc0xBEdD;+TOWjyJH_nxm1jaY1ltduC@3pM3#mh3-41{5#sfc1$Li; zCThSDiPODJ8myLX`{>Q%mc*x|n5h*-XVdI{8*`8%N)l=H$vW3bJBo}Zq*87RE8_44 zzIIeFx9RLy;?IfrOo0YOWQ>u$)0=X+cX?$7{K%!iYPGnn~zOwYCD-8 z>cV;36g=jRUOKM*aCHZUw0%_HYDy~252c%Wb|LMEA%9L2LRcUx1;Yqw#zuSA&HLMw zCemgyn?6yXV>6Z`Dx*Qr^xGwY718sog^0IdB9-v$zR0o`AtbZ$S(jB&>o^IEioiR% zh$QXouj_8)*EX=CGM0}=%t3k;4alox%$_4jtyz_gqVXD@SPiuhC82lLC6u8m9p(M7 z-9#-C`JuNahn4oc6Ri>+HXS=|!#w8FL(v%#1NCX@ z=^@Xd8GL35e?Wqxh!c`DkK5axiV6CY7!dTjMaFep84s`~D5_#_A%Q&Sq_hkP;+Not7lA|Mhyh#Zd#1yT75gi;d|i(@=C3=tm*9RADo z{<#2Yqe}b!6+B58=@bB803N&%9Pio-)>gXk$+~F3Ne3{3nPdf*U2K$SoSk$Hh(qE& znCa1Y99Iop_HvgtDv;#whlsqNHMlI9VH~kxNKVQmsT0?pk-&&ub_g-4;rlIxkDA(#%W+wbsrmZk@L}M!Qlf?;Jer(bGJ=UsJT_eDOp_*?jR(j07|fm8ywqhD zR^MDOAc91Zn)Fx6yR7xHkFo)IzD7K1gl~4n-(YyMQ~t&h%!S0mL>??uFPcse&q#g% zq2LvW@?(0AOON|tr>nF!WOfrl(vvbNGheEVd7oFH_8k1tLk~w$x`R-ZJ#RD#H$@Bs z(QLZer$w;!yc{qcGeEeYUX2!%#^kJGH$j|TSLJkC7=F3V1)jj zr!KL36`{}w24qF(?VXKTB{xWpLMXAOve3RzN_f^cFF$|0-rnwZyW7_vKVM)-=p4$D z3P&`dDq}9rekusE83(U{b5)5OHr-MpTGt01w!=fM7^;s#h^AN=?TcT%x>?`+e%;;e z?wSkFcdsvNr0-If9XW&0?R#fEk#9(uJZmDn@TWywk8VbG5&Mw83P? zVL~@QZvoGW*VTM}g-?WOxBGd+#GL`7x+u!DX7u*H9-r+@r=H}MRbHUpF|F{l(^qb0 z_q9!eDAPNp9vb$wrj@Q6gns?p5uo|iH7>xT534)D^n1N7>$2v=g0|$n=t8{r&p~ls zCY2po7Bb3VH<7q&=0VTY;In%}a}ui0yuiVTy8Lm;QysNYRHQj9=m!8=uC9d5_3G*h zP|2PE(&}#a3PS=ot}ar9Zah={SJt^d!^v0UU~(84ibb zUAI+O?VV|;C3pOI_8pClTS6#9cbr+e4~WvYaIq^|&uX=#A?fiJrMuk^7*bu-qIuMt zrc89DxTP=)3 z;-MUHvrr_d>8U@adLQ(~2$-5bYffX7%K@R?az1ZetFfTQij?0Nrj~cNsF9HQ^PZKV<2*W9j(0^ZR_0oqC<+8o7b>n(`d>tCQI}s%S+dDHM(y-%?0F;Dnl}CWo-jPyNOv_PG!-kfv6?KMW2t{YJ za%sN$zWV`;>V&DkuEm@wXqPtQI8MLt&ej7NU(qzv;Y^EGWVM;jp2{pkZ!0}@diep@ zwPC+VZbhHOPIpkkzj?Vu!8m8OpSOOsGGki32}yJP`+P}^)>X}mnP22IeJz(_22Vcf zZ2IFG{KFdUHTqvOsSBU`5cfOOyiOMpBDxt5;ot#RE`R?}h0FX=ag@aK^5XF((w3&- z2FYxW-=7FA8<1A34yr4~YJ&*zh!}|@L8b8W@(WLa5*ek`7ow9sGVUDp^~W_B%_8@k zY7y1{YvdosZv#T^p-pDfD2d%S$KK^tcyGS%r>zM^l-62s<)H!`@rIk<--SP(rbBHMhM*MvtTiS(QtF+ix*7V`gp*v_4K`2>Wx+uGH& z<^YtCcn5w!X$ktUHwx0z%r*^#K`B_8QV$pNS67yR z*k5n+!B(dEk1vs-{@l1=FOu}Vo{#GQddYN$qn621Tk`OCzk z5P^6I^JGqK+4MX+vRzc)9J&$kbffRg|x5QX<6&8E}|QJ*_5KGWkbfREUql z2Go$892i9*Wsb8Agb?h_TU{MqeBcu!P5}F)RL|$etc0VyV1WX*(;qS6b~m5fcz>Il z8B-ovrq92kSkA=KPrk|DPwy<^oh&cm7#b1KdcUhF8MRh1nyrq`_Y@M5Q5Qf`BLofW zxGD*NDHNa_x8COjeq{R&Dw0<8eQWO#OAN5s1qk_WixAryxk$RrGgO%IHU%VSA9ERg zGjo&_6n(j_gvIV{`^T`O&vMZoa~LB6=t%gKzsMOuTBR$UuQz08No#1TgQWdvJ~5xG z9&j1ch?BdJ3re}RZ61Qf{I~xtMo-*xvKXQu;I6-bqot4QV1Rrq*b~bf#dX}jvg*qW zH9r4%{#@~MO5o0JnnRm-JR5FnKE4JG+SS{#EEdJ0+~x8_iwIIwGD69aBm$-TJhvGgu(r|j@=^>Lxlc4 z4(ZZ8JDz)k!=KL3J=9V$fCe4QZGmf1yp~722E(F5nJT5iZ#1ZHY>Kbmf6ID76h&1P zl3d(iL~&O@Dama5O+(&}AX*eLlDQvuyWM6}qcv5QL~>tt)r=wXy@(&N;JClLju5X0 zL|jc7K8_4ik~X;kA#5fJNY#LPzNSpREX=iFh%8yt11U;|x7|S^n6x@A0A;F+3z7js zkR@&dXlxXTunElnZmY};?@~k->F0ZjLW@FlpX@bv+4#t6Mxy&j{wi{?TR8rF?k!=& z)`ov8DWhSR{tZ#tovkh2+7xT;<@u3b0L6KP&kNCrAOex`K6&|W8#V&dNKa3BR9}(= zpAJv_IqTumRd4YYV19xa@=Y7`o@m5*hj!QHmMeN8O2XA;i0-%&gpr|t=IFNB@b&!s z2VEiU@d^Fe^oDrI=4pTOSUTp$Mv=V$BA`^12OZ$0kw)721`wIM?h(dt##mN^RreXb zNs37lUP?(91ry>yz0SP|9+NQmCh?#8k;C;klA;<2DJd)nL2kLasW0i4&No~aX5VNa;u*OSME9iAF*<(khuN`h^4IzE zXAqlGyuP7I^vKWT;`K(9Z4g4J+rJP*DXhIHwtF4%OCTN3OV*+e6$3{PqaKHn?i){( zD{H$;Auyu16eEp1z4ds}r}-ER1wZ>&HNybtQdnH7rURqa3m*$-=%Mm6VL2 z`Ok)QQ5qtQ9b?i=@3|mDk$M;kL}u^Lz)B}J0%3>v@-Dl(=O+F5F@Fm<`r|p7yBmav zel)De7ApgX(hRS_U_=mM4vl;=`8qN}V>*3+lEH6EwU(H)NR3UcH8UYXo#&ROtQP6o z#pBa=V3F%bI+vPN$faKck$-Xm>mGA?I0-|!$D7IRd58Bich1Z%`|GL4Q`|hI6TWOy zRt2?i>Y{UZte>ijaVJ3m&{NaunPHUOm<6X=KLk?F-G_`ZPK}e&+O0JZ=O#9apMkPUn z9hQ_o5=2$nCGdSA8nb99QYsl$-m+xabE~#HSNkq$aTHK&IJq=I7;(c=Q}EHgixoj6 zvxCDtcEYVKK=fhGn#tKeg6Qwc;pa!j?hQvtU}o}!K;qDT%R+=JGk^b*JlY!P4rEH0 zAMm!q;OFPml#cL%xr$lpJMMWXQ-Jtk| zJ-{s1yq&E%D*5Ai{t?*bS)|uV^!N^=#ON-v4wmYS{{e%TMK1yommP^kB@%tydl-%+ zXQ12zG9}HwEuYj$=N3HL=MniUZ$*Cnf|r?D5sq6$T$4$S-%qy(Kor@Sg&z!q#5TJ# z=TnMk!Xx_SPvl^W9{Kwl#(8Jh*CEwJgp5Td^yLy5YK7@?NrvW1B^@l<2t*05(xq<*2|wi4Mg}r8e6dzv7Ln~RA;Xdmj-gJ zxNzGKi_926hUmx!i(*7ak7sM^kr~8U*DXY8vC$GcM*aWm&J%!w_!FmKy2TpvzX8uU z@FT^p&;PX$@u){Z;>Q}K5;8Ugh<^TDlm~j>WZvA$4-64Xhkzpd7NVYdCj%817FA=2 z((1VK@szm;$=Ep^eT*=r6a`vC6=V&xpS+KMqpa`x9QHcyhh~65`B#r|S>#unaA;gXU%<*!{&#u*p@N{#n zAzgWXD7j4!rA|;}U_+}?LTFJQUCW$W@Zi!a>9s0jjxe_6B`WnKsfQeXI+rmjGmR`w zHv~sq9Yf9DI!B`k3=MVI79zZ6^10mIwfX~s_n4{U$no#Iznz^RdKZXp@c0vc8XE6d z%-8icWe=u|0Wm~bMhGolcf@0<)YwdLVi}36DML3rTDHGjq*QY;s#2Fd?hi){l^W$n z6v#~tijJ%^+jb|I<$@Q5}t~}_LWOFy|0_m z?SdRXy&ZUlD!nPE)wPLfcmxKbqRk>Tj)+p=*+N8Fys+qF-m@~4WU=8B2sw6qt&|pF zh+1lH3p>`FzPVU{L`=1wKa+4<{;(7}N_?qW+3HA? zRtI<0U5Cm{Nv0K%3zo)z-@}O%twf9@jN{7j%m0L3iDKHw5`5SjA3!jQKv-BKkOX2C z&fR1a;Qv4DbyfH1@Da-gj_qJns;)k!r==`HV?Ya{-jDzx%eV1RhSIlxW|-xGkI#1c z-_|#6Z^cA7Ws{ju<+~(}L^Twmf!2-ZQ*;(}BWz(!JKA=54%ea%Kv$8&GcS%+3!%JX zC;^O)JEZbttpL(Bg{^%|jF;z!tNdy9pyqFEQT0>JXqYDTN+Cpu;rWjxC5H5o{Bq zmkGMr^FhwehG5*8P51@7ZeWJ27pWGN<&-QEDc~OFo>yzkMFER`nM|9VJwAU2fzUht z+3MLBt_$JrJC(1M+o_m4gPlQ*5@AsxIXGJ|aGgk_By&{k(24@`y8;^DouWV>+@u{n z8DNV2@ziF~sV>!}2p?@Dn;_C_2Ss_r?IZ|`t~HBFvWOmkTn~P_e;O!@BtdINjRC43 zqSG_Zwf#(rdV`uo)m1#cQv>jQ2?WTYqLzwFE3T)UJs9M2eA*U5Ev!G(5P39UZA8bV ze4MoH%yUX>g@=|F2`P?N6HiH_01f{Eh86W14h^&`86=V@rSvYXWL-2ML|%(-aqCHV zwD0x&%tsw7^A8~!&c1(E2f53iltWKgzL!7c=+P$r930M19^@4iSy2d$^wq(yMPh1Y zk%33)V$p`cQ%3+YTDm%rXgPd_ToOn(7*!HEi6imTYE+CZsI|XZ_=MF zwdDZISTHt;$%Anew48nq^~Qmq@mu{_b2Ao5(eV51^X;$qGiuQi5Fy)18{IH70SjCz z=b8x`pwTE&h$6`(58G{4%$$IV2~X zn)Wk$<~}w8H2OLkb7M`8nxa^{d2^?^!)fU;FNZ3 z-1u`z_6{R@l}6Qt9^cuEPs7??ghk*{DRx$@cU5k?I53GyvRT0>%cf}0*VCVbD(`r2 z;S*|)Y^hpWR8#C69SiLalOcT6dXwZhE1=ph1 z;!WiD85e1k@K?aw^$0{io|_S@IB*va6YRTBk`Jse#!nIyopeR2F*IcXYzz=VuLYs? z>Hxn#)+{_4jw(P@6m#s?!wXg3=o+^Y5nn^L%Yg=bsv=ZY(;1h zi}rCU&q$m7wKF!NJ`H2oS!x*?r05(Eq3unr@_sP0u;}MwE4UUZVh)R-=rgr`K;PUD z5LM^hv110#-iZ*2G!=-1Mknm!;GU@fa&*2Hus|`k#lqN9`xr8))U_r#0ru^0_w#gO zUck~3J;5|Jr;% zd3;+B6^M2*rf1>ZFLn1oBKmyq%&c_%jO}B*X~g$Gs`ZWT;K7Ku>a-(^Tv{_oKPgg* z)^tr%+f}h|Qsu6o(fJC|7W}5H)gQ^6u=FZarn>tBiW29eYMWYA8PpD9tC%s^6 z&3Qx@8q_W5F~>UzMCUEUI`xa9n&)#H*U&q(2LObRfBTP}QLNA0U`N6J@~6%APbjfQ znB*e{a9u$w?P@AE_C@{ZU}%M4#B!JCk?6zeuq_lMLurBk?`=rVlMQZ>W#>X8M3$)q z@e|LZ+QzNo>9EGI#o}zN63pEULL%S;lilu*H9iO&tC(;?jqJQJ42@arZ(SLxS@aV^ z{e&A*|KWb&e?0_TT;=V&FwH_BN?Q`tJh=Lp3JBS{SV;hh_8yh&98vBW)+QL?DCUU; zM~NKMa*M$jG38?<+0}AaCO(9+q%AazQp<0>+n4Vy%B?t2@l-i8LjftKk)ir`Jk|wA zImG3U*qc^qFQ_(_}x!dT?vO{Fuq#W8)gS-$4R%eAMYNY6n_yD5+`rVr2uK;rhC5io5t?v=SN5h;GH%9`| z4iJS+TYAQ({uCP^fV@-ugj3^lbC%$1i(o(L6c8D!>L0=t0wG22_LQuMIdP3mPf~G3V zT@BBD-13B*H9s8Jc%SEtHiWyJ$|MjKt1|S4)|i$D$|ZP9T&6@>;Waag%ST2gyml;O z>{csE7LM!gf}MFwa)8-rK4L6G5D-MzrS88>p!m~KH2XZ8CsN# zO1FoKA(I4akzX_U!pbxY*L};;Z1v+m)MLK_qK{gbkZ1+W*s*>YqXZ0y8u=T}SFtG79kMh8_fny7g zK{VBrwZkG;dwp73GD*~u#P?sScwBG0SJ@uN&5i@R=tJ99N3yYcA!nDctV9@CJaI~) z+MgLzjo;9Y-7SM~WE|yU(Za_GM3Q_6Q8hsDc1DQw_|@;+CF9$_Om6|vyFUMRoac4f z#~?b1*3Pv)^x*+5a&Ep+j0#{hXhFmTO2nH_8l%}eW_Kn=J*ow;HxWvd@InA1XPTq# z>s5GU-(rrMYGX6<TqH7h#f?SL^^mC0ATfeWRkAuinsp_1iaqkUW3JyD!b&t*71f zPyrp~k_g!5A=$SIVCe( zeQr&9jZvK?5|5V)lQ2zm4M=0rGE83`$pYC8LTim2o5gBRqTpBeRw5EPe&x+7-b-Tt zdf+DT$ZF7I-JnDk6^rn-k#$HEfu75(r`QuxZ507wiB(c zvDdeWeYVA<2BKQ7Q4%PVE_W7TM~YBS(J9!HH#RGiw`9-&iGIJ|y2C;LZ`Nu#<>T!# zCMXoCp=r1pw;-ByQ;t^<>3cGLfu&`5->eQC-$cM|Fo8Xay9asA%5I z__@O(*VMVw(27?8Nb8UMAVbxa;L5UFST5olTV4MewQ zWd2;n>d{zNAVe==*tV;8O-)hC3?T^8;Zljtbagwb|G+4Ub>ibjLhoto*;3ckTYTvS z+H0}4E}v)>Calr%5A5h&s3vW(OAA_!(UEz3n|*J{mItt?mg{etq9MBG&4s!`Z2-Zc zMJ*b=Vo}(_D0$=enTEjHEN2yrHX8||m+G{1&vRWvji^B!i78gLUN_H}wt_CzKh4sZ zusNShv$zWtLiyfs@*6JFg(SIC_TvLGrdY7!l(BkdX=K}A~mym!**n9Eh(lMT3AD* z_SBK0r1>^6dOa?Ckk2xq8pnwN2n;H5MwOEvgr5y{o)iv`NDAs zQBvD;zF8Y4txJE71|WDwA#!n_J4*gW404RLz;BS2*T(~M%PO4@CSQ$` zDmtF~Q$78^f6#q2SV6bsxf1T1A2o>JoK^JBV~(S{&lD#OW!`w0;mYdiSd%EGnH`Dp z6bPcl{e6ShVWLN_EDE&@z~M0nl|Z7OOcA*cBhN7<0H>t!yt4SM zwUm=J>z$b5!Jk+yqrAX$6`+W(YL%m>AQ~Y=QDuV8P;&^Q7eJuS;I`kHDqX}O@)fgj z%NRfl54m4Ig;7VSk~BuuwMJE45O;n$@yan)2XBW?>hnR#snYC6@Z*G2g*>!v3Qp8( zq70uBt1V{~L;;=Fd-SG=O+L|Ff+P_)5eOjyXqC_uv>P~rOQz#qU7nx- zqh<=@Q3W4IE%nC=r;$!!1RRpaq+%a{0H+41CARYT{BO5{zh#Lz$LFogh0w1+`x;FF zEc#auh@vRAhZl%yW6dZ;J{wL!B1Aa1>T%>lgr(RJFuJLD9;+mVgzvO_YmUCvA+qMr z!hw`~Ql#46fbpeU08%%^Cdwf5h6{O zZJslw?O4QcTWDFdMv~P?YYWdBIaF{`<_n|p;SLb7qjF<(A`x0WKndgD z1_-5YBtj0tCU|MMv2#Fx{F6}AxT6K-7~FB zO4M;_!M>Rb));}T6b>Yf%)=VtQ2>?d!gAr>2=m|i4HZI1*p)(>h=P_|f>|I?N@ZCf zED9f~$OGZOf5d*0rat$u6p~NXgnwwOx4!nfPQHhA@c;3yL5%Hb(n%_woV;)_zZxsp;bfCeSq2 z&5Pi$b#vc?u3^y>+*k+FI$5k+lb)8L?eyhN+wG`<%(DQ{csxBdJ)>(_G<~0Wg7&B( zidsi{0Yq~LQF)(R9VF~m^IGIp-6Uw2Mx_cFG{`m5FM=b)c&7}+EqLiEUN-bano|0H ziUlC1%z^BGi%rbiUM1*9ooaVa`t%{1 zXl0$XwzW18g_=bR(4ku=Vt8H6Tw2uBlir<$@Bz}QNHh{sAVeW>B*i>iIuEh95hJWf zlzCiPn3M*VK|d&E5}j!&dV`xjC5gN#&l8C5gMIzf4pBnMSPK!tv4yMMlHlO2zPX4* znn&U}s_6E6rtOo73vZw~p)?S4HDCZc7s@yqoG-NY1aNTqUvB&JnN*Xx+ySXs1T8F6Y7QPxL)0w2&T1N%l#>Y|+h)6PGhQXk zkviQ7#RO(Q{CE)@uEssTwbdm;6wHkqTjo{?Rj~1{(eS25wmfIN6K*r(G-3)1-o^+T zv_e((O=vE=*P&G36i+q!3!~!QOQx;%aR@wY`X4ioL{KmbHIP~BoJ#1p#oXA^O2gK_ zEKetKoIG;nz8Y%;h%pqR9S9LN_En;${71%%+d+58vbtNULGz z=9*c(KZZ$2$E)8acV1RsIcei;oGOgES3$HE2++0yQ$;{TonciqZXT)-skR8Bgm$#f z>HhJ(9t~@}y4`+f46}tZJV?aq_>>2NWe-nbTiG?li@+CREE00tc3o!{F-VJ`(?!x_ zlyrA`5PioS_O7ygs5IR(9Y?d#8$_<5zxD7Uh~|t%Qd~xWQ(|NdME5Rk|2MBOI~_FH zSk4Keu=5QN4T6vgjJ#+FB(1+vC{hDI?Y7M>iXptO)%9kJ*Rr+tjBL;(lHEwoked8S zhqQD*XpG1`kw*(r@Es7{hGX3^#COu}Mz7GACxe9Spp`{b>qsn;l7H?^Omf#NIY*i~ zCoLM>ilnD&PfoEYpw_v;@EaiN2Z3&Y#XS(z*KhzGtm_ti-D!fz&_sXKvT6!iUtUP_ z6j?WdDnceD!^Z?kAk3;D3aF#!cR=(5$9#dPeNFsK+B=;jg2}lTv*^JCrnVbBD$085lA-`T1wUNd#$qY?RTaue&;4 zgo5_4HZ1Z8B0QZd{fOepSw63+FwMfrNAWpx)gPfs` zStJY5)hrq$0cseHQkuqTn#B!ql0k?hV$BRp7UVIbh|&1$coZ#YL9?Kp{bHN`3=Uj>VP!F#AwHu8 zyA+qTEZUshpGdhD1tC?9S6N+oDS&SqzJmd0m`hkCF+Yu4>b?*7nPktZg(jf=Opl5!r%4 zl-4?(w;0Vtq9~5yOyd)U1eIb^z_YX605?83D&q$p@7^;knjN2w8C4*9*i=4qQp|;6 zL!lnuT)y5I z6PQoIh-CNQ)f|= z31p>WQ$GCr+qmG+Dt(!CI4Cmmv#9XUF=is_ld{;q>~{8?^KwU3Klp?G9q+Tx+5O!s zkVMg_rwxnt)Lb}Ct_fZbl8ES&W{Q)edBiay7MUdL<&oJg zZBc4R`_R)(A3s0dvZ;m%WNlcD8JR}BOxPx`DcMZn=?Hemj9Xpq4pv}K(J2?yAKhyMRRZ1ZJSl}bL4ys;k;!x2NHu%5H>&X;7K zs_O0aeH*;(Xk2Ef{D^EbiY|74vzJ`b7YchMBWZ1jP8Eh=M2eLMs!dwD<|wp?aU+7; zwCu=TOA#b4tzeRoqMC=sfsF3=z{Fz?B7KV#O`KQ6?qK4Voq<(<;|!dQ_jpac6bb)K z5_^xbsR+K&_$!F`pzYj2bH}0$51Z$gB{%Se$n#(j(^g}uy9)b(uyMxz3ik3G+G*;e% znb#zV*esLk=%7K#SkB8v;`iGH@@Zb07PR*6^ z^V5Dz*f@r1nbYHb7j9BSzcNq6K0Tgj>NQh~@h3sVRU*7meIXhu7rJVFh#NjOi`qH| z(zaS?$I6S*ww>fhtw>H9fi&u?i(2PQoi4>CA#~8r8PKQgd4t0HM(^Ye1$vcav8g@`FLFRMJL-Ul588iDJfd}c z(0FQx#3k#D6wC@@!DGoXkA?)B3-tUAJqc9q+@iixG-`tSLtVF;8QwW2$xL=u)R;&b z7b|5pRYUwhenJJZSz&uBE{V~Ix330W1ikw3BUY;q!So=Q5@yb_J8Q8L;I-m|hWp-K zk)pLz*J;_)qK!=uqCIvAHqV>XTNj^Y=dX}gHM)hCenFZnOhHc{ibzP&UU&sVq_dV$ z0P^o9PB?uafv9Zl*tiN2s}~(0dcpwBj~~GVh!j1>7OigpGEzZ^csopEpOO!gxjgoH z8|=s@jqJ8+rHv{S)Uv|OJ4`Nk7!ITR`yI!zcX5!gj%*r}IeLgXlguTS<01*<4%*Yt zpE7b6K!05SUjL3D(mf%XmLW^TD_}jL{(`riIq}NQOB&OVxKA%B0;OofVv5xFM>moiA-Ff(u7r)Ze1c?6e$KB~kV;ap{{h}c&8^E;s zVAIqbv^S}P;P{zHbzX%Lh-9k=r08*d8ftn4>!e7YrVFB} zQ3Z>J_lutH{`u1hQOiuOe+fjoZ!%=69YmSg*PDb_FM8EWA*r+Zmx?~a0y!g1Qbd88 z2exL6>VvFufGDNYv+NyqSkeo`LE{R>T^wx&jf7Ff08v_YN>OSg+X{#{gZuEWKN+G} zQ9~6y!Xqu+`5p8VB0gw2+(t&o^L>(Ka>@ORSdUAe>$ZEYqeXh28)*=zW#>teS*dt& zoIoUG1e|o1XLwvktRT;UTc-Pogxv_F6Taca*VSvGe|ui|=0k!T{m__!p& zG}Rz*VDywylPk@$oNlvvdk{;Q#N{H#MypN@|HOjGnIs8(o6tp$vcVO_Vm^@P9ZQk9 zwi>XVt>C?{rOG9Y6;hS8E4aB50R8ynZ`&6l_(Vq3^=ln==CKc0?HzV1yIg-BlQxpw zsQS2(jf4TC`c<-zh-Qapf5s~;3nr=ZFa1|wZt%4X5Q2R!#VaaP(+!aUO|Ngtxy=6{ z)BMk$GOUP$*6ERsSMUoFNwYai8u~c#tR(@UuJ|Maw_w+TWj<-=ACWh*kifHOc52Bw zW4j(gh36ggh7dM1pZErTA~gSk%?+lfvk_>(d&v5bt;U^{~@CU7H1y}9?GUnh_wHKrJ&;*eUuV*V6A*{FDzqK;7BvkcYr!qHF zY$t7HL`n>kJeo}bqOhqwq0$0ry3VnZO?qdSaeWM5 z6>36d8X)RZdmkZ?Wfq3i5mjHjmY$BW$2l93Dlr*rBIxS4S!j_ovBy^dTPMR?`O?Cd& zMNhm^D{=?>Ro*8np|;Sb;n2w=u!Qjf)Xz*x(AhaNkWvzaXj@BeRS<&ZKV;m11&iL{ z)(+F6q+`aZqqk;5YVGpa7~U_?Vrx~qf|8OTp~|YSqQi$q*qQtGCJez=VZKB?cLc7; zTMxVLRuDp*D#{KUddC9?dcsYM(kGJZuJxu^Xsy^w%V5PB!my z{Aa#@w#9+H07(}7h&}R;*gI&`w#p_sDvfgFr%Y;S@)I6w=0sKH4IP{G&ZkTW?v81G zk%5*Aon6LkjBGHP&k%WRYUJnZO|$cTuQTTq>h3U)OKOs%-3FSzIN4Je2%u)i?T)X_-v@wIO+s;+0@>Kd^4@g+!oVkJ+g`j!nde*YM zyLEdayBmciqiR;|N`53c&^aq)L*dDZnE|9WM&)T?Y;@ZI0#5$0EKe(Jt5BAdCB0_Q zdD{UqL2#A`0Y00vV6w^Ov#t#^(|y#ysK`7^2B)!;w)KBS@)5y^J=+9284l=0uVj^- zn~JB0nA0^Fj5;TFuD)p_b3r)ifANh+eWvb5Q0KW|wBICEtYH%lJ*0Yep6j`CYLOKI z1zl!erR>-c&~EB#kCX@!BZa!qk3AjxYl@Hm(|lMcO7e|y-8K$Ger1{~Rz)a+wdU?H zGv$L*t^3)M8K#Dv%0BQqhn9nMfKB62u6vE+_qc}SwNZ$~GDHY%>LfDM^nm-Y>Lcqr zt>tz$V`$P8E=Lpc#V{bEaz={owC{Sb}Tx9E*Q=I4v-w%H+{ zh;}2G_Of_RVMIiIYm6qQEGTxx+Ch~ctGcSVL>+K= z^^n`1#xc$j9;8ANQh!tbXjX!lFkdRNXUdW>t35Xx_{A6k zBMwCT!Xgg(>*PJRLI;72|7iN{5E`MW2Zk&)^n<_|Al}OZiq+fD>p6;Zwx+tYZ znYpN6@88gflPvrPvLh9y)O}C3we#`!0%$rYmZU54yvWlGtsH#3{6XV4xq4j{b_t9~ z&Wiu#^$+cTsk@f#wvineJx!5Kw#bFMy`2?L??_S9|Nq%V70{IAnam@xC0%BmIEg2g zK%h`4puq}3Nx9}*y{LglMpzqcD#)!M@qhBbp%9G1a#qLHxEKxqjS=^r1P{;*^(jsdKegx=J( zyza>5jBM zdS6NG3l58cz=swSXl^{|56&pp@RjY6WtudVr zN*k{S*3h#pu_!Y*PK;Jueee`S+QBnCKw5}M6PmNIA_Eh)e>AfiNW93b13&7@DdG5Z1+f0F zd$WFSBaDl*W+lX$jU1QDgVW_(pT^p@X6dq;hpR|$lENJlJ$BFt5X;R}KE!g&@-QhQ zSPG_q#G+qSHSJe=_|pd0Gaj)B$>NBliF4pgMCVrwVay5=zG?xI=xw0@JXOf&%vpHfXm)$N54>-xsw@8IO1{05lZY zk4G3uK!{O;T#pZ_%B1SSHup`-X0UdJ?fxo z>j0AAW(6Yo{hqX6OMHExBomCTJ{-vI06wh^p`7j6V(b%Xu#hGx%)%GTfLm}LXZ;j# z$TBW{qq5AiBXSMN9?ENORHd+b`#!$C#YBT=t%Z^_$-5UA>N-pJW+PY#OH-1LR?9nS zlKXO@bX#b>%JbHBlG@N1nGOvCx4}Qka=M_KT??~C{!df@iuLzUfZawb`ij|1bH2C` z+hs!7`l}Q5&>F|44h?5wB|JwvxI_r3ZZ|>L<&zb*PC<^x& zbcuGJXtQhcbrH8)7jgrD(2COXn`3xSY;&j+@s%iG3NPyV%O9<9X;%@d-FK0;wetz* zAE=F_7H6?zX~VhY%>_@ofM(i0KcDHOknS(=rTuPGgbxqN1K3RAFvuGZ@F2y+&L|_Y zErzFL#a&IUB-%0%6B%RBfZqqx?@3rG( z3fm_?f<)3Wxdq*ONE>ORL<|-F>qBoA^Q@r;c>)l96GRAr?c8NTlY>=}Wik5D0qiIa z7%h_8A0>yYzIg~?=QYrR&1hkyDK~;|tfX14AJU=`C~7;ExW!J%i<$oY^KbUsw{<~! z$oLZTG!<1L4vGgcP#>cudN@&Byhxzw@-7x~0@HH0j_%t>S+<43HOdj-(h#p@ba|u8 zSaO?34kGD>dj4NNg&cNC{#$L{{?1bS?RLipFM0YR5`2L03R}}sE_{UZiBz%V>G?&< z=j)LBhq_2^X;Wj~v3i6~0~-lBY=JZ&(&*Guhrw1m^C7L@sL;d{hT2%*g<2mh0`oxU zPU=nwKFrjvHk1u@;YSZKDf%w1%smQ zg4PO!CukAIfJ5G>#XxLDD=@>C7CwYux_-o=@(KwLQmo(nc*wQiaOgPL;&~uJw344Z z=`(mkO=91cdq)`yT_?|kYrtY9OOIGi=ccZOE(%NVM-(cLRQV*aIbAcVyE4K6F4SkO?LNar4ZE&C zoyS_m0?$gOSC34%&(Hu53d zK+b)jRT^Lwjl`z#c%G-OTg<`$kENL?tHtt{;zFTyZ4*A22)%p80Mw3?d^&n8^_Xz& zIjW7y<*sHg(zE{RN+>j^ImaAXlXD8l_)vc6G{S=74{n5O>vS0=+QqD6c8NFNFMt1m zY?@V>W4-&F9`SzVDUGyR|4U&zo)oU{%##}?hygo^3JB@?c{ocQ*DB;Ah&58XK8oco+L@-Zk#gi^D5(7<`j6_oYI8TdWoX;=ED{|+4z%6OQoA0O7JjiuEpD(=RlVO-oQ%|{fah@{& zU>Rn^PR26Kd_w}0uB*DDjl3_OJgo9YUD22}h1+!QTmm29!7|PhrTylGhQar1aNycj zi-UKg9y_0UrE_<-DgP3a?(A}tq^@BZueMqKRtpX&E;zGDst{CJ6jQBsKVItEuDn+; z!sZocwc9vMWp}e}>L*F_ZjZ&(WVM@M zH`bWkEDxYXY^o&FO0(fz>2hbPs9+UUHL&9KbWV6KmDBlQR4E*;a>ee)t6pz~$I?0y zB*$ZqY|FNzSSj{Kt@YSnq-J4T@vaEesdt!(ll;Wh3H7zpg+M&tUF(Bap{7CbQN1wBB&s$a?1?uPc#2r&N?N9| zjD_076BU@xg%7zbD`C3xb*SP$8)=2beb|QJc-qUgZV@PPloZlNf30qf5alcvEyJ+@ z>Ea@vNpwkKC-k(fcGf7KKva?}|Ni0_^k)qqRPwq37ev(7sX(dC51>;TFT;RR-iEg{ zv{;#GR-<+3J#jjzw#4~&&}XNE)0NJK@WfQ{_J3s{W!wdZqXbCnygfn*Wt~rFDN>24 zsCz8eBv(I8r+J1rav4=js_QyyZT^4dUCWNcAPh`Gcu0^CE{%HI|NqKm#tuzeX)k*z zsii)Z(+Fem*kcJ{IZC1u+(t5X=+b7x1Z&cZ$x-6IKakR`oRX$Gx~Yk!twln5gC;F( zYpIY(sFxa0IGUM-L!%j*gzQ>>2V>oEIdgUzH{7Pg&A7iTXIkjsh)Pt{vd|ceU0_wW%$~*g zzhc0Tk8<7wivDGh{)=+JksL;R=F!?NEq}&+%{g2fp0=E3KaD{T$B~U;`c2T{UxXz$ zkZ?FO{)*1^Cr}nhg Date: Mon, 19 May 2025 15:03:27 +0200 Subject: [PATCH 043/229] chore(service): pgbackweb formatting and naming update --- templates/compose/pgbackweb.yaml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/templates/compose/pgbackweb.yaml b/templates/compose/pgbackweb.yaml index 67701814a..4c006a6ce 100644 --- a/templates/compose/pgbackweb.yaml +++ b/templates/compose/pgbackweb.yaml @@ -3,6 +3,7 @@ # tags: backup, postgresql, web-interface # logo: svgs/pgbackweb.svg # port: 8085 + services: pgbackweb: image: eduardolat/pgbackweb:latest @@ -11,26 +12,23 @@ services: environment: - SERVICE_FQDN_PGBACKWEB_8085 - PBW_ENCRYPTION_KEY=${SERVICE_PASSWORD_64_PGBACKWEB} - - PBW_POSTGRES_CONN_STRING=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/pgbackweb?sslmode=disable + - PBW_POSTGRES_CONN_STRING=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-pgbackweb-db}?sslmode=disable - TZ=${TIME_ZONE:-UTC} depends_on: postgres: condition: service_healthy exclude_from_hc: true + postgres: image: postgres:17 environment: - POSTGRES_USER=${SERVICE_USER_POSTGRES} - - POSTGRES_DB=pgbackweb - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - POSTGRES_DB=${POSTGRES_DB:-pgbackweb-db} volumes: - - postgres_data:/var/lib/postgresql/data + - pgbackweb_postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${SERVICE_USER_POSTGRES} -d pgbackweb"] interval: 5s timeout: 5s retries: 5 - -volumes: - postgres_data: - pgbackweb_backups: From ebe269324c151348bbd9bf1dad5cd063d8734727 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 15:29:48 +0200 Subject: [PATCH 044/229] style(css): refine badge utility styles in utilities.css --- resources/css/utilities.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 44d9c60df..7a149a95b 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -70,11 +70,11 @@ } @utility badge { - @apply inline-block w-3 h-3 text-xs font-bold leading-none rounded-full border border-neutral-200 dark:border-black; + @apply inline-block w-3 h-3 text-xs font-bold leading-none border border-neutral-200 dark:border-black; } @utility badge-absolute { - @apply absolute top-0 right-0 w-2 h-2 rounded-t-none rounded-r-none border-none; + @apply absolute top-0 right-0 w-2 h-2 rounded-bl-full; } @utility badge-success { From 61e45fbf3d7ffcdecd34471dfff0df29181a8d2e Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 15:31:35 +0200 Subject: [PATCH 045/229] style(css): enhance badge utility styles in utilities.css --- resources/css/utilities.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 7a149a95b..8504ed3d9 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -70,11 +70,11 @@ } @utility badge { - @apply inline-block w-3 h-3 text-xs font-bold leading-none border border-neutral-200 dark:border-black; + @apply inline-block w-3 h-3 text-xs font-bold rounded-full leading-none border border-neutral-200 dark:border-black; } -@utility badge-absolute { - @apply absolute top-0 right-0 w-2 h-2 rounded-bl-full; +@utility badge-dashboard { + @apply absolute top-0 right-0 w-2.5 h-2.5 rounded-bl-full text-xs font-bold leading-none border border-neutral-200 dark:border-black; } @utility badge-success { From 786bfa960f656ff8308ebe74acb3eadc142ceeff Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 19 May 2025 21:50:32 +0200 Subject: [PATCH 046/229] improvement(core): simplify events for app/db/service status changes --- app/Actions/Application/StopApplication.php | 4 ++ app/Actions/Database/StopDatabase.php | 36 ++++++---- app/Actions/Docker/GetContainersStatus.php | 2 + app/Actions/Service/StartService.php | 2 +- app/Actions/Service/StopService.php | 3 + app/Events/ServiceChecked.php | 35 ++++++++++ app/Events/ServiceStatusChanged.php | 17 +++-- app/Jobs/ApplicationDeploymentJob.php | 4 +- .../Project/Application/Configuration.php | 10 ++- .../Project/Application/Deployment/Index.php | 9 +++ .../Project/Application/Deployment/Show.php | 10 ++- app/Livewire/Project/Application/Heading.php | 20 ++---- .../Project/Database/Configuration.php | 10 +++ app/Livewire/Project/Database/Heading.php | 57 ++++++++-------- .../Project/Service/Configuration.php | 14 +--- app/Livewire/Project/Service/EditDomain.php | 1 - .../Service/{Navbar.php => Heading.php} | 66 ++++++++++--------- app/Livewire/Project/Shared/Destination.php | 3 - .../Shared/ExecuteContainerCommand.php | 9 +++ app/Livewire/Project/Shared/Logs.php | 9 +++ .../Project/Shared/ScheduledTask/Show.php | 9 +++ .../components/modal-confirmation.blade.php | 1 - .../views/components/status/index.blade.php | 3 +- .../components/status/services.blade.php | 3 +- .../project/application/heading.blade.php | 5 +- .../project/database/heading.blade.php | 6 +- .../livewire/project/resource/index.blade.php | 24 +++---- .../project/service/configuration.blade.php | 4 +- .../{navbar.blade.php => heading.blade.php} | 11 ++-- .../livewire/project/service/index.blade.php | 2 +- .../execute-container-command.blade.php | 13 ++-- .../shared/scheduled-task/show.blade.php | 2 +- 32 files changed, 251 insertions(+), 153 deletions(-) create mode 100644 app/Events/ServiceChecked.php rename app/Livewire/Project/Service/{Navbar.php => Heading.php} (65%) rename resources/views/livewire/project/service/{navbar.blade.php => heading.blade.php} (97%) diff --git a/app/Actions/Application/StopApplication.php b/app/Actions/Application/StopApplication.php index f5f16f3fe..01c258b65 100644 --- a/app/Actions/Application/StopApplication.php +++ b/app/Actions/Application/StopApplication.php @@ -3,6 +3,7 @@ namespace App\Actions\Application; use App\Actions\Server\CleanupDocker; +use App\Events\ServiceStatusChanged; use App\Models\Application; use Lorisleiva\Actions\Concerns\AsAction; @@ -14,6 +15,7 @@ class StopApplication public function handle(Application $application, bool $previewDeployments = false, bool $dockerCleanup = true) { + ray('StopApplication'); try { $server = $application->destination->server; if (! $server->isFunctional()) { @@ -38,6 +40,8 @@ class StopApplication } } catch (\Exception $e) { return $e->getMessage(); + } finally { + ServiceStatusChanged::dispatch($application->environment->project->team->id); } } } diff --git a/app/Actions/Database/StopDatabase.php b/app/Actions/Database/StopDatabase.php index 161e7dad7..5c0cadd55 100644 --- a/app/Actions/Database/StopDatabase.php +++ b/app/Actions/Database/StopDatabase.php @@ -3,6 +3,7 @@ namespace App\Actions\Database; use App\Actions\Server\CleanupDocker; +use App\Events\ServiceStatusChanged; use App\Models\StandaloneClickhouse; use App\Models\StandaloneDragonfly; use App\Models\StandaloneKeydb; @@ -19,23 +20,30 @@ class StopDatabase public function handle(StandaloneRedis|StandalonePostgresql|StandaloneMongodb|StandaloneMysql|StandaloneMariadb|StandaloneKeydb|StandaloneDragonfly|StandaloneClickhouse $database, bool $isDeleteOperation = false, bool $dockerCleanup = true) { - $server = $database->destination->server; - if (! $server->isFunctional()) { - return 'Server is not functional'; - } - - $this->stopContainer($database, $database->uuid, 30); - if ($isDeleteOperation) { - if ($dockerCleanup) { - CleanupDocker::dispatch($server, true); + try { + $server = $database->destination->server; + if (! $server->isFunctional()) { + return 'Server is not functional'; } + + $this->stopContainer($database, $database->uuid, 30); + if ($isDeleteOperation) { + if ($dockerCleanup) { + CleanupDocker::dispatch($server, true); + } + } + + if ($database->is_public) { + StopDatabaseProxy::run($database); + } + + return 'Database stopped successfully'; + } catch (\Exception $e) { + return 'Database stop failed: '.$e->getMessage(); + } finally { + ServiceStatusChanged::dispatch($database->environment->project->team->id); } - if ($database->is_public) { - StopDatabaseProxy::run($database); - } - - return 'Database stopped successfully'; } private function stopContainer($database, string $containerName, int $timeout = 30): void diff --git a/app/Actions/Docker/GetContainersStatus.php b/app/Actions/Docker/GetContainersStatus.php index 091268043..d7275ca90 100644 --- a/app/Actions/Docker/GetContainersStatus.php +++ b/app/Actions/Docker/GetContainersStatus.php @@ -4,6 +4,7 @@ namespace App\Actions\Docker; use App\Actions\Database\StartDatabaseProxy; use App\Actions\Shared\ComplexStatusCheck; +use App\Events\ServiceChecked; use App\Models\ApplicationPreview; use App\Models\Server; use App\Models\ServiceDatabase; @@ -341,5 +342,6 @@ class GetContainersStatus } // $this->server->team?->notify(new ContainerStopped($containerName, $this->server, $url)); } + ServiceChecked::dispatch($this->server->team->id); } } diff --git a/app/Actions/Service/StartService.php b/app/Actions/Service/StartService.php index d48594e62..1e7779a75 100644 --- a/app/Actions/Service/StartService.php +++ b/app/Actions/Service/StartService.php @@ -41,6 +41,6 @@ class StartService } } - return remote_process($commands, $service->server, type_uuid: $service->uuid, callEventOnFinish: 'ServiceStatusChanged'); + return remote_process($commands, $service->server, type_uuid: $service->uuid); } } diff --git a/app/Actions/Service/StopService.php b/app/Actions/Service/StopService.php index 4bc2ecf03..9638db57f 100644 --- a/app/Actions/Service/StopService.php +++ b/app/Actions/Service/StopService.php @@ -3,6 +3,7 @@ namespace App\Actions\Service; use App\Actions\Server\CleanupDocker; +use App\Events\ServiceStatusChanged; use App\Models\Service; use Lorisleiva\Actions\Concerns\AsAction; @@ -31,6 +32,8 @@ class StopService } } catch (\Exception $e) { return $e->getMessage(); + } finally { + ServiceStatusChanged::dispatch($service->environment->project->team->id); } } } diff --git a/app/Events/ServiceChecked.php b/app/Events/ServiceChecked.php new file mode 100644 index 000000000..3f130a0fb --- /dev/null +++ b/app/Events/ServiceChecked.php @@ -0,0 +1,35 @@ +check() && auth()->user()->currentTeam()) { + $teamId = auth()->user()->currentTeam()->id; + } + $this->teamId = $teamId; + } + + public function broadcastOn(): array + { + if (is_null($this->teamId)) { + return []; + } + + return [ + new PrivateChannel("team.{$this->teamId}"), + ]; + } +} diff --git a/app/Events/ServiceStatusChanged.php b/app/Events/ServiceStatusChanged.php index f5a30e874..506f77881 100644 --- a/app/Events/ServiceStatusChanged.php +++ b/app/Events/ServiceStatusChanged.php @@ -7,30 +7,29 @@ use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; -use Illuminate\Support\Facades\Auth; class ServiceStatusChanged implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; - public int|string|null $userId = null; + public ?int $teamId = null; - public function __construct($userId = null) + public function __construct($teamId = null) { - if (is_null($userId)) { - $userId = Auth::id() ?? null; + if (is_null($teamId) && auth()->check() && auth()->user()->currentTeam()) { + $teamId = auth()->user()->currentTeam()->id; } - $this->userId = $userId; + $this->teamId = $teamId; } - public function broadcastOn(): ?array + public function broadcastOn(): array { - if (is_null($this->userId)) { + if (is_null($this->teamId)) { return []; } return [ - new PrivateChannel("user.{$this->userId}"), + new PrivateChannel("team.{$this->teamId}"), ]; } } diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index bebec64cf..c58b075f4 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -5,7 +5,7 @@ namespace App\Jobs; use App\Actions\Docker\GetContainersStatus; use App\Enums\ApplicationDeploymentStatus; use App\Enums\ProcessStatus; -use App\Events\ApplicationStatusChanged; +use App\Events\ServiceStatusChanged; use App\Models\Application; use App\Models\ApplicationDeploymentQueue; use App\Models\ApplicationPreview; @@ -331,7 +331,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue $this->application_deployment_queue->addLogEntry("Gracefully shutting down build container: {$this->deployment_uuid}"); $this->graceful_shutdown_container($this->deployment_uuid); - ApplicationStatusChanged::dispatch(data_get($this->application, 'environment.project.team.id')); + ServiceStatusChanged::dispatch(data_get($this->application, 'environment.project.team.id')); } } diff --git a/app/Livewire/Project/Application/Configuration.php b/app/Livewire/Project/Application/Configuration.php index 267ca72ad..f0b95a9c8 100644 --- a/app/Livewire/Project/Application/Configuration.php +++ b/app/Livewire/Project/Application/Configuration.php @@ -17,7 +17,15 @@ class Configuration extends Component public $servers; - protected $listeners = ['buildPackUpdated' => '$refresh']; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + 'buildPackUpdated' => '$refresh', + ]; + } public function mount() { diff --git a/app/Livewire/Project/Application/Deployment/Index.php b/app/Livewire/Project/Application/Deployment/Index.php index 0567a6e8a..c957615ac 100644 --- a/app/Livewire/Project/Application/Deployment/Index.php +++ b/app/Livewire/Project/Application/Deployment/Index.php @@ -28,6 +28,15 @@ class Index extends Component protected $queryString = ['pull_request_id']; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + ]; + } + public function mount() { $project = currentTeam()->load(['projects'])->projects->where('uuid', request()->route('project_uuid'))->first(); diff --git a/app/Livewire/Project/Application/Deployment/Show.php b/app/Livewire/Project/Application/Deployment/Show.php index 7b2ac09d3..cdac47d3d 100644 --- a/app/Livewire/Project/Application/Deployment/Show.php +++ b/app/Livewire/Project/Application/Deployment/Show.php @@ -18,7 +18,15 @@ class Show extends Component public $isKeepAliveOn = true; - protected $listeners = ['refreshQueue']; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + 'refreshQueue', + ]; + } public function mount() { diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php index 5b0ae12ef..1bacc920f 100644 --- a/app/Livewire/Project/Application/Heading.php +++ b/app/Livewire/Project/Application/Heading.php @@ -4,7 +4,6 @@ namespace App\Livewire\Project\Application; use App\Actions\Application\StopApplication; use App\Actions\Docker\GetContainersStatus; -use App\Events\ApplicationStatusChanged; use App\Models\Application; use Livewire\Component; use Visus\Cuid2\Cuid2; @@ -28,7 +27,8 @@ class Heading extends Component $teamId = auth()->user()->currentTeam()->id; return [ - "echo-private:team.{$teamId},ApplicationStatusChanged" => 'check_status', + "echo-private:team.{$teamId},ServiceStatusChanged" => 'checkStatus', + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', 'compose_loaded' => '$refresh', 'update_links' => '$refresh', ]; @@ -46,14 +46,11 @@ class Heading extends Component $this->lastDeploymentLink = $this->application->gitCommitLink(data_get($lastDeployment, 'commit')); } - public function check_status($showNotification = false) + public function checkStatus() { if ($this->application->destination->server->isFunctional()) { GetContainersStatus::dispatch($this->application->destination->server); } - if ($showNotification) { - $this->dispatch('success', 'Success', 'Application status updated.'); - } } public function force_deploy_without_cache() @@ -111,16 +108,7 @@ class Heading extends Component public function stop() { - StopApplication::run($this->application, false, $this->docker_cleanup); - $this->application->status = 'exited'; - $this->application->save(); - if ($this->application->additional_servers->count() > 0) { - $this->application->additional_servers->each(function ($server) { - $server->pivot->status = 'exited:unhealthy'; - $server->pivot->save(); - }); - } - ApplicationStatusChanged::dispatch(data_get($this->application, 'environment.project.team.id')); + StopApplication::dispatch($this->application, false, $this->docker_cleanup); } public function restart() diff --git a/app/Livewire/Project/Database/Configuration.php b/app/Livewire/Project/Database/Configuration.php index 938abba54..6c4d0867e 100644 --- a/app/Livewire/Project/Database/Configuration.php +++ b/app/Livewire/Project/Database/Configuration.php @@ -2,6 +2,7 @@ namespace App\Livewire\Project\Database; +use Auth; use Livewire\Component; class Configuration extends Component @@ -14,6 +15,15 @@ class Configuration extends Component public $environment; + public function getListeners() + { + $teamId = Auth::user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + ]; + } + public function mount() { $this->currentRoute = request()->route()->getName(); diff --git a/app/Livewire/Project/Database/Heading.php b/app/Livewire/Project/Database/Heading.php index 2f304c5e6..177bb549c 100644 --- a/app/Livewire/Project/Database/Heading.php +++ b/app/Livewire/Project/Database/Heading.php @@ -6,8 +6,7 @@ use App\Actions\Database\RestartDatabase; use App\Actions\Database\StartDatabase; use App\Actions\Database\StopDatabase; use App\Actions\Docker\GetContainersStatus; -use App\Events\DatabaseStatusChanged; -use Illuminate\Support\Facades\Auth; +use App\Events\ServiceStatusChanged; use Livewire\Component; class Heading extends Component @@ -20,36 +19,41 @@ class Heading extends Component public function getListeners() { - $userId = Auth::id(); + $teamId = auth()->user()->currentTeam()->id; return [ - "echo-private:user.{$userId},DatabaseStatusChanged" => 'activityFinished', + "echo-private:team.{$teamId},ServiceStatusChanged" => 'checkStatus', + "echo-private:team.{$teamId},ServiceChecked" => 'activityFinished', + 'refresh' => '$refresh', + 'compose_loaded' => '$refresh', + 'update_links' => '$refresh', ]; } public function activityFinished() { - $this->database->update([ - 'started_at' => now(), - ]); - $this->check_status(); + try { + $this->database->update([ + 'started_at' => now(), + ]); - if (is_null($this->database->config_hash) || $this->database->isConfigurationChanged()) { - $this->database->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } else { - $this->dispatch('configurationChanged'); + if (is_null($this->database->config_hash) || $this->database->isConfigurationChanged()) { + $this->database->isConfigurationChanged(true); + $this->dispatch('configurationChanged'); + } else { + $this->dispatch('configurationChanged'); + } + } catch (\Exception $e) { + return handleError($e, $this); + } finally { + $this->dispatch('refresh'); } } - public function check_status($showNotification = false) + public function checkStatus() { if ($this->database->destination->server->isFunctional()) { - GetContainersStatus::run($this->database->destination->server); - } - - if ($showNotification) { - $this->dispatch('success', 'Database status updated.'); + GetContainersStatus::dispatch($this->database->destination->server); } } @@ -60,23 +64,24 @@ class Heading extends Component public function stop() { - StopDatabase::run($this->database, false, $this->docker_cleanup); - $this->database->status = 'exited'; - $this->database->save(); - $this->check_status(); - $this->dispatch('refresh'); + try { + $this->dispatch('info', 'Stopping database.'); + StopDatabase::dispatch($this->database, false, $this->docker_cleanup); + } catch (\Exception $e) { + $this->dispatch('error', $e->getMessage()); + } } public function restart() { $activity = RestartDatabase::run($this->database); - $this->dispatch('activityMonitor', $activity->id, DatabaseStatusChanged::class); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } public function start() { $activity = StartDatabase::run($this->database); - $this->dispatch('activityMonitor', $activity->id, DatabaseStatusChanged::class); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } public function render() diff --git a/app/Livewire/Project/Service/Configuration.php b/app/Livewire/Project/Service/Configuration.php index 20067b1f9..8ac74e7de 100644 --- a/app/Livewire/Project/Service/Configuration.php +++ b/app/Livewire/Project/Service/Configuration.php @@ -2,7 +2,6 @@ namespace App\Livewire\Project\Service; -use App\Actions\Docker\GetContainersStatus; use App\Models\Service; use Illuminate\Support\Facades\Auth; use Livewire\Component; @@ -27,13 +26,10 @@ class Configuration extends Component public function getListeners() { - $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},ServiceStatusChanged" => 'check_status', - 'refreshStatus' => '$refresh', - 'check_status', - 'refreshServices', + "echo-private:team.{$teamId},ServiceChecked" => 'serviceChecked', ]; } @@ -97,19 +93,15 @@ class Configuration extends Component } } - public function check_status() + public function serviceChecked() { try { - if ($this->service->server->isFunctional()) { - GetContainersStatus::dispatch($this->service->server); - } $this->service->applications->each(function ($application) { $application->refresh(); }); $this->service->databases->each(function ($database) { $database->refresh(); }); - $this->dispatch('refreshStatus'); } catch (\Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Service/EditDomain.php b/app/Livewire/Project/Service/EditDomain.php index fb1c05255..b7f73159e 100644 --- a/app/Livewire/Project/Service/EditDomain.php +++ b/app/Livewire/Project/Service/EditDomain.php @@ -47,7 +47,6 @@ class EditDomain extends Component $this->application->service->parse(); $this->dispatch('refresh'); $this->dispatch('configurationChanged'); - $this->dispatch('refreshStatus'); } catch (\Throwable $e) { $originalFqdn = $this->application->getOriginal('fqdn'); if ($originalFqdn !== $this->application->fqdn) { diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Heading.php similarity index 65% rename from app/Livewire/Project/Service/Navbar.php rename to app/Livewire/Project/Service/Heading.php index 5da425cbd..96e94ce92 100644 --- a/app/Livewire/Project/Service/Navbar.php +++ b/app/Livewire/Project/Service/Heading.php @@ -2,6 +2,7 @@ namespace App\Livewire\Project\Service; +use App\Actions\Docker\GetContainersStatus; use App\Actions\Service\StartService; use App\Actions\Service\StopService; use App\Enums\ProcessStatus; @@ -11,7 +12,7 @@ use Illuminate\Support\Facades\Auth; use Livewire\Component; use Spatie\Activitylog\Models\Activity; -class Navbar extends Component +class Heading extends Component { public Service $service; @@ -35,35 +36,44 @@ class Navbar extends Component public function getListeners() { - $userId = Auth::id(); + $teamId = Auth::user()->currentTeam()->id; return [ - "echo-private:user.{$userId},ServiceStatusChanged" => 'serviceStarted', + "echo-private:team.{$teamId},ServiceStatusChanged" => 'checkStatus', + "echo-private:team.{$teamId},ServiceChecked" => 'serviceChecked', + 'refresh' => '$refresh', 'envsUpdated' => '$refresh', - 'refreshStatus' => '$refresh', ]; } - public function serviceStarted() + public function checkStatus() { - // $this->dispatch('success', 'Service status changed.'); - if (is_null($this->service->config_hash) || $this->service->isConfigurationChanged()) { - $this->service->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } else { - $this->dispatch('configurationChanged'); + if ($this->service->server->isFunctional()) { + GetContainersStatus::dispatch($this->service->server); } } - public function check_status_without_notification() + public function serviceChecked() { - $this->dispatch('check_status'); - } + try { + $this->service->applications->each(function ($application) { + $application->refresh(); + }); + $this->service->databases->each(function ($database) { + $database->refresh(); + }); + if (is_null($this->service->config_hash) || $this->service->isConfigurationChanged()) { + $this->service->isConfigurationChanged(true); + $this->dispatch('configurationChanged'); + } else { + $this->dispatch('configurationChanged'); + } + } catch (\Exception $e) { + return handleError($e, $this); + } finally { + $this->dispatch('refresh')->self(); + } - public function check_status() - { - $this->dispatch('check_status'); - $this->dispatch('success', 'Service status updated.'); } public function checkDeployments() @@ -86,7 +96,7 @@ class Navbar extends Component public function start() { $activity = StartService::run($this->service, pullLatestImages: true); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } public function forceDeploy() @@ -98,22 +108,16 @@ class Navbar extends Component $activity->save(); } $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } catch (\Exception $e) { $this->dispatch('error', $e->getMessage()); } } - public function stop($cleanupContainers = false) + public function stop() { try { - StopService::run($this->service, false, $this->docker_cleanup); - ServiceStatusChanged::dispatch(); - if ($cleanupContainers) { - $this->dispatch('success', 'Containers cleaned up.'); - } else { - $this->dispatch('success', 'Service stopped.'); - } + StopService::dispatch($this->service, false, $this->docker_cleanup); } catch (\Exception $e) { $this->dispatch('error', $e->getMessage()); } @@ -128,7 +132,7 @@ class Navbar extends Component return; } $activity = StartService::run($this->service, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } public function pullAndRestartEvent() @@ -140,12 +144,12 @@ class Navbar extends Component return; } $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); + $this->dispatch('activityMonitor', $activity->id, ServiceStatusChanged::class); } public function render() { - return view('livewire.project.service.navbar', [ + return view('livewire.project.service.heading', [ 'checkboxes' => [ ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], ], diff --git a/app/Livewire/Project/Shared/Destination.php b/app/Livewire/Project/Shared/Destination.php index 71a913add..9d5331ff6 100644 --- a/app/Livewire/Project/Shared/Destination.php +++ b/app/Livewire/Project/Shared/Destination.php @@ -119,17 +119,14 @@ class Destination extends Component public function refreshServers() { GetContainersStatus::run($this->resource->destination->server); - // ContainerStatusJob::dispatchSync($this->resource->destination->server); $this->loadData(); $this->dispatch('refresh'); - ApplicationStatusChanged::dispatch(data_get($this->resource, 'environment.project.team.id')); } public function addServer(int $network_id, int $server_id) { $this->resource->additional_networks()->attach($network_id, ['server_id' => $server_id]); $this->loadData(); - ApplicationStatusChanged::dispatch(data_get($this->resource, 'environment.project.team.id')); } public function removeServer(int $network_id, int $server_id, $password) diff --git a/app/Livewire/Project/Shared/ExecuteContainerCommand.php b/app/Livewire/Project/Shared/ExecuteContainerCommand.php index 98289c536..df69a2250 100644 --- a/app/Livewire/Project/Shared/ExecuteContainerCommand.php +++ b/app/Livewire/Project/Shared/ExecuteContainerCommand.php @@ -35,6 +35,15 @@ class ExecuteContainerCommand extends Component 'command' => 'required', ]; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + ]; + } + public function mount() { if (! auth()->user()->isAdmin()) { diff --git a/app/Livewire/Project/Shared/Logs.php b/app/Livewire/Project/Shared/Logs.php index 12022b1ee..2d760fae2 100644 --- a/app/Livewire/Project/Shared/Logs.php +++ b/app/Livewire/Project/Shared/Logs.php @@ -37,6 +37,15 @@ class Logs extends Component public $cpu; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + ]; + } + public function loadContainers($server_id) { try { diff --git a/app/Livewire/Project/Shared/ScheduledTask/Show.php b/app/Livewire/Project/Shared/ScheduledTask/Show.php index 6d9c6982a..fe6e36d5c 100644 --- a/app/Livewire/Project/Shared/ScheduledTask/Show.php +++ b/app/Livewire/Project/Shared/ScheduledTask/Show.php @@ -46,6 +46,15 @@ class Show extends Component #[Locked] public string $task_uuid; + public function getListeners() + { + $teamId = auth()->user()->currentTeam()->id; + + return [ + "echo-private:team.{$teamId},ServiceChecked" => '$refresh', + ]; + } + public function mount(string $task_uuid, string $project_uuid, string $environment_uuid, ?string $application_uuid = null, ?string $service_uuid = null) { try { diff --git a/resources/views/components/modal-confirmation.blade.php b/resources/views/components/modal-confirmation.blade.php index 626d55329..3d7bf83dd 100644 --- a/resources/views/components/modal-confirmation.blade.php +++ b/resources/views/components/modal-confirmation.blade.php @@ -87,7 +87,6 @@ params.push(this.password); } params.push(this.selectedActions); - return $wire[methodName](...params) .then(result => { if (result === true) { diff --git a/resources/views/components/status/index.blade.php b/resources/views/components/status/index.blade.php index fcc2688e1..fe9569c8a 100644 --- a/resources/views/components/status/index.blade.php +++ b/resources/views/components/status/index.blade.php @@ -13,7 +13,8 @@ @endif @if (!str($resource->status)->contains('exited') && $showRefreshButton) -
@@ -159,16 +159,16 @@
diff --git a/resources/views/livewire/project/service/configuration.blade.php b/resources/views/livewire/project/service/configuration.blade.php index a849dd1d7..abb7229c6 100644 --- a/resources/views/livewire/project/service/configuration.blade.php +++ b/resources/views/livewire/project/service/configuration.blade.php @@ -2,7 +2,7 @@ {{ data_get_str($service, 'name')->limit(10) }} > Configuration | Coolify - +
@@ -36,7 +36,7 @@ @if ($currentRoute === 'project.service.configuration')

Services

-
+
@foreach ($applications as $application)
str( diff --git a/resources/views/livewire/project/service/navbar.blade.php b/resources/views/livewire/project/service/heading.blade.php similarity index 97% rename from resources/views/livewire/project/service/navbar.blade.php rename to resources/views/livewire/project/service/heading.blade.php index cf5a8177e..b461933a4 100644 --- a/resources/views/livewire/project/service/navbar.blade.php +++ b/resources/views/livewire/project/service/heading.blade.php @@ -1,4 +1,4 @@ -
+
Service Startup @@ -40,8 +40,7 @@ + step1ButtonText="Continue" step2ButtonText="Stop Service"> + step1ButtonText="Continue" step2ButtonText="Stop Service"> + step1ButtonText="Continue" step2ButtonText="Stop Service"> - +
@elseif ($type === 'service') - + @elseif ($type === 'server') @endif - @if(!$hasShell) + @if (!$hasShell)
- +

Terminal Not Available

-

No shell (bash/sh) is available in this container. Please ensure either bash or sh is installed to use the terminal.

+

No shell (bash/sh) is available in this container. Please + ensure either bash or sh is installed to use the terminal.

@else @if ($type === 'server') - + Reconnect
diff --git a/resources/views/livewire/project/shared/scheduled-task/show.blade.php b/resources/views/livewire/project/shared/scheduled-task/show.blade.php index d3f6cb5dc..c32659ad8 100644 --- a/resources/views/livewire/project/shared/scheduled-task/show.blade.php +++ b/resources/views/livewire/project/shared/scheduled-task/show.blade.php @@ -6,7 +6,7 @@

Scheduled Task

@elseif ($type === 'service') - + @endif
From ca77dc8eb9d482ccdc9069498ee5ebc5a7d56d7d Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:27:04 +0200 Subject: [PATCH 047/229] fix(css): tailwind v5 things --- resources/css/app.css | 2 +- resources/css/utilities.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/css/app.css b/resources/css/app.css index 79e5f0c13..77fa2d66b 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -44,7 +44,7 @@ ::before, ::backdrop, ::file-selector-button { - border-color: var(--color-gray-200, currentcolor); + border-color: var(--color-coolgray-200, currentcolor); } } diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 8504ed3d9..0735e35e2 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -194,7 +194,7 @@ } @utility fullscreen { - @apply overflow-y-auto fixed top-0 left-0 w-full h-full bg-white z-9999 dark:bg-coolgray-100 scrollbar; + @apply overflow-y-auto fixed top-0 left-0 w-full h-full bg-white z-[9999] dark:bg-coolgray-100 scrollbar; } @utility toast { From 107143390251f794975939f95605bc4736b09c43 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:27:39 +0200 Subject: [PATCH 048/229] fix(service): Diun ENV for consistency --- templates/compose/diun.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/diun.yaml b/templates/compose/diun.yaml index 2894917e5..266bd44ba 100644 --- a/templates/compose/diun.yaml +++ b/templates/compose/diun.yaml @@ -15,7 +15,7 @@ services: - LOG_LEVEL=${LOG_LEVEL:-info} - LOG_JSON=${LOG_JSON:-false} - DIUN_WATCH_WORKERS=${DIUN_WATCH_WORKERS:-20} - - DIUN_WATCH_SCHEDULE=${CRON_WATCH_SCHEDULE:- * */6 * * *} + - DIUN_WATCH_SCHEDULE=${DIUN_WATCH_SCHEDULE:- * */6 * * *} - DIUN_WATCH_JITTER=${DIUN_WATCH_JITTER:-30s} - DIUN_PROVIDERS_DOCKER=${DIUN_PROVIDERS_DOCKER:-true} - DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=${DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT:-true} From 8aca7561d9b53a1e40c9296ccd4071b9b287a78d Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:27:55 +0200 Subject: [PATCH 049/229] fix(service): memos service name --- templates/compose/memos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/memos.yaml b/templates/compose/memos.yaml index 753630060..32bc2f297 100644 --- a/templates/compose/memos.yaml +++ b/templates/compose/memos.yaml @@ -5,7 +5,7 @@ # port: 5230 services: - wg-easy: + memos: image: neosmemo/memos:stable volumes: - memos/:/var/opt/memos From 71b272f06ae17e1c774544049e384b8875d41bd4 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:28:48 +0200 Subject: [PATCH 050/229] refactor(service): improve paymenter - formatting - ENV style - add depends_on --- templates/compose/paymenter.yaml | 33 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/templates/compose/paymenter.yaml b/templates/compose/paymenter.yaml index c05c93d7c..9854581f9 100644 --- a/templates/compose/paymenter.yaml +++ b/templates/compose/paymenter.yaml @@ -10,27 +10,32 @@ services: volumes: - app_logs:/app/storage/logs - app_public:/app/storage/public - healthcheck: - test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] - interval: 10s - timeout: 1s - retries: 3 environment: SERVICE_FQDN_PAYMENTER: ${SERVICE_FQDN_PAYMENTER_80} DB_DATABASE: ${MYSQL_DATABASE:-paymenter-db} DB_PASSWORD: ${SERVICE_PASSWORD_MYSQL} DB_USERNAME: ${SERVICE_USER_MYSQL} - APP_ENV: "production" - CACHE_STORE: "redis" - SESSION_DRIVER: "redis" - QUEUE_CONNECTION: "redis" - REDIS_HOST: "redis" + APP_ENV: production + CACHE_STORE: redis + SESSION_DRIVER: redis + QUEUE_CONNECTION: redis + REDIS_HOST: redis REDIS_USERNAME: default - REDIS_PASSWORD: "${SERVICE_PASSWORD_64_REDIS}" - DB_CONNECTION: "mariadb" - DB_HOST: "mariadb" - DB_PORT: "3306" + REDIS_PASSWORD: ${SERVICE_PASSWORD_64_REDIS} + DB_CONNECTION: mariadb + DB_HOST: mariadb + DB_PORT: 3306 APP_KEY: ${SERVICE_BASE64_KEY} + depends_on: + mariadb: + condition: service_healthy + redis: + condition: service_started + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"] + interval: 10s + timeout: 1s + retries: 3 mariadb: image: mariadb:11 From 65d64dcbadd25916da3a8b3de389c3e01f3ff42f Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:29:16 +0200 Subject: [PATCH 051/229] chore(service): remove typesense default API key --- templates/compose/typesense.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/typesense.yaml b/templates/compose/typesense.yaml index 443d00df2..d6c383b90 100644 --- a/templates/compose/typesense.yaml +++ b/templates/compose/typesense.yaml @@ -11,7 +11,7 @@ services: - SERVICE_FQDN_TYPESENSE_8108 - TYPESENSE_ENABLE_CORS=${TYPESENSE_ENABLE_CORS:-true} - TYPESENSE_DATA_DIR=/data - - TYPESENSE_API_KEY=${TYPESENSE_API_KEY:-xyz} + - TYPESENSE_API_KEY=${TYPESENSE_API_KEY} volumes: - typesense_data:/data healthcheck: From a337d4b4f8210860f1ae0952f238963e5f8c5d36 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:30:01 +0200 Subject: [PATCH 052/229] chore(service): format yamtrack healthcheck --- templates/compose/yamtrack.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/templates/compose/yamtrack.yaml b/templates/compose/yamtrack.yaml index 7b626e737..49e760e8f 100644 --- a/templates/compose/yamtrack.yaml +++ b/templates/compose/yamtrack.yaml @@ -21,8 +21,10 @@ services: condition: service_healthy healthcheck: test: - - CMD-SHELL - - "wget --no-verbose --tries=1 --spider http://127.0.0.1:8000/health/ || exit 1" + [ + "CMD-SHELL", + "wget --quiet --tries=1 --spider http://127.0.0.1:8000/health/ || exit 1", + ] interval: 5s timeout: 20s retries: 10 From 69c01b650a6b9fe233759233456fa1bcb8fbcebb Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:30:15 +0200 Subject: [PATCH 053/229] Update service-templates.json --- templates/service-templates.json | 69 ++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/templates/service-templates.json b/templates/service-templates.json index 6d1c85451..73faee6e7 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -144,7 +144,7 @@ "authentik": { "documentation": "https://docs.goauthentik.io/docs/installation/docker-compose?utm_source=coolify.io", "slogan": "An open-source Identity Provider, focused on flexibility and versatility.", - "compose": "c2VydmljZXM6CiAgYXV0aGVudGlrLXNlcnZlcjoKICAgIGltYWdlOiAnZ2hjci5pby9nb2F1dGhlbnRpay9zZXJ2ZXI6JHtBVVRIRU5USUtfVEFHOi0yMDI1LjIuM30nCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgY29tbWFuZDogc2VydmVyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fQVVUSEVOVElLU0VSVkVSXzkwMDAKICAgICAgLSAnQVVUSEVOVElLX1JFRElTX19IT1NUPSR7UkVESVNfSE9TVDotcmVkaXN9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fSE9TVD0ke1BPU1RHUkVTX0hPU1Q6LXBvc3RncmVzcWx9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX05BTUU9JHtQT1NUR1JFU19EQjotYXV0aGVudGlrfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1NFQ1JFVF9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0FVVEhFTlRJS1NFUlZFUn0nCiAgICAgIC0gJ0FVVEhFTlRJS19FUlJPUl9SRVBPUlRJTkdfX0VOQUJMRUQ9JHtBVVRIRU5USUtfRVJST1JfUkVQT1JUSU5HX19FTkFCTEVEOi10cnVlfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19IT1NUPSR7QVVUSEVOVElLX0VNQUlMX19IT1NUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19QT1JUPSR7QVVUSEVOVElLX0VNQUlMX19QT1JUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19VU0VSTkFNRT0ke0FVVEhFTlRJS19FTUFJTF9fVVNFUk5BTUV9JwogICAgICAtICdBVVRIRU5USUtfRU1BSUxfX1BBU1NXT1JEPSR7QVVUSEVOVElLX0VNQUlMX19QQVNTV09SRH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMUz0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMU30nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTD0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVD0ke0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fRlJPTT0ke0FVVEhFTlRJS19FTUFJTF9fRlJPTX0nCiAgICB2b2x1bWVzOgogICAgICAtICcuL21lZGlhOi9tZWRpYScKICAgICAgLSAnLi9jdXN0b20tdGVtcGxhdGVzOi90ZW1wbGF0ZXMnCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgYXV0aGVudGlrLXdvcmtlcjoKICAgIGltYWdlOiAnZ2hjci5pby9nb2F1dGhlbnRpay9zZXJ2ZXI6JHtBVVRIRU5USUtfVEFHOi0yMDI1LjIuM30nCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgY29tbWFuZDogd29ya2VyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnQVVUSEVOVElLX1JFRElTX19IT1NUPSR7UkVESVNfSE9TVDotcmVkaXN9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fSE9TVD0ke1BPU1RHUkVTX0hPU1Q6LXBvc3RncmVzcWx9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX05BTUU9JHtQT1NUR1JFU19EQjotYXV0aGVudGlrfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1NFQ1JFVF9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0FVVEhFTlRJS1NFUlZFUn0nCiAgICAgIC0gJ0FVVEhFTlRJS19FUlJPUl9SRVBPUlRJTkdfX0VOQUJMRUQ9JHtBVVRIRU5USUtfRVJST1JfUkVQT1JUSU5HX19FTkFCTEVEfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19IT1NUPSR7QVVUSEVOVElLX0VNQUlMX19IT1NUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19QT1JUPSR7QVVUSEVOVElLX0VNQUlMX19QT1JUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19VU0VSTkFNRT0ke0FVVEhFTlRJS19FTUFJTF9fVVNFUk5BTUV9JwogICAgICAtICdBVVRIRU5USUtfRU1BSUxfX1BBU1NXT1JEPSR7QVVUSEVOVElLX0VNQUlMX19QQVNTV09SRH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMUz0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMU30nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTD0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVD0ke0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fRlJPTT0ke0FVVEhFTlRJS19FTUFJTF9fRlJPTX0nCiAgICB1c2VyOiByb290CiAgICB2b2x1bWVzOgogICAgICAtICcvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29jaycKICAgICAgLSAnLi9tZWRpYTovbWVkaWEnCiAgICAgIC0gJy4vY2VydHM6L2NlcnRzJwogICAgICAtICcuL2N1c3RvbS10ZW1wbGF0ZXM6L3RlbXBsYXRlcycKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1kICQke1BPU1RHUkVTX0RCfSAtVSAkJHtQT1NUR1JFU19VU0VSfScKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogICAgdm9sdW1lczoKICAgICAgLSAnYXV0aGVudGlrLWRiOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTH0nCiAgICAgIC0gUE9TVEdSRVNfREI9YXV0aGVudGlrCiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOmFscGluZScKICAgIGNvbW1hbmQ6ICctLXNhdmUgNjAgMSAtLWxvZ2xldmVsIHdhcm5pbmcnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdyZWRpcy1jbGkgcGluZyB8IGdyZXAgUE9ORycKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogICAgdm9sdW1lczoKICAgICAgLSAncmVkaXM6L2RhdGEnCg==", + "compose": "c2VydmljZXM6CiAgYXV0aGVudGlrLXNlcnZlcjoKICAgIGltYWdlOiAnZ2hjci5pby9nb2F1dGhlbnRpay9zZXJ2ZXI6JHtBVVRIRU5USUtfVEFHOi0yMDI1LjQuMX0nCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgY29tbWFuZDogc2VydmVyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fQVVUSEVOVElLU0VSVkVSXzkwMDAKICAgICAgLSAnQVVUSEVOVElLX1JFRElTX19IT1NUPSR7UkVESVNfSE9TVDotcmVkaXN9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fSE9TVD0ke1BPU1RHUkVTX0hPU1Q6LXBvc3RncmVzcWx9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX05BTUU9JHtQT1NUR1JFU19EQjotYXV0aGVudGlrfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1NFQ1JFVF9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0FVVEhFTlRJS1NFUlZFUn0nCiAgICAgIC0gJ0FVVEhFTlRJS19FUlJPUl9SRVBPUlRJTkdfX0VOQUJMRUQ9JHtBVVRIRU5USUtfRVJST1JfUkVQT1JUSU5HX19FTkFCTEVEOi10cnVlfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19IT1NUPSR7QVVUSEVOVElLX0VNQUlMX19IT1NUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19QT1JUPSR7QVVUSEVOVElLX0VNQUlMX19QT1JUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19VU0VSTkFNRT0ke0FVVEhFTlRJS19FTUFJTF9fVVNFUk5BTUV9JwogICAgICAtICdBVVRIRU5USUtfRU1BSUxfX1BBU1NXT1JEPSR7QVVUSEVOVElLX0VNQUlMX19QQVNTV09SRH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMUz0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMU30nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTD0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVD0ke0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fRlJPTT0ke0FVVEhFTlRJS19FTUFJTF9fRlJPTX0nCiAgICB2b2x1bWVzOgogICAgICAtICcuL21lZGlhOi9tZWRpYScKICAgICAgLSAnLi9jdXN0b20tdGVtcGxhdGVzOi90ZW1wbGF0ZXMnCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgYXV0aGVudGlrLXdvcmtlcjoKICAgIGltYWdlOiAnZ2hjci5pby9nb2F1dGhlbnRpay9zZXJ2ZXI6JHtBVVRIRU5USUtfVEFHOi0yMDI1LjQuMX0nCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgY29tbWFuZDogd29ya2VyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnQVVUSEVOVElLX1JFRElTX19IT1NUPSR7UkVESVNfSE9TVDotcmVkaXN9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fSE9TVD0ke1BPU1RHUkVTX0hPU1Q6LXBvc3RncmVzcWx9JwogICAgICAtICdBVVRIRU5USUtfUE9TVEdSRVNRTF9fVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX05BTUU9JHtQT1NUR1JFU19EQjotYXV0aGVudGlrfScKICAgICAgLSAnQVVUSEVOVElLX1BPU1RHUkVTUUxfX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnQVVUSEVOVElLX1NFQ1JFVF9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0FVVEhFTlRJS1NFUlZFUn0nCiAgICAgIC0gJ0FVVEhFTlRJS19FUlJPUl9SRVBPUlRJTkdfX0VOQUJMRUQ9JHtBVVRIRU5USUtfRVJST1JfUkVQT1JUSU5HX19FTkFCTEVEfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19IT1NUPSR7QVVUSEVOVElLX0VNQUlMX19IT1NUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19QT1JUPSR7QVVUSEVOVElLX0VNQUlMX19QT1JUfScKICAgICAgLSAnQVVUSEVOVElLX0VNQUlMX19VU0VSTkFNRT0ke0FVVEhFTlRJS19FTUFJTF9fVVNFUk5BTUV9JwogICAgICAtICdBVVRIRU5USUtfRU1BSUxfX1BBU1NXT1JEPSR7QVVUSEVOVElLX0VNQUlMX19QQVNTV09SRH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMUz0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1RMU30nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTD0ke0FVVEhFTlRJS19FTUFJTF9fVVNFX1NTTH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVD0ke0FVVEhFTlRJS19FTUFJTF9fVElNRU9VVH0nCiAgICAgIC0gJ0FVVEhFTlRJS19FTUFJTF9fRlJPTT0ke0FVVEhFTlRJS19FTUFJTF9fRlJPTX0nCiAgICB1c2VyOiByb290CiAgICB2b2x1bWVzOgogICAgICAtICcvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29jaycKICAgICAgLSAnLi9tZWRpYTovbWVkaWEnCiAgICAgIC0gJy4vY2VydHM6L2NlcnRzJwogICAgICAtICcuL2N1c3RvbS10ZW1wbGF0ZXM6L3RlbXBsYXRlcycKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1kICQke1BPU1RHUkVTX0RCfSAtVSAkJHtQT1NUR1JFU19VU0VSfScKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogICAgdm9sdW1lczoKICAgICAgLSAnYXV0aGVudGlrLWRiOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTH0nCiAgICAgIC0gUE9TVEdSRVNfREI9YXV0aGVudGlrCiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOmFscGluZScKICAgIGNvbW1hbmQ6ICctLXNhdmUgNjAgMSAtLWxvZ2xldmVsIHdhcm5pbmcnCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdyZWRpcy1jbGkgcGluZyB8IGdyZXAgUE9ORycKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogICAgdm9sdW1lczoKICAgICAgLSAncmVkaXM6L2RhdGEnCg==", "tags": [ "identity", "login", @@ -372,7 +372,7 @@ "chatwoot": { "documentation": "https://www.chatwoot.com/docs/self-hosted/?utm_source=coolify.io", "slogan": "Delightful customer relationships at scale.", - "compose": "c2VydmljZXM6CiAgY2hhdHdvb3Q6CiAgICBpbWFnZTogJ2NoYXR3b290L2NoYXR3b290OmxhdGVzdCcKICAgIGRlcGVuZHNfb246CiAgICAgIC0gcG9zdGdyZXMKICAgICAgLSByZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NIQVRXT09UXzMwMDAKICAgICAgLSBTRUNSRVRfS0VZX0JBU0U9JFNFUlZJQ0VfUEFTU1dPUkRfQ0hBVFdPT1QKICAgICAgLSAnRlJPTlRFTkRfVVJMPSR7U0VSVklDRV9GUUROX0NIQVRXT09UfScKICAgICAgLSAnREVGQVVMVF9MT0NBTEU9JHtDSEFUV09PVF9ERUZBVUxUX0xPQ0FMRX0nCiAgICAgIC0gJ0ZPUkNFX1NTTD0ke0ZPUkNFX1NTTDotZmFsc2V9JwogICAgICAtICdFTkFCTEVfQUNDT1VOVF9TSUdOVVA9JHtFTkFCTEVfQUNDT1VOVF9TSUdOVVA6LWZhbHNlfScKICAgICAgLSAnUkVESVNfVVJMPXJlZGlzOi8vZGVmYXVsdEByZWRpczo2Mzc5JwogICAgICAtIFJFRElTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1JFRElTCiAgICAgIC0gJ1JFRElTX09QRU5TU0xfVkVSSUZZX01PREU9JHtSRURJU19PUEVOU1NMX1ZFUklGWV9NT0RFOi1ub25lfScKICAgICAgLSAnUE9TVEdSRVNfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotY2hhdHdvb3R9JwogICAgICAtICdQT1NUR1JFU19IT1NUPSR7UE9TVEdSRVNfSE9TVDotcG9zdGdyZXN9JwogICAgICAtIFBPU1RHUkVTX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdSQUlMU19NQVhfVEhSRUFEUz0ke1JBSUxTX01BWF9USFJFQURTOi01fScKICAgICAgLSAnTk9ERV9FTlY9JHtOT0RFX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ1JBSUxTX0VOVj0ke1JBSUxTX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ0lOU1RBTExBVElPTl9FTlY9JHtJTlNUQUxMQVRJT05fRU5WOi1kb2NrZXJ9JwogICAgICAtICdNQUlMRVJfU0VOREVSX0VNQUlMPSR7Q0hBVFdPT1RfTUFJTEVSX1NFTkRFUl9FTUFJTH0nCiAgICAgIC0gJ1NNVFBfQUREUkVTUz0ke0NIQVRXT09UX1NNVFBfQUREUkVTU30nCiAgICAgIC0gJ1NNVFBfQVVUSEVOVElDQVRJT049JHtDSEFUV09PVF9TTVRQX0FVVEhFTlRJQ0FUSU9OfScKICAgICAgLSAnU01UUF9ET01BSU49JHtDSEFUV09PVF9TTVRQX0RPTUFJTn0nCiAgICAgIC0gJ1NNVFBfRU5BQkxFX1NUQVJUVExTX0FVVE89JHtDSEFUV09PVF9TTVRQX0VOQUJMRV9TVEFSVFRMU19BVVRPfScKICAgICAgLSAnU01UUF9QT1JUPSR7Q0hBVFdPT1RfU01UUF9QT1JUfScKICAgICAgLSAnU01UUF9VU0VSTkFNRT0ke0NIQVRXT09UX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdTTVRQX1BBU1NXT1JEPSR7Q0hBVFdPT1RfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0FDVElWRV9TVE9SQUdFX1NFUlZJQ0U9JHtBQ1RJVkVfU1RPUkFHRV9TRVJWSUNFOi1sb2NhbH0nCiAgICBlbnRyeXBvaW50OiBkb2NrZXIvZW50cnlwb2ludHMvcmFpbHMuc2gKICAgIGNvbW1hbmQ6ICdzaCAtYyAiYnVuZGxlIGV4ZWMgcmFpbHMgZGI6Y2hhdHdvb3RfcHJlcGFyZSAmJiBidW5kbGUgZXhlYyByYWlscyBzIC1wIDMwMDAgLWIgMC4wLjAuMCInCiAgICB2b2x1bWVzOgogICAgICAtICdyYWlscy1kYXRhOi9hcHAvc3RvcmFnZScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgc2lkZWtpcToKICAgIGltYWdlOiAnY2hhdHdvb3QvY2hhdHdvb3Q6bGF0ZXN0JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBwb3N0Z3JlcwogICAgICAtIHJlZGlzCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRUNSRVRfS0VZX0JBU0U9JFNFUlZJQ0VfUEFTU1dPUkRfQ0hBVFdPT1QKICAgICAgLSAnRlJPTlRFTkRfVVJMPSR7U0VSVklDRV9GUUROX0NIQVRXT09UfScKICAgICAgLSAnREVGQVVMVF9MT0NBTEU9JHtDSEFUV09PVF9ERUZBVUxUX0xPQ0FMRX0nCiAgICAgIC0gJ0ZPUkNFX1NTTD0ke0ZPUkNFX1NTTDotZmFsc2V9JwogICAgICAtICdFTkFCTEVfQUNDT1VOVF9TSUdOVVA9JHtFTkFCTEVfQUNDT1VOVF9TSUdOVVA6LWZhbHNlfScKICAgICAgLSAnUkVESVNfVVJMPXJlZGlzOi8vZGVmYXVsdEByZWRpczo2Mzc5JwogICAgICAtIFJFRElTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1JFRElTCiAgICAgIC0gJ1JFRElTX09QRU5TU0xfVkVSSUZZX01PREU9JHtSRURJU19PUEVOU1NMX1ZFUklGWV9NT0RFOi1ub25lfScKICAgICAgLSAnUE9TVEdSRVNfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotY2hhdHdvb3R9JwogICAgICAtICdQT1NUR1JFU19IT1NUPSR7UE9TVEdSRVNfSE9TVDotcG9zdGdyZXN9JwogICAgICAtIFBPU1RHUkVTX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdSQUlMU19NQVhfVEhSRUFEUz0ke1JBSUxTX01BWF9USFJFQURTOi01fScKICAgICAgLSAnTk9ERV9FTlY9JHtOT0RFX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ1JBSUxTX0VOVj0ke1JBSUxTX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ0lOU1RBTExBVElPTl9FTlY9JHtJTlNUQUxMQVRJT05fRU5WOi1kb2NrZXJ9JwogICAgICAtICdNQUlMRVJfU0VOREVSX0VNQUlMPSR7Q0hBVFdPT1RfTUFJTEVSX1NFTkRFUl9FTUFJTH0nCiAgICAgIC0gJ1NNVFBfQUREUkVTUz0ke0NIQVRXT09UX1NNVFBfQUREUkVTU30nCiAgICAgIC0gJ1NNVFBfQVVUSEVOVElDQVRJT049JHtDSEFUV09PVF9TTVRQX0FVVEhFTlRJQ0FUSU9OfScKICAgICAgLSAnU01UUF9ET01BSU49JHtDSEFUV09PVF9TTVRQX0RPTUFJTn0nCiAgICAgIC0gJ1NNVFBfRU5BQkxFX1NUQVJUVExTX0FVVE89JHtDSEFUV09PVF9TTVRQX0VOQUJMRV9TVEFSVFRMU19BVVRPfScKICAgICAgLSAnU01UUF9QT1JUPSR7Q0hBVFdPT1RfU01UUF9QT1JUfScKICAgICAgLSAnU01UUF9VU0VSTkFNRT0ke0NIQVRXT09UX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdTTVRQX1BBU1NXT1JEPSR7Q0hBVFdPT1RfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0FDVElWRV9TVE9SQUdFX1NFUlZJQ0U9JHtBQ1RJVkVfU1RPUkFHRV9TRVJWSUNFOi1sb2NhbH0nCiAgICBjb21tYW5kOgogICAgICAtIGJ1bmRsZQogICAgICAtIGV4ZWMKICAgICAgLSBzaWRla2lxCiAgICAgIC0gJy1DJwogICAgICAtIGNvbmZpZy9zaWRla2lxLnltbAogICAgdm9sdW1lczoKICAgICAgLSAnc2lkZWtpcS1kYXRhOi9hcHAvc3RvcmFnZScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAiYnVuZGxlIGV4ZWMgcmFpbHMgcnVubmVyICdwdXRzIFNpZGVraXEucmVkaXMoJjppbmZvKScgPiAvZGV2L251bGwgMj4mMSIKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMwogIHBvc3RncmVzOgogICAgaW1hZ2U6ICdwZ3ZlY3Rvci9wZ3ZlY3RvcjpwZzEyJwogICAgcmVzdGFydDogYWx3YXlzCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1jaGF0d29vdH0nCiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkU0VSVklDRV9VU0VSX1BPU1RHUkVTIC1kIGNoYXR3b290IC1oIDEyNy4wLjAuMScKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogNQogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczphbHBpbmUnCiAgICByZXN0YXJ0OiBhbHdheXMKICAgIGNvbW1hbmQ6CiAgICAgIC0gc2gKICAgICAgLSAnLWMnCiAgICAgIC0gJ3JlZGlzLXNlcnZlciAtLXJlcXVpcmVwYXNzICIkU0VSVklDRV9QQVNTV09SRF9SRURJUyInCiAgICB2b2x1bWVzOgogICAgICAtICdyZWRpcy1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gJy1hJwogICAgICAgIC0gJFNFUlZJQ0VfUEFTU1dPUkRfUkVESVMKICAgICAgICAtIFBJTkcKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogNQo=", + "compose": "c2VydmljZXM6CiAgY2hhdHdvb3Q6CiAgICBpbWFnZTogJ2NoYXR3b290L2NoYXR3b290OmxhdGVzdCcKICAgIGRlcGVuZHNfb246CiAgICAgIC0gcG9zdGdyZXMKICAgICAgLSByZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NIQVRXT09UXzMwMDAKICAgICAgLSBTRUNSRVRfS0VZX0JBU0U9JFNFUlZJQ0VfUEFTU1dPUkRfQ0hBVFdPT1QKICAgICAgLSAnRlJPTlRFTkRfVVJMPSR7U0VSVklDRV9GUUROX0NIQVRXT09UfScKICAgICAgLSAnREVGQVVMVF9MT0NBTEU9JHtDSEFUV09PVF9ERUZBVUxUX0xPQ0FMRX0nCiAgICAgIC0gJ0ZPUkNFX1NTTD0ke0ZPUkNFX1NTTDotZmFsc2V9JwogICAgICAtICdFTkFCTEVfQUNDT1VOVF9TSUdOVVA9JHtFTkFCTEVfQUNDT1VOVF9TSUdOVVA6LWZhbHNlfScKICAgICAgLSAnUkVESVNfVVJMPXJlZGlzOi8vZGVmYXVsdEByZWRpczo2Mzc5JwogICAgICAtIFJFRElTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1JFRElTCiAgICAgIC0gJ1JFRElTX09QRU5TU0xfVkVSSUZZX01PREU9JHtSRURJU19PUEVOU1NMX1ZFUklGWV9NT0RFOi1ub25lfScKICAgICAgLSAnUE9TVEdSRVNfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotY2hhdHdvb3R9JwogICAgICAtICdQT1NUR1JFU19IT1NUPSR7UE9TVEdSRVNfSE9TVDotcG9zdGdyZXN9JwogICAgICAtIFBPU1RHUkVTX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdSQUlMU19NQVhfVEhSRUFEUz0ke1JBSUxTX01BWF9USFJFQURTOi01fScKICAgICAgLSAnTk9ERV9FTlY9JHtOT0RFX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ1JBSUxTX0VOVj0ke1JBSUxTX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ0lOU1RBTExBVElPTl9FTlY9JHtJTlNUQUxMQVRJT05fRU5WOi1kb2NrZXJ9JwogICAgICAtICdNQUlMRVJfU0VOREVSX0VNQUlMPSR7Q0hBVFdPT1RfTUFJTEVSX1NFTkRFUl9FTUFJTH0nCiAgICAgIC0gJ1NNVFBfQUREUkVTUz0ke0NIQVRXT09UX1NNVFBfQUREUkVTU30nCiAgICAgIC0gJ1NNVFBfQVVUSEVOVElDQVRJT049JHtDSEFUV09PVF9TTVRQX0FVVEhFTlRJQ0FUSU9OfScKICAgICAgLSAnU01UUF9ET01BSU49JHtDSEFUV09PVF9TTVRQX0RPTUFJTn0nCiAgICAgIC0gJ1NNVFBfRU5BQkxFX1NUQVJUVExTX0FVVE89JHtDSEFUV09PVF9TTVRQX0VOQUJMRV9TVEFSVFRMU19BVVRPfScKICAgICAgLSAnU01UUF9QT1JUPSR7Q0hBVFdPT1RfU01UUF9QT1JUfScKICAgICAgLSAnU01UUF9VU0VSTkFNRT0ke0NIQVRXT09UX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdTTVRQX1BBU1NXT1JEPSR7Q0hBVFdPT1RfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0FDVElWRV9TVE9SQUdFX1NFUlZJQ0U9JHtBQ1RJVkVfU1RPUkFHRV9TRVJWSUNFOi1sb2NhbH0nCiAgICBlbnRyeXBvaW50OiBkb2NrZXIvZW50cnlwb2ludHMvcmFpbHMuc2gKICAgIGNvbW1hbmQ6ICdzaCAtYyAiYnVuZGxlIGV4ZWMgcmFpbHMgZGI6Y2hhdHdvb3RfcHJlcGFyZSAmJiBidW5kbGUgZXhlYyByYWlscyBzIC1wIDMwMDAgLWIgMC4wLjAuMCInCiAgICB2b2x1bWVzOgogICAgICAtICdyYWlscy1kYXRhOi9hcHAvc3RvcmFnZScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgc2lkZWtpcToKICAgIGltYWdlOiAnY2hhdHdvb3QvY2hhdHdvb3Q6bGF0ZXN0JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBwb3N0Z3JlcwogICAgICAtIHJlZGlzCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRUNSRVRfS0VZX0JBU0U9JFNFUlZJQ0VfUEFTU1dPUkRfQ0hBVFdPT1QKICAgICAgLSAnRlJPTlRFTkRfVVJMPSR7U0VSVklDRV9GUUROX0NIQVRXT09UfScKICAgICAgLSAnREVGQVVMVF9MT0NBTEU9JHtDSEFUV09PVF9ERUZBVUxUX0xPQ0FMRX0nCiAgICAgIC0gJ0ZPUkNFX1NTTD0ke0ZPUkNFX1NTTDotZmFsc2V9JwogICAgICAtICdFTkFCTEVfQUNDT1VOVF9TSUdOVVA9JHtFTkFCTEVfQUNDT1VOVF9TSUdOVVA6LWZhbHNlfScKICAgICAgLSAnUkVESVNfVVJMPXJlZGlzOi8vZGVmYXVsdEByZWRpczo2Mzc5JwogICAgICAtIFJFRElTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1JFRElTCiAgICAgIC0gJ1JFRElTX09QRU5TU0xfVkVSSUZZX01PREU9JHtSRURJU19PUEVOU1NMX1ZFUklGWV9NT0RFOi1ub25lfScKICAgICAgLSAnUE9TVEdSRVNfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotY2hhdHdvb3R9JwogICAgICAtICdQT1NUR1JFU19IT1NUPSR7UE9TVEdSRVNfSE9TVDotcG9zdGdyZXN9JwogICAgICAtIFBPU1RHUkVTX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdSQUlMU19NQVhfVEhSRUFEUz0ke1JBSUxTX01BWF9USFJFQURTOi01fScKICAgICAgLSAnTk9ERV9FTlY9JHtOT0RFX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ1JBSUxTX0VOVj0ke1JBSUxTX0VOVjotcHJvZHVjdGlvbn0nCiAgICAgIC0gJ0lOU1RBTExBVElPTl9FTlY9JHtJTlNUQUxMQVRJT05fRU5WOi1kb2NrZXJ9JwogICAgICAtICdNQUlMRVJfU0VOREVSX0VNQUlMPSR7Q0hBVFdPT1RfTUFJTEVSX1NFTkRFUl9FTUFJTH0nCiAgICAgIC0gJ1NNVFBfQUREUkVTUz0ke0NIQVRXT09UX1NNVFBfQUREUkVTU30nCiAgICAgIC0gJ1NNVFBfQVVUSEVOVElDQVRJT049JHtDSEFUV09PVF9TTVRQX0FVVEhFTlRJQ0FUSU9OfScKICAgICAgLSAnU01UUF9ET01BSU49JHtDSEFUV09PVF9TTVRQX0RPTUFJTn0nCiAgICAgIC0gJ1NNVFBfRU5BQkxFX1NUQVJUVExTX0FVVE89JHtDSEFUV09PVF9TTVRQX0VOQUJMRV9TVEFSVFRMU19BVVRPfScKICAgICAgLSAnU01UUF9QT1JUPSR7Q0hBVFdPT1RfU01UUF9QT1JUfScKICAgICAgLSAnU01UUF9VU0VSTkFNRT0ke0NIQVRXT09UX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdTTVRQX1BBU1NXT1JEPSR7Q0hBVFdPT1RfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0FDVElWRV9TVE9SQUdFX1NFUlZJQ0U9JHtBQ1RJVkVfU1RPUkFHRV9TRVJWSUNFOi1sb2NhbH0nCiAgICBjb21tYW5kOgogICAgICAtIGJ1bmRsZQogICAgICAtIGV4ZWMKICAgICAgLSBzaWRla2lxCiAgICAgIC0gJy1DJwogICAgICAtIGNvbmZpZy9zaWRla2lxLnltbAogICAgdm9sdW1lczoKICAgICAgLSAncmFpbHMtZGF0YTovYXBwL3N0b3JhZ2UnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gImJ1bmRsZSBleGVjIHJhaWxzIHJ1bm5lciAncHV0cyBTaWRla2lxLnJlZGlzKCY6aW5mbyknID4gL2Rldi9udWxsIDI+JjEiCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncGd2ZWN0b3IvcGd2ZWN0b3I6cGcxMicKICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotY2hhdHdvb3R9JwogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJFNFUlZJQ0VfVVNFUl9QT1NUR1JFUyAtZCBjaGF0d29vdCAtaCAxMjcuMC4wLjEnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDUKICByZWRpczoKICAgIGltYWdlOiAncmVkaXM6YWxwaW5lJwogICAgcmVzdGFydDogYWx3YXlzCiAgICBjb21tYW5kOgogICAgICAtIHNoCiAgICAgIC0gJy1jJwogICAgICAtICdyZWRpcy1zZXJ2ZXIgLS1yZXF1aXJlcGFzcyAiJFNFUlZJQ0VfUEFTU1dPUkRfUkVESVMiJwogICAgdm9sdW1lczoKICAgICAgLSAncmVkaXMtZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSByZWRpcy1jbGkKICAgICAgICAtICctYScKICAgICAgICAtICRTRVJWSUNFX1BBU1NXT1JEX1JFRElTCiAgICAgICAgLSBQSU5HCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDUK", "tags": [ "chatwoot", "chat", @@ -625,7 +625,7 @@ "diun": { "documentation": "https://crazymax.dev/diun/?utm_source=coolify.io", "slogan": "Docker Image Update Notifier is a CLI application to receive notifications when a Docker image is updated on a Docker registry.", - "compose": "c2VydmljZXM6CiAgZGl1bjoKICAgIGltYWdlOiAnY3JhenltYXgvZGl1bjpsYXRlc3QnCiAgICBjb21tYW5kOiBzZXJ2ZQogICAgdm9sdW1lczoKICAgICAgLSAnZGl1bl9kYXRhOi9kYXRhJwogICAgICAtICcvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29jaycKICAgIGVudmlyb25tZW50OgogICAgICAtICdUWj0ke1RJTUVfWk9ORTotRXVyb3BlL1ZpZW5uYX0nCiAgICAgIC0gJ0xPR19MRVZFTD0ke0xPR19MRVZFTDotaW5mb30nCiAgICAgIC0gJ0xPR19KU09OPSR7TE9HX0pTT046LWZhbHNlfScKICAgICAgLSAnRElVTl9XQVRDSF9XT1JLRVJTPSR7RElVTl9XQVRDSF9XT1JLRVJTOi0yMH0nCiAgICAgIC0gJ0RJVU5fV0FUQ0hfU0NIRURVTEU9JHtDUk9OX1dBVENIX1NDSEVEVUxFOi0gKiAqLzYgKiAqICp9JwogICAgICAtICdESVVOX1dBVENIX0pJVFRFUj0ke0RJVU5fV0FUQ0hfSklUVEVSOi0zMHN9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVI9JHtESVVOX1BST1ZJREVSU19ET0NLRVI6LXRydWV9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ9JHtESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ6LXRydWV9JwogICAgICAtICdESVVOX05PVElGX1NMQUNLX1dFQkhPT0tVUkw9JHtTRVJWSUNFX1dFQkhPT0tfVVJMX1NMQUNLfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkaXVuCiAgICAgICAgLSAnLS12ZXJzaW9uJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDMK", + "compose": "c2VydmljZXM6CiAgZGl1bjoKICAgIGltYWdlOiAnY3JhenltYXgvZGl1bjpsYXRlc3QnCiAgICBjb21tYW5kOiBzZXJ2ZQogICAgdm9sdW1lczoKICAgICAgLSAnZGl1bl9kYXRhOi9kYXRhJwogICAgICAtICcvdmFyL3J1bi9kb2NrZXIuc29jazovdmFyL3J1bi9kb2NrZXIuc29jaycKICAgIGVudmlyb25tZW50OgogICAgICAtICdUWj0ke1RJTUVfWk9ORTotRXVyb3BlL1ZpZW5uYX0nCiAgICAgIC0gJ0xPR19MRVZFTD0ke0xPR19MRVZFTDotaW5mb30nCiAgICAgIC0gJ0xPR19KU09OPSR7TE9HX0pTT046LWZhbHNlfScKICAgICAgLSAnRElVTl9XQVRDSF9XT1JLRVJTPSR7RElVTl9XQVRDSF9XT1JLRVJTOi0yMH0nCiAgICAgIC0gJ0RJVU5fV0FUQ0hfU0NIRURVTEU9JHtESVVOX1dBVENIX1NDSEVEVUxFOi0gKiAqLzYgKiAqICp9JwogICAgICAtICdESVVOX1dBVENIX0pJVFRFUj0ke0RJVU5fV0FUQ0hfSklUVEVSOi0zMHN9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVI9JHtESVVOX1BST1ZJREVSU19ET0NLRVI6LXRydWV9JwogICAgICAtICdESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ9JHtESVVOX1BST1ZJREVSU19ET0NLRVJfV0FUQ0hCWURFRkFVTFQ6LXRydWV9JwogICAgICAtICdESVVOX05PVElGX1NMQUNLX1dFQkhPT0tVUkw9JHtTRVJWSUNFX1dFQkhPT0tfVVJMX1NMQUNLfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBkaXVuCiAgICAgICAgLSAnLS12ZXJzaW9uJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDMK", "tags": [ "docker", "notifier", @@ -1984,7 +1984,7 @@ "memos": { "documentation": "https://github.com/usememos/memos?utm_source=coolify.io", "slogan": "An open-source, lightweight note-taking solution. The pain-less way to create your meaningful notes. Your Notes, Your Way.", - "compose": "c2VydmljZXM6CiAgd2ctZWFzeToKICAgIGltYWdlOiAnbmVvc21lbW8vbWVtb3M6c3RhYmxlJwogICAgdm9sdW1lczoKICAgICAgLSAnbWVtb3MvOi92YXIvb3B0L21lbW9zJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX01FTU9TXzUyMzAK", + "compose": "c2VydmljZXM6CiAgbWVtb3M6CiAgICBpbWFnZTogJ25lb3NtZW1vL21lbW9zOnN0YWJsZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ21lbW9zLzovdmFyL29wdC9tZW1vcycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NRU1PU181MjMwCg==", "tags": [ "note-taking", "microblog", @@ -2535,7 +2535,7 @@ "paymenter": { "documentation": "https://paymenter.org/docs/guides/docker?utm_source=coolify.io", "slogan": "Open-Source Billing, Built for Hosting", - "compose": "c2VydmljZXM6CiAgcGF5bWVudGVyOgogICAgaW1hZ2U6ICdnaGNyLmlvL3BheW1lbnRlci9wYXltZW50ZXI6bGF0ZXN0JwogICAgdm9sdW1lczoKICAgICAgLSAnYXBwX2xvZ3M6L2FwcC9zdG9yYWdlL2xvZ3MnCiAgICAgIC0gJ2FwcF9wdWJsaWM6L2FwcC9zdG9yYWdlL3B1YmxpYycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnY3VybCAtc2YgaHR0cDovL2xvY2FsaG9zdDo4MCB8fCBleGl0IDEnCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMXMKICAgICAgcmV0cmllczogMwogICAgZW52aXJvbm1lbnQ6CiAgICAgIFNFUlZJQ0VfRlFETl9QQVlNRU5URVI6ICcke1NFUlZJQ0VfRlFETl9QQVlNRU5URVJfODB9JwogICAgICBEQl9EQVRBQkFTRTogJyR7TVlTUUxfREFUQUJBU0U6LXBheW1lbnRlci1kYn0nCiAgICAgIERCX1BBU1NXT1JEOiAnJHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgICAgREJfVVNFUk5BTUU6ICcke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIEFQUF9FTlY6IHByb2R1Y3Rpb24KICAgICAgQ0FDSEVfU1RPUkU6IHJlZGlzCiAgICAgIFNFU1NJT05fRFJJVkVSOiByZWRpcwogICAgICBRVUVVRV9DT05ORUNUSU9OOiByZWRpcwogICAgICBSRURJU19IT1NUOiByZWRpcwogICAgICBSRURJU19VU0VSTkFNRTogZGVmYXVsdAogICAgICBSRURJU19QQVNTV09SRDogJyR7U0VSVklDRV9QQVNTV09SRF82NF9SRURJU30nCiAgICAgIERCX0NPTk5FQ1RJT046IG1hcmlhZGIKICAgICAgREJfSE9TVDogbWFyaWFkYgogICAgICBEQl9QT1JUOiAnMzMwNicKICAgICAgQVBQX0tFWTogJyR7U0VSVklDRV9CQVNFNjRfS0VZfScKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjExJwogICAgdm9sdW1lczoKICAgICAgLSAncGF5bWVudGVyX21hcmlhZGJfZGF0YTovdmFyL2xpYi9teXNxbCcKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTFJPT1R9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1wYXltZW50ZXItZGJ9JwogICAgICAtICdNWVNRTF9VU0VSPSR7U0VSVklDRV9VU0VSX01ZU1FMfScKICAgICAgLSAnTVlTUUxfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczphbHBpbmUnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3JlZGlzLWNsaSBwaW5nIHx8IGV4aXQgMScKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAxcwogICAgICByZXRyaWVzOiAzCg==", + "compose": "c2VydmljZXM6CiAgcGF5bWVudGVyOgogICAgaW1hZ2U6ICdnaGNyLmlvL3BheW1lbnRlci9wYXltZW50ZXI6bGF0ZXN0JwogICAgdm9sdW1lczoKICAgICAgLSAnYXBwX2xvZ3M6L2FwcC9zdG9yYWdlL2xvZ3MnCiAgICAgIC0gJ2FwcF9wdWJsaWM6L2FwcC9zdG9yYWdlL3B1YmxpYycKICAgIGVudmlyb25tZW50OgogICAgICBTRVJWSUNFX0ZRRE5fUEFZTUVOVEVSOiAnJHtTRVJWSUNFX0ZRRE5fUEFZTUVOVEVSXzgwfScKICAgICAgREJfREFUQUJBU0U6ICcke01ZU1FMX0RBVEFCQVNFOi1wYXltZW50ZXItZGJ9JwogICAgICBEQl9QQVNTV09SRDogJyR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICAgIERCX1VTRVJOQU1FOiAnJHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICBBUFBfRU5WOiBwcm9kdWN0aW9uCiAgICAgIENBQ0hFX1NUT1JFOiByZWRpcwogICAgICBTRVNTSU9OX0RSSVZFUjogcmVkaXMKICAgICAgUVVFVUVfQ09OTkVDVElPTjogcmVkaXMKICAgICAgUkVESVNfSE9TVDogcmVkaXMKICAgICAgUkVESVNfVVNFUk5BTUU6IGRlZmF1bHQKICAgICAgUkVESVNfUEFTU1dPUkQ6ICcke1NFUlZJQ0VfUEFTU1dPUkRfNjRfUkVESVN9JwogICAgICBEQl9DT05ORUNUSU9OOiBtYXJpYWRiCiAgICAgIERCX0hPU1Q6IG1hcmlhZGIKICAgICAgREJfUE9SVDogMzMwNgogICAgICBBUFBfS0VZOiAnJHtTRVJWSUNFX0JBU0U2NF9LRVl9JwogICAgZGVwZW5kc19vbjoKICAgICAgbWFyaWFkYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdjdXJsIC1zZiBodHRwOi8vbG9jYWxob3N0OjgwIHx8IGV4aXQgMScKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAxcwogICAgICByZXRyaWVzOiAzCiAgbWFyaWFkYjoKICAgIGltYWdlOiAnbWFyaWFkYjoxMScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3BheW1lbnRlcl9tYXJpYWRiX2RhdGE6L3Zhci9saWIvbXlzcWwnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgICAgLSAnTVlTUUxfREFUQUJBU0U9JHtNWVNRTF9EQVRBQkFTRTotcGF5bWVudGVyLWRifScKICAgICAgLSAnTVlTUUxfVVNFUj0ke1NFUlZJQ0VfVVNFUl9NWVNRTH0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NWVNRTH0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gaGVhbHRoY2hlY2suc2gKICAgICAgICAtICctLWNvbm5lY3QnCiAgICAgICAgLSAnLS1pbm5vZGJfaW5pdGlhbGl6ZWQnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICByZWRpczoKICAgIGltYWdlOiAncmVkaXM6YWxwaW5lJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdyZWRpcy1jbGkgcGluZyB8fCBleGl0IDEnCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogMXMKICAgICAgcmV0cmllczogMwo=", "tags": [ "automation", "billing", @@ -2561,6 +2561,19 @@ "minversion": "0.0.0", "port": "8080" }, + "pgbackweb": { + "documentation": "https://github.com/eduardolat/pgbackweb?utm_source=coolify.io", + "slogan": "Effortless PostgreSQL backups with a user-friendly web interface!", + "compose": "c2VydmljZXM6CiAgcGdiYWNrd2ViOgogICAgaW1hZ2U6ICdlZHVhcmRvbGF0L3BnYmFja3dlYjpsYXRlc3QnCiAgICB2b2x1bWVzOgogICAgICAtICdwZ2JhY2t3ZWJfYmFja3VwczovYmFja3VwcycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9QR0JBQ0tXRUJfODA4NQogICAgICAtICdQQldfRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X1BHQkFDS1dFQn0nCiAgICAgIC0gJ1BCV19QT1NUR1JFU19DT05OX1NUUklORz1wb3N0Z3Jlc3FsOi8vJHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9OiR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU31AcG9zdGdyZXM6NTQzMi8ke1BPU1RHUkVTX0RCOi1wZ2JhY2t3ZWItZGJ9P3NzbG1vZGU9ZGlzYWJsZScKICAgICAgLSAnVFo9JHtUSU1FX1pPTkU6LVVUQ30nCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE3JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1wZ2JhY2t3ZWItZGJ9JwogICAgdm9sdW1lczoKICAgICAgLSAncGdiYWNrd2ViX3Bvc3RncmVzX2RhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfSAtZCBwZ2JhY2t3ZWInCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiA1Cg==", + "tags": [ + "backup", + "postgresql", + "web-interface" + ], + "logo": "svgs/pgbackweb.svg", + "minversion": "0.0.0", + "port": "8085" + }, "phpmyadmin": { "documentation": "https://phpmyadmin.net?utm_source=coolify.io", "slogan": "phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface.", @@ -2931,7 +2944,7 @@ "snapdrop": { "documentation": "https://github.com/RobinLinus/snapdrop?utm_source=coolify.io", "slogan": "A self-hosted file-sharing service for secure and convenient file transfers, whether on a local network or the internet.", - "compose": "c2VydmljZXM6CiAgc25hcGRyb3A6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvc25hcGRyb3A6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1NOQVBEUk9QCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnc25hcGRyb3AtY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", + "compose": "c2VydmljZXM6CiAgc25hcGRyb3A6CiAgICBpbWFnZTogJ2xpbnV4c2VydmVyL3NuYXBkcm9wOnZlcnNpb24tYjhiNzhjYzInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fU05BUERST1AKICAgICAgLSBQVUlEPTEwMDAKICAgICAgLSBQR0lEPTEwMDAKICAgICAgLSBUWj1FdXJvcGUvTWFkcmlkCiAgICB2b2x1bWVzOgogICAgICAtICdzbmFwZHJvcC1jb25maWc6L2NvbmZpZycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "file", "sharing", @@ -3183,7 +3196,7 @@ "typesense": { "documentation": "https://typesense.org/docs?utm_source=coolify.io", "slogan": "Cutting-edge, in-memory search engine for mere mortals. Knowledge of rocket science optional.", - "compose": "c2VydmljZXM6CiAgdHlwZXNlbnNlOgogICAgaW1hZ2U6ICd0eXBlc2Vuc2UvdHlwZXNlbnNlOjI4LjAnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVFlQRVNFTlNFXzgxMDgKICAgICAgLSAnVFlQRVNFTlNFX0VOQUJMRV9DT1JTPSR7VFlQRVNFTlNFX0VOQUJMRV9DT1JTOi10cnVlfScKICAgICAgLSBUWVBFU0VOU0VfREFUQV9ESVI9L2RhdGEKICAgICAgLSAnVFlQRVNFTlNFX0FQSV9LRVk9JHtUWVBFU0VOU0VfQVBJX0tFWToteHl6fScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3R5cGVzZW5zZV9kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGJhc2gKICAgICAgICAtICctYycKICAgICAgICAtICdleGVjIDM8Pi9kZXYvdGNwL2xvY2FsaG9zdC84MTA4ICYmIHByaW50ZiAnJ0dFVCAvaGVhbHRoIEhUVFAvMS4xXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4nJyA+JjMgJiYgaGVhZCAtbjEgPCYzIHwgZ3JlcCAnJzIwMCcnICYmIGV4ZWMgMz4mLScKICAgICAgcmV0cmllczogNQogICAgICB0aW1lb3V0OiA3cwo=", + "compose": "c2VydmljZXM6CiAgdHlwZXNlbnNlOgogICAgaW1hZ2U6ICd0eXBlc2Vuc2UvdHlwZXNlbnNlOjI4LjAnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fVFlQRVNFTlNFXzgxMDgKICAgICAgLSAnVFlQRVNFTlNFX0VOQUJMRV9DT1JTPSR7VFlQRVNFTlNFX0VOQUJMRV9DT1JTOi10cnVlfScKICAgICAgLSBUWVBFU0VOU0VfREFUQV9ESVI9L2RhdGEKICAgICAgLSAnVFlQRVNFTlNFX0FQSV9LRVk9JHtUWVBFU0VOU0VfQVBJX0tFWX0nCiAgICB2b2x1bWVzOgogICAgICAtICd0eXBlc2Vuc2VfZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBiYXNoCiAgICAgICAgLSAnLWMnCiAgICAgICAgLSAnZXhlYyAzPD4vZGV2L3RjcC9sb2NhbGhvc3QvODEwOCAmJiBwcmludGYgJydHRVQgL2hlYWx0aCBIVFRQLzEuMVxyXG5Db25uZWN0aW9uOiBjbG9zZVxyXG5cclxuJycgPiYzICYmIGhlYWQgLW4xIDwmMyB8IGdyZXAgJycyMDAnJyAmJiBleGVjIDM+Ji0nCiAgICAgIHJldHJpZXM6IDUKICAgICAgdGltZW91dDogN3MK", "tags": [ "search", "search-engine", @@ -3565,6 +3578,48 @@ "logo": "svgs/wordpress.svg", "minversion": "0.0.0" }, + "yamtrack-with-postgresql": { + "documentation": "https://github.com/FuzzyGrim/Yamtrack/wiki?utm_source=coolify.io", + "slogan": "Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books.", + "compose": "c2VydmljZXM6CiAgeWFtdHJhY2s6CiAgICBpbWFnZTogZ2hjci5pby9mdXp6eWdyaW0veWFtdHJhY2sKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9ZQU1UUkFDS184MDAwCiAgICAgIC0gJ1VSTFM9JHtTRVJWSUNFX0ZRRE5fWUFNVFJBQ0t9JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnU0VDUkVUPSR7U0VSVklDRV9QQVNTV09SRF9TRUNSRVR9JwogICAgICAtICdSRUdJU1RSQVRJT049JHtSRUdJU1RSQVRJT05fRU5BQkxFRDotdHJ1ZX0nCiAgICAgIC0gJ1JFRElTX1VSTD1yZWRpczovL3JlZGlzOjYzNzknCiAgICAgIC0gREJfSE9TVD1wb3N0Z3JlcwogICAgICAtICdEQl9OQU1FPSR7UE9TVEdSRVNRTF9EQVRBQkFTRToteWFtdHJhY2stZGJ9JwogICAgICAtICdEQl9VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTUUx9JwogICAgICAtICdEQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gREJfUE9SVD01NDMyCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHdnZXQKICAgICAgICAtICctLW5vLXZlcmJvc2UnCiAgICAgICAgLSAnLS10cmllcz0xJwogICAgICAgIC0gJy0tc3BpZGVyJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9oZWFsdGgvJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNRTF9EQVRBQkFTRToteWFtdHJhY2stZGJ9JwogICAgdm9sdW1lczoKICAgICAgLSAneWFtdHJhY2tfcG9zdGdyZXNfZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjctYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAneWFtdHJhY2tfcmVkaXNfZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSByZWRpcy1jbGkKICAgICAgICAtIHBpbmcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "tags": [ + "self-hosted", + "automation", + "tracker", + "media", + "movies", + "shows", + "anime", + "manga", + "games", + "books", + "comics" + ], + "logo": "svgs/yamtrack.svg", + "minversion": "0.0.0", + "port": "8000" + }, + "yamtrack": { + "documentation": "https://github.com/FuzzyGrim/Yamtrack/wiki?utm_source=coolify.io", + "slogan": "Yamtrack is a self hosted media tracker for movies, tv shows, anime, manga, video games and books.", + "compose": "c2VydmljZXM6CiAgeWFtdHJhY2s6CiAgICBpbWFnZTogZ2hjci5pby9mdXp6eWdyaW0veWFtdHJhY2sKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9ZQU1UUkFDS184MDAwCiAgICAgIC0gJ1VSTFM9JHtTRVJWSUNFX0ZRRE5fWUFNVFJBQ0t9JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnU0VDUkVUPSR7U0VSVklDRV9QQVNTV09SRF9TRUNSRVR9JwogICAgICAtICdSRUdJU1RSQVRJT049JHtSRUdJU1RSQVRJT05fRU5BQkxFRDotdHJ1ZX0nCiAgICAgIC0gJ1JFRElTX1VSTD1yZWRpczovL3JlZGlzOjYzNzknCiAgICB2b2x1bWVzOgogICAgICAtICd5YW10cmFja19kYXRhOi95YW10cmFjay9kYicKICAgIGRlcGVuZHNfb246CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLS1xdWlldCAtLXRyaWVzPTEgLS1zcGlkZXIgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2hlYWx0aC8gfHwgZXhpdCAxJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjctYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAneWFtdHJhY2tfcmVkaXNfZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSByZWRpcy1jbGkKICAgICAgICAtIHBpbmcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "tags": [ + "self-hosted", + "automation", + "tracker", + "media", + "movies", + "shows", + "anime", + "manga", + "games", + "books", + "comics" + ], + "logo": "svgs/yamtrack.svg", + "minversion": "0.0.0", + "port": "8000" + }, "zipline": { "documentation": "https://github.com/diced/zipline?utm_source=coolify.io", "slogan": "A ShareX/file upload server that is easy to use, packed with features, and with an easy setup!", From 2ef71d91147dafe9a03d2eacb9ca938612f99386 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 22:47:33 +0200 Subject: [PATCH 054/229] fix(css): 8+ issue with new tailwind v4 --- resources/css/utilities.css | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 0735e35e2..edfe98c76 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -11,7 +11,7 @@ } @utility input-sticky { - @apply block py-1.5 w-full text-sm text-black rounded-sm border-0 ring-1 ring-inset dark:bg-coolgray-100 dark:text-white ring-neutral-200 dark:ring-coolgray-300 focus:ring-2 dark:focus:ring-coolgray-300 focus:ring-neutral-400; + @apply block py-1.5 w-full text-sm text-black rounded-sm border-0 ring-1 ring-inset dark:bg-coolgray-100 dark:text-white ring-neutral-200 dark:ring-coolgray-300 focus:ring-2 focus:ring-neutral-400 dark:focus:ring-coolgray-300; } @utility input-sticky-active { @@ -20,12 +20,12 @@ /* Focus */ @utility input-focus { - @apply focus:ring-2 dark:focus:ring-coolgray-300 focus:ring-neutral-400; + @apply focus:ring-2 focus:ring-neutral-400 dark:focus:ring-coolgray-300; } /* input, select before */ @utility input-select { - @apply block py-1.5 w-full text-sm text-black rounded-sm border-0 ring-1 ring-inset dark:bg-coolgray-100 dark:text-white ring-neutral-200 dark:ring-coolgray-300 dark:disabled:bg-coolgray-100/40 dark:disabled:ring-transparent disabled:bg-neutral-200 disabled:text-neutral-500; + @apply block py-1.5 w-full text-sm text-black rounded-sm border-0 ring-1 ring-inset dark:bg-coolgray-100 dark:text-white ring-neutral-200 dark:ring-coolgray-300 disabled:bg-neutral-200 disabled:text-neutral-500 dark:disabled:bg-coolgray-100/40 dark:disabled:ring-transparent; } /* Readonly */ @@ -62,11 +62,11 @@ } @utility dropdown-item { - @apply flex relative gap-2 justify-start items-center py-1 pr-4 pl-2 w-full text-xs transition-colors cursor-pointer select-none dark:text-white hover:bg-neutral-100 dark:hover:bg-coollabs outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50; + @apply flex relative gap-2 justify-start items-center py-1 pr-4 pl-2 w-full text-xs transition-colors cursor-pointer select-none dark:text-white hover:bg-neutral-100 dark:hover:bg-coollabs outline-none data-disabled:pointer-events-none data-disabled:opacity-50; } @utility dropdown-item-no-padding { - @apply flex relative gap-2 justify-start items-center py-1 w-full text-xs transition-colors cursor-pointer select-none dark:text-white hover:bg-neutral-100 dark:hover:bg-coollabs outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50; + @apply flex relative gap-2 justify-start items-center py-1 w-full text-xs transition-colors cursor-pointer select-none dark:text-white hover:bg-neutral-100 dark:hover:bg-coollabs outline-none data-disabled:pointer-events-none data-disabled:opacity-50; } @utility badge { @@ -110,7 +110,7 @@ } @utility scrollbar { - @apply scrollbar-thumb-coollabs-100 dark:scrollbar-track-coolgray-200 scrollbar-track-neutral-200 scrollbar-thin; + @apply scrollbar-thumb-coollabs-100 scrollbar-track-neutral-200 dark:scrollbar-track-coolgray-200 scrollbar-thin; } @utility main { @@ -166,7 +166,7 @@ } @utility bg-coollabs-gradient { - @apply text-transparent text-white from-purple-500 via-pink-500 to-red-500 bg-linear-to-r; + @apply bg-gradient-to-r from-purple-500 via-pink-500 to-red-500 bg-clip-text text-transparent; } @utility text-helper { @@ -198,7 +198,7 @@ } @utility toast { - @apply z-1; + @apply z-[1]; } @utility dz-button { From 9331ccaf3eafc3c53b6ab6ab59a14bac0b6c1173 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 23:01:28 +0200 Subject: [PATCH 055/229] fix(css): `bg-coollabs-gradient` not working anymore --- resources/css/utilities.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/css/utilities.css b/resources/css/utilities.css index edfe98c76..4993b2302 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -166,7 +166,7 @@ } @utility bg-coollabs-gradient { - @apply bg-gradient-to-r from-purple-500 via-pink-500 to-red-500 bg-clip-text text-transparent; + @apply from-purple-500 via-pink-500 to-red-500 bg-linear-to-r; } @utility text-helper { From 79e620eac5ec9b7ca2684490946b64e08cdb7b09 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 19 May 2025 23:35:17 +0200 Subject: [PATCH 056/229] fix(ui): add back missing service navbar components --- app/Livewire/Project/Service/Navbar.php | 154 +++++++++++++++ .../livewire/project/service/navbar.blade.php | 182 ++++++++++++++++++ 2 files changed, 336 insertions(+) create mode 100644 app/Livewire/Project/Service/Navbar.php create mode 100644 resources/views/livewire/project/service/navbar.blade.php diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php new file mode 100644 index 000000000..5da425cbd --- /dev/null +++ b/app/Livewire/Project/Service/Navbar.php @@ -0,0 +1,154 @@ +service->status)->contains('running') && is_null($this->service->config_hash)) { + $this->service->isConfigurationChanged(true); + $this->dispatch('configurationChanged'); + } + } + + public function getListeners() + { + $userId = Auth::id(); + + return [ + "echo-private:user.{$userId},ServiceStatusChanged" => 'serviceStarted', + 'envsUpdated' => '$refresh', + 'refreshStatus' => '$refresh', + ]; + } + + public function serviceStarted() + { + // $this->dispatch('success', 'Service status changed.'); + if (is_null($this->service->config_hash) || $this->service->isConfigurationChanged()) { + $this->service->isConfigurationChanged(true); + $this->dispatch('configurationChanged'); + } else { + $this->dispatch('configurationChanged'); + } + } + + public function check_status_without_notification() + { + $this->dispatch('check_status'); + } + + public function check_status() + { + $this->dispatch('check_status'); + $this->dispatch('success', 'Service status updated.'); + } + + public function checkDeployments() + { + try { + $activity = Activity::where('properties->type_uuid', $this->service->uuid)->latest()->first(); + $status = data_get($activity, 'properties.status'); + if ($status === ProcessStatus::QUEUED->value || $status === ProcessStatus::IN_PROGRESS->value) { + $this->isDeploymentProgress = true; + } else { + $this->isDeploymentProgress = false; + } + } catch (\Throwable) { + $this->isDeploymentProgress = false; + } + + return $this->isDeploymentProgress; + } + + public function start() + { + $activity = StartService::run($this->service, pullLatestImages: true); + $this->dispatch('activityMonitor', $activity->id); + } + + public function forceDeploy() + { + try { + $activities = Activity::where('properties->type_uuid', $this->service->uuid)->where('properties->status', ProcessStatus::IN_PROGRESS->value)->orWhere('properties->status', ProcessStatus::QUEUED->value)->get(); + foreach ($activities as $activity) { + $activity->properties->status = ProcessStatus::ERROR->value; + $activity->save(); + } + $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); + $this->dispatch('activityMonitor', $activity->id); + } catch (\Exception $e) { + $this->dispatch('error', $e->getMessage()); + } + } + + public function stop($cleanupContainers = false) + { + try { + StopService::run($this->service, false, $this->docker_cleanup); + ServiceStatusChanged::dispatch(); + if ($cleanupContainers) { + $this->dispatch('success', 'Containers cleaned up.'); + } else { + $this->dispatch('success', 'Service stopped.'); + } + } catch (\Exception $e) { + $this->dispatch('error', $e->getMessage()); + } + } + + public function restart() + { + $this->checkDeployments(); + if ($this->isDeploymentProgress) { + $this->dispatch('error', 'There is a deployment in progress.'); + + return; + } + $activity = StartService::run($this->service, stopBeforeStart: true); + $this->dispatch('activityMonitor', $activity->id); + } + + public function pullAndRestartEvent() + { + $this->checkDeployments(); + if ($this->isDeploymentProgress) { + $this->dispatch('error', 'There is a deployment in progress.'); + + return; + } + $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); + $this->dispatch('activityMonitor', $activity->id); + } + + public function render() + { + return view('livewire.project.service.navbar', [ + 'checkboxes' => [ + ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], + ], + ]); + } +} diff --git a/resources/views/livewire/project/service/navbar.blade.php b/resources/views/livewire/project/service/navbar.blade.php new file mode 100644 index 000000000..dd2ce4142 --- /dev/null +++ b/resources/views/livewire/project/service/navbar.blade.php @@ -0,0 +1,182 @@ +
+ + + Service Startup + + + + +

{{ $title }}

+ +
+ @script + + @endscript +
From 9651195318ffbfefebb4a07dfdaf53b1a19dd0ad Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 11:07:55 +0200 Subject: [PATCH 057/229] Update app/Livewire/Server/Security/Patches.php Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- app/Livewire/Server/Security/Patches.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/Livewire/Server/Security/Patches.php b/app/Livewire/Server/Security/Patches.php index 183055813..9392fc351 100644 --- a/app/Livewire/Server/Security/Patches.php +++ b/app/Livewire/Server/Security/Patches.php @@ -67,8 +67,18 @@ class Patches extends Component public function updateAllPackages() { + if (! $this->packageManager || ! $this->osId) { + $this->dispatch('error', message: 'Run “Check for updates” first.'); + return; + } + try { - $activity = UpdatePackage::run(server: $this->server, packageManager: $this->packageManager, osId: $this->osId, all: true); + $activity = UpdatePackage::run( + server: $this->server, + packageManager: $this->packageManager, + osId: $this->osId, + all: true + ); $this->dispatch('activityMonitor', $activity->id, ServerPackageUpdated::class); } catch (\Exception $e) { $this->dispatch('error', message: $e->getMessage()); From 2424bd408b7c58a6f5599fe8ab1ca9e5fac3627e Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 11:15:07 +0200 Subject: [PATCH 058/229] Update app/Livewire/Project/Service/Heading.php Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- app/Livewire/Project/Service/Heading.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Livewire/Project/Service/Heading.php b/app/Livewire/Project/Service/Heading.php index 96e94ce92..f88f62e9c 100644 --- a/app/Livewire/Project/Service/Heading.php +++ b/app/Livewire/Project/Service/Heading.php @@ -102,7 +102,11 @@ class Heading extends Component public function forceDeploy() { try { - $activities = Activity::where('properties->type_uuid', $this->service->uuid)->where('properties->status', ProcessStatus::IN_PROGRESS->value)->orWhere('properties->status', ProcessStatus::QUEUED->value)->get(); + $activities = Activity::where('properties->type_uuid', $this->service->uuid) + ->where(function ($q) { + $q->where('properties->status', ProcessStatus::IN_PROGRESS->value) + ->orWhere('properties->status', ProcessStatus::QUEUED->value); + })->get(); foreach ($activities as $activity) { $activity->properties->status = ProcessStatus::ERROR->value; $activity->save(); From 35b08453e1e8393eafdff881f4ff4ad1946ab6ee Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 10:30:31 +0200 Subject: [PATCH 059/229] refactor(service): consolidate configuration change dispatch logic and remove unused navbar component --- app/Livewire/Project/Service/Heading.php | 4 +- app/Livewire/Project/Service/Navbar.php | 154 --------------- .../livewire/project/service/navbar.blade.php | 182 ------------------ .../livewire/project/shared/logs.blade.php | 2 +- 4 files changed, 2 insertions(+), 340 deletions(-) delete mode 100644 app/Livewire/Project/Service/Navbar.php delete mode 100644 resources/views/livewire/project/service/navbar.blade.php diff --git a/app/Livewire/Project/Service/Heading.php b/app/Livewire/Project/Service/Heading.php index f88f62e9c..0587a1ebc 100644 --- a/app/Livewire/Project/Service/Heading.php +++ b/app/Livewire/Project/Service/Heading.php @@ -64,10 +64,8 @@ class Heading extends Component }); if (is_null($this->service->config_hash) || $this->service->isConfigurationChanged()) { $this->service->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } else { - $this->dispatch('configurationChanged'); } + $this->dispatch('configurationChanged'); } catch (\Exception $e) { return handleError($e, $this); } finally { diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php deleted file mode 100644 index 5da425cbd..000000000 --- a/app/Livewire/Project/Service/Navbar.php +++ /dev/null @@ -1,154 +0,0 @@ -service->status)->contains('running') && is_null($this->service->config_hash)) { - $this->service->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } - } - - public function getListeners() - { - $userId = Auth::id(); - - return [ - "echo-private:user.{$userId},ServiceStatusChanged" => 'serviceStarted', - 'envsUpdated' => '$refresh', - 'refreshStatus' => '$refresh', - ]; - } - - public function serviceStarted() - { - // $this->dispatch('success', 'Service status changed.'); - if (is_null($this->service->config_hash) || $this->service->isConfigurationChanged()) { - $this->service->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } else { - $this->dispatch('configurationChanged'); - } - } - - public function check_status_without_notification() - { - $this->dispatch('check_status'); - } - - public function check_status() - { - $this->dispatch('check_status'); - $this->dispatch('success', 'Service status updated.'); - } - - public function checkDeployments() - { - try { - $activity = Activity::where('properties->type_uuid', $this->service->uuid)->latest()->first(); - $status = data_get($activity, 'properties.status'); - if ($status === ProcessStatus::QUEUED->value || $status === ProcessStatus::IN_PROGRESS->value) { - $this->isDeploymentProgress = true; - } else { - $this->isDeploymentProgress = false; - } - } catch (\Throwable) { - $this->isDeploymentProgress = false; - } - - return $this->isDeploymentProgress; - } - - public function start() - { - $activity = StartService::run($this->service, pullLatestImages: true); - $this->dispatch('activityMonitor', $activity->id); - } - - public function forceDeploy() - { - try { - $activities = Activity::where('properties->type_uuid', $this->service->uuid)->where('properties->status', ProcessStatus::IN_PROGRESS->value)->orWhere('properties->status', ProcessStatus::QUEUED->value)->get(); - foreach ($activities as $activity) { - $activity->properties->status = ProcessStatus::ERROR->value; - $activity->save(); - } - $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); - } catch (\Exception $e) { - $this->dispatch('error', $e->getMessage()); - } - } - - public function stop($cleanupContainers = false) - { - try { - StopService::run($this->service, false, $this->docker_cleanup); - ServiceStatusChanged::dispatch(); - if ($cleanupContainers) { - $this->dispatch('success', 'Containers cleaned up.'); - } else { - $this->dispatch('success', 'Service stopped.'); - } - } catch (\Exception $e) { - $this->dispatch('error', $e->getMessage()); - } - } - - public function restart() - { - $this->checkDeployments(); - if ($this->isDeploymentProgress) { - $this->dispatch('error', 'There is a deployment in progress.'); - - return; - } - $activity = StartService::run($this->service, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); - } - - public function pullAndRestartEvent() - { - $this->checkDeployments(); - if ($this->isDeploymentProgress) { - $this->dispatch('error', 'There is a deployment in progress.'); - - return; - } - $activity = StartService::run($this->service, pullLatestImages: true, stopBeforeStart: true); - $this->dispatch('activityMonitor', $activity->id); - } - - public function render() - { - return view('livewire.project.service.navbar', [ - 'checkboxes' => [ - ['id' => 'docker_cleanup', 'label' => __('resource.docker_cleanup')], - ], - ]); - } -} diff --git a/resources/views/livewire/project/service/navbar.blade.php b/resources/views/livewire/project/service/navbar.blade.php deleted file mode 100644 index dd2ce4142..000000000 --- a/resources/views/livewire/project/service/navbar.blade.php +++ /dev/null @@ -1,182 +0,0 @@ -
- - - Service Startup - - - - -

{{ $title }}

- - - @script - - @endscript -
diff --git a/resources/views/livewire/project/shared/logs.blade.php b/resources/views/livewire/project/shared/logs.blade.php index 199f755da..622269344 100644 --- a/resources/views/livewire/project/shared/logs.blade.php +++ b/resources/views/livewire/project/shared/logs.blade.php @@ -42,7 +42,7 @@ @endforelse
@elseif ($type === 'service') - +
Here you can see the logs of the service.
@forelse ($containers as $container) From 9c3817ee14f3bc33b163fe18c5626d091a4a7ac7 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 10:33:55 +0200 Subject: [PATCH 060/229] fix(deploy): update resource timestamp handling in deploy_resource method --- app/Http/Controllers/Api/DeployController.php | 7 ++++--- app/Livewire/Project/Database/Heading.php | 9 +++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Api/DeployController.php b/app/Http/Controllers/Api/DeployController.php index 46606e24a..5c7f20902 100644 --- a/app/Http/Controllers/Api/DeployController.php +++ b/app/Http/Controllers/Api/DeployController.php @@ -319,9 +319,10 @@ class DeployController extends Controller default: // Database resource StartDatabase::dispatch($resource); - $resource->update([ - 'started_at' => now(), - ]); + + $resource->started_at ??= now(); + $resource->save(); + $message = "Database {$resource->name} started."; break; } diff --git a/app/Livewire/Project/Database/Heading.php b/app/Livewire/Project/Database/Heading.php index 177bb549c..d5b65bf63 100644 --- a/app/Livewire/Project/Database/Heading.php +++ b/app/Livewire/Project/Database/Heading.php @@ -33,16 +33,13 @@ class Heading extends Component public function activityFinished() { try { - $this->database->update([ - 'started_at' => now(), - ]); + $this->database->started_at ??= now(); + $this->database->save(); if (is_null($this->database->config_hash) || $this->database->isConfigurationChanged()) { $this->database->isConfigurationChanged(true); - $this->dispatch('configurationChanged'); - } else { - $this->dispatch('configurationChanged'); } + $this->dispatch('configurationChanged'); } catch (\Exception $e) { return handleError($e, $this); } finally { From 64305b79921d3f875cb3111e2c6a3bb68369e258 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 10:54:15 +0200 Subject: [PATCH 061/229] refactor(sidebar): simplify server patching link by removing button element --- resources/views/components/server/sidebar-security.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/components/server/sidebar-security.blade.php b/resources/views/components/server/sidebar-security.blade.php index e89092179..6f6d9d8a0 100644 --- a/resources/views/components/server/sidebar-security.blade.php +++ b/resources/views/components/server/sidebar-security.blade.php @@ -1,6 +1,6 @@ From 0cd8f5628c53cfd13269d28ca10a820c45f57e33 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 20 May 2025 10:54:51 +0200 Subject: [PATCH 062/229] refactor(slide-over): streamline button element and improve code readability --- resources/views/components/slide-over.blade.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/resources/views/components/slide-over.blade.php b/resources/views/components/slide-over.blade.php index 74ce135b5..642598b5b 100644 --- a/resources/views/components/slide-over.blade.php +++ b/resources/views/components/slide-over.blade.php @@ -1,8 +1,7 @@ @props(['closeWithX' => false, 'fullScreen' => false])
+}" class="relative w-auto h-auto" {{ $attributes }}> {{ $slot }}