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 ofupdated_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 theDatabaseBackupJob.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
, andupdated_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 issuesexpiresAt +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
andGithubAppPermissionJob.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
todatabase_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
- fix #2461
- fix #3273
- fix #4420
- fix #4582
- fix #4603
- fix #4658
- fix #3760
- fix #3919
- fix #3297
- fix #2861
- fix #3050
- fix #4682
- fix #4416
- fix #2643
- fix #4668
- fix #3571
- fix #4050
- fix #4073
- fix #4592
- fix #4572
- fix #4713
- fix #4725
- fix #4782
- fix #4615
- fix #4702
- fix #3313
- improves #4775
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:
Old Deployment Logs:
Docker Cleanup Logs:
Backup Retention:
Root user environment variables do not pass validation rules
Root user created successfully
Root user already exists, skipping creation
What's Changed
- Fix typo in fileflows.yaml by @Skeyelab in #4566
- Added missing Discord Env for Outline one click service template by @ShadowArcanist in #4588
- feat: add infomaniak oauth by @zaosoula in #4556
- feat: add infomaniak oauth by @peaklabs-dev in #4602
- Fix: bind() to 0.0.0.0:80 failed by @peaklabs-dev in #4608
- Fix: Environment route now uses uuid by @peaklabs-dev in #4364
- Fix: Docker Cleanup schedule by @peaklabs-dev in #4610
- Fix: Unreachable Notifications by @peaklabs-dev in #4586
- Fix: Multiple Init script fixes and some other Postgres fixes by @peaklabs-dev in #3950
- Fix: API - Projects & Applications endpoints issues by @SierraJC in #4571
- fix: fix domain being override when update application by @arceushui in #4596
- feat: add some new labels to every container by @Julien-R44 in #4324
- Add Cockpit CMS service / template by @aheinze in #4576
- add OPENAI_API_KEY variable in supabase.yaml by @volfadar in #4625
- chore: remove unnecessary package by @danie-ramdhani in #4636
- update penpot template healthchecks by @OliverSpeir in #4745
- Update health check endpoint of Nocodb service by @pranavxc in #4736
- Improve modal closing logic for intentional user interaction by @biostaz in #4739
- Improves: GitHub handling and AppServiceProvider #4751 by @peaklabs-dev in #4753
- fix: hostname -I not supported on Arch Linux by @nktnet1 in #4642
- Dependencie upgrade by @peaklabs-dev in #4783
- update supabase template by @djsisson in #4654
- teable service by @Syiana in #4727
- Fix Redis Not defined issue in Trigger.dev Ext db template. by @amjed-ali-k in #4700
- fix make public in supabase by @djsisson in #4785
- Fixing the CSRF bug for labelstudio versions 1.14.0 and higher by @bsamadi in #4711
- chore(deps): bump nesbot/carbon from 3.8.2 to 3.8.4 by @dependabot in #4798
- fix: edge case where backup executions could be null by @peaklabs-dev in #4767
- Hotfix by @andrasbacsai in #4799
- fix: instance wide GitHub apps by @peaklabs-dev in #4814
- fix/feat: Improves Cloning by @peaklabs-dev in #4777
- Feat: Improve backup retention (for database backups) by @peaklabs-dev in #4818
- Add nodebb service by @privlol in #4624
- Add calibre-web service by @frenicohansen in #4639
- Add actual-budget and rallly service by @frenicohansen in #4640
- feat: template for Gotenberg, a Docker-powered stateless API for PDF files by @nktnet1 in #4759
- fix: gotenberg template healthcheck by @nktnet1 in #4833
- Feat: Improve navigation performance by @peaklabs-dev in #4796
- Added template for joomla with MariaDB by @basigabri in #4841
- Update openblocks to lowcoder by @howardshand in #4831
- Add logo for lowcoder by @howardshand in #4832
- Improves: GitHub handling, AppServiceProvider and 500 error message rendering by @peaklabs-dev in #4754
- feat: Docker cleanup execution UI and some UI improvements by @peaklabs-dev in #4842
- chore(deps): bump nesbot/carbon from 3.8.2 to 3.8.4 by @dependabot in #4848
- feat: Ability to create root user via environment variables by @peaklabs-dev in #4847
- v4.0.0-beta.381 by @andrasbacsai in #4598
New Contributors
- @ShadowArcanist made their first contribution in #4588
- @arceushui made their first contribution in #4596
- @Julien-R44 made their first contribution in #4324
- @aheinze made their first contribution in #4576
- @volfadar made their first contribution in #4625
- @danie-ramdhani made their first contribution in #4636
- @OliverSpeir made their first contribution in #4745
- @pranavxc made their first contribution in #4736
- @biostaz made their first contribution in #4739
- @nktnet1 made their first contribution in #4642
- @amjed-ali-k made their first contribution in #4700
- @bsamadi made their first contribution in #4711
- @privlol made their first contribution in #4624
- @frenicohansen made their first contribution in #4639
- @basigabri made their first contribution in #4841
- @howardshand made their first contribution in #4831
Full Changelog: v4.0.0-beta.380...v4.0.0-beta.381