github coollabsio/coolify v4.0.0-beta.381

latest release: v4.0.0-beta.382
20 hours ago

Changes

  • feat/fix: Able to import full DB backups for PG/MySQL/MariaDB
  • feat: Ability to set the initial root user (instance admin user) of Coolify in the .env file via environment variables:
    • ROOT_USERNAME=
    • ROOT_USER_EMAIL=
    • ROOT_USER_PASSWORD=
  • feat: Registration is automatically disabled if you set up a root user via the .env file
  • feat: Logic, error handling, and clean log output for each scenario of setting a root user in the .env file
  • feat: Move Docker cleanup settings to their own tab
  • feat: Added Docker cleanup executions UI with very detailed cleanup log and message. This will help with debugging storage problems.
  • feat: Restore backup from server file
  • feat: Add Infomaniak OAuth
  • feat: Added a disk usage check frequency setting
  • feat: Log Horizon worker name to app deployment jobs.
  • feat: Add is_coolify_host to the server API responses.
  • feat: Some new labels on all containers:
    • coolify.resourceName, coolify.serviceName, coolify.projectName, coolify.environmentName
  • feat: New URL structure for better performance and fewer DB queries
  • feat: Docker volume data can optionally be cloned alongside the resource (so it is a true full clone of the resource, everything is exactly the same (except the name ofc)) --> Disabled it for now, see reasons: #4777 (comment).
  • feat: Backup Retention Options (whichever limit is reached first will trigger the cleanup):
    • Number of backups to keep -> A number of backups to keep
    • Days to keep backups -> A number of days to keep backups
    • Maximum storage (GB) -> A number of GB or decimal of maximum allowed storage for this backup job
  • feat: Configure commands for production
  • feat: Configure modals for better error handling
  • feat: Added Purify for better HTML sanitization
  • feat: Add backup retention days, backup amount, and max allowed storage to S3
  • feat: Add backup retention days and max allowed storage to locally stored backups
  • feat: When deleting a backup schedule, you can now select to delete all backups from S3 as well
  • feat: When deleting a single backup, you can now select to delete the backup from S3 as well
  • feat: New backup retention UI.
  • feat: Multi-delete on S3 and locally stored backups -> Now multiple backup files and backup executions are deleted together in parallel for improved performance and faster executions of deletion...
  • Security fix: After initial installation, the Registration page is exposed with the registration form. This is usually not an issue as one installs and registers within seconds/minutes after the URL becomes publicly accessible. However, if you leave the registration page too long without registering a user, a malicious actor can potentially register and compromise your system.
  • fix: Use finished_at instead of updated_at for the end time so that the time calculations are correct
  • fix: Set finished_at as immutable so it cannot be changed later
  • fix: Use wire:navigate whenever possible to make everything feel like a single-page application, and overall navigating Coolify now feels soooooo much smoother.
  • fix: Only call removeOldBackups function in the DatabaseBackupJob.php if the backup is completed and successful; this caused problems before
  • fix: Delete backup folder and parent folder if folders are empty when deleting local backups to clean up unused folders
  • fix: Do not remove executions from DB until both S3 and local backups have been deleted and successfully processed; otherwise, backups will never be deleted from S3.
  • fix: All routes now use /environment/{environment_uuid} instead of the environment name.

This helps because we can now use any character in environment names instead of being limited to URL-safe characters. Also, all other URLs are constructed with the uuid way, so we should do it consistently everywhere.

  • fix: Nixpacks predefined variables are now used as build-args and could be overwritten from the defined env variables in Coolify.
  • fix: Use local monaco-editor to remove reliance on Cloudflare CDN and improve performance (that's why we have +56K changed lines).
  • fix: Use local dropzonejs
  • fix: Always use Docker cleanup frequency no matter if threshold or force cleanup is enabled
  • fix: Disable copy button if the context is not secure (http)
  • fix: Cloning resource name + volume names
  • fix: When having multiple Postgres init scripts, saving a change to one init script would delete all other init scripts.
  • fix: Changing the file name of an existing init script would create a new init script instead of renaming the file.
  • fix: Deleting an init script does not remove it from the server.
  • fix: Remove custom-postgres.conf if input is empty or null as the file is not needed on the server anymore
  • fix: Some UI fixes
  • fix: API - Projects & Applications endpoints
  • fix: Modal closing logic
  • fix: Increase default PHP memory limit
  • fix: Penpot health checks
  • fix: NocoDB health check
  • fix: Supabase template
  • fix: Trigger with external DB
  • fix: Make DB public for Supabase
  • fix: CSRF bug for Label Studio
  • fix: Better cloud jobs handling
  • fix: Add lower timeout (ssh, docker) to jobs which are checking the servers, because it could cause problems if a high number of jobs are running.
  • fix: Instance-wide GitHub apps are not available on other teams other than the source team
  • fix: Undefined variable $fs_path error on file mounts for databases
  • fix: SQLSTATE[42703]: Undefined column: 7 ERROR: column "additional_servers_count" of relation "applications" does not exist
  • fix: Exclude computed count properties (additional_servers_count, additional_networks_count) loaded by global scope to prevent errors
  • fix: Remove auto-generated properties (id, created_at, and updated_at) from replicate as that caused issues
  • fix: Cloning a service to a separate server. To be able to clone a service to a new server, we need to set the server_id to the DB as well; otherwise, it will be cloned on the same server.
  • fix: Volume naming after cloning
  • fix: Project/environment-level cloning and also fixed resource-level cloning (same fixes described below for both)
  • fix: Application cloning:
    • fix: Disable auto-generation of URLs and labels if read-only labels is false.
    • fix: Labels were not auto-generated for CloneMe (project/environment-level cloning) if read-only labels is true; now they are generated again
    • fix: Some settings get lost when cloning Applications because we need to clone the row in the application_settings table as well
    • fix: Clone file and directory mounts
    • fix: Clone tags
    • fix: Clone scheduled tasks
    • fix: Clone preview deployment settings
  • fix: Databases cloning:
    • fix: Clone tags
    • fix: Clone volumes
    • fix: Clone file and directory mounts
    • fix: Clone backup schedules
  • fix: Services cloning:
    • fix: Clone environment variables
    • fix: Clone tags
    • fix: Clone scheduled task
    • fix: Clone volumes
    • fix: Clone file and directory mounts
    • fix: Clone backup schedules for service databases
  • fix: For read-only labels, a read-only Monaco editor is displayed
  • fix: Render HTML on 500 error pages correctly
  • fix: GitHub JWT token timing issue (more information about this issue here probot/probot#1426).
    • issuedAt -1min -> this is to avoid token not yet valid issues
    • expiresAt +8min -> this is to make sure the token is not valid longer than 10 min (to avoid the issue described in the linked issue) as tokens have to have a lifespan of less than 10min, this should help with time differences of less than about 1min (most cases) - as the total valid time is 9min (with the -1min) -> for any case of over 50s time out of sync (System vs GitHub API time) it will throw an error.
    • fix: Expiration time' claim ('exp') must be a numeric value
  • refactor: Dates and UI design of Backup executions, Scheduled Tasks executions, and Deployments executions tabs
    • redesigned the deployment executions tab
    • show full commit message with an expand button on the deployment executions tab
    • show only the first 7 characters of the commit hash, like on GitHub - makes the UI cleaner
    • move date transformation to a shared function
    • move duration calculation to a shared function
    • dates are now always displayed with their timezone next to them
    • remove dependency on dayjs (improves performance)
    • redesigned status badges with colors to make it easier to see the current status
    • redesigned execution log boxes so that they all have a similar look and feel and contain similar information
    • added start and end times for backups, scheduled tasks, deployments, and Docker cleanup executions
    • calculate the duration for backups, scheduled tasks, deployments, and Docker cleanup executions and added it to the UI
    • remove duplicate and unused code
  • refactor: Rename functions to make code more clear
  • refactor: Use camelCase consistently
  • refactor: Consolidate code
  • refactor: Better error handling in github.php and GithubAppPermissionJob.php
  • refactor: Move things to separate functions
  • refactor: Improve password security by not allowing compromised passwords
  • refactor: Refactored the UI and DB to make it easier to use - 0 now means unlimited retention (so a value is now required for retention).
  • refactor: Simplified some code
  • refactor: Refactored some duplicated code
  • refactor: Refactored code to be more centralized in one location
  • chore: Remove unused authentik stuff
  • chore: Refactored environment variable relationships
  • chore: Refactored a lot of DB queries to improve performance
  • chore: Upgraded all dependencies
  • chore: Switched up read-only labels checkbox to make more sense -> Read-only labels are now the default and mean that they are read-only (not editable), and Coolify will autogenerate the labels. If you uncheck read-only, you can edit them, and Coolify will not autogenerate any labels.
  • chore: Renamed number_of_backups_locally to database_backup_retention_amount_locally
  • chore: Use native Livewire functions instead of scripts in some cases.

Note

  • At the moment, the registration page is only inaccessible (all the time) if you use manual installation because the automated script downloads the .env file during installation, and then the user has to fill in the values in the .env file after Coolify is already installed and then run the script again (registration page will be live for a few seconds like this). In the future, we can make the script more interactive and ask for a username, email, and password.
  • For security purposes, the env values only take effect if the root user does not yet exist, so you cannot override the existing root user with these env values.

Issues


This release marks a substantial update focusing on security, performance, and user experience improvements, alongside the integration of new services and critical bug fixes.

New Navigation

new-navigation.mp4

Old Navigation

old-navigation.mp4

New Deployment Logs:

image

Old Deployment Logs:

image

Docker Cleanup Logs:

docker_cleanup_log

Backup Retention:

image

Root user environment variables do not pass validation rules

Root user created successfully

Root user already exists, skipping creation

What's Changed

New Contributors

Full Changelog: v4.0.0-beta.380...v4.0.0-beta.381

Don't miss a new coolify release

NewReleases is sending notifications on new releases.