1048 Commits
Author SHA1 Message Date
peaklabs-dev 8d1776bdcf chore: remove Windows support
- Removes coolify-testing-host.yml too, it published the testing host to Docker Hub for docker-compose.windows.yml alone, the development setup builds it locally
2026-11-02 00:04:49 +01:00
peaklabs-dev a608a37d8b feat: add update settings to the instance settings
- Adds the channels stable, preview, nightly and custom
- Preview and nightly read /coolify/release.json on the CDN and take the newest version of their channel and the more stable ones, nightly gets a new build of next or the release branch twice a day
- Custom installs any image tag of ghcr.io by hand, such as pr-1234 for the build of pull request 1234
- After a switch to a more stable channel, the instance keeps the updates of the channel it left until the stable release of its version is out
- The local versions.json moves to storage/app and is replaced in one step, a channel change replaces it without the version of the old channel
2026-11-02 00:04:26 +01:00
peaklabs-dev f780d7429c feat(database): bump the SQLite image to 3.54.1-v0.2.0 2026-10-30 18:27:16 +01:00
Andras Bacsai 091654ce7f feat(access): set member grants when inviting 2026-10-30 16:41:30 +01:00
Andras BacsaiandClaude Opus 5.5 76b89fa8e9 feat(api-tokens): edit token access and pause or resume tokens (#12396)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 13:20:19 +01:00
github-actions[bot] 82764c6d79 Merge remote-tracking branch 'origin/main' into next 2026-10-29 22:37:14 +00:00
Andras Bacsai 72c8209285 feat(subscription): email checkout reminders for expired sessions
Enable Stripe checkout recovery links and send rate-limited reminders to the
admin who started an unfinished subscription checkout.
2026-10-29 23:35:34 +01:00
b85a9197a1 chore: merge main into next (#12382)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 21:10:39 +01:00
340de2684f chore: merge main into next (#12371)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 19:02:19 +01:00
Andras BacsaiandClaude Opus 5.5 a12f62ed4f fix(dashboard): bound recent deployments query per application
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:58:59 +01:00
Andras BacsaiandClaude Opus 5.5 c34f5f8e3b fix(servers): index active server lookups by private key
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:47:55 +01:00
Andras BacsaiandClaude Opus 5.5 55605f6516 fix(github-runners): select runner servers with a UNION of server ids
An OR of two correlated EXISTS subqueries made Postgres estimate a
per-server scan of the runner executions, so JIT compilation took most
of the time of the per-minute reconcile query. Select the server ids
from both runner tables with one UNION and index executions by status
and server.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:43:16 +01:00
Andras BacsaiandClaude Opus 5.5 68a08170e7 fix(docker): index interrupted cleanup lookup and process it in batches
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:53:10 +01:00
Andras BacsaiandClaude Opus 5.5 2616b4bba1 fix(deployments): index history ordering and skip payload columns in lists
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:44:28 +01:00
github-actions[bot] 624fbd93f1 Merge remote-tracking branch 'origin/main' into next 2026-10-28 21:35:09 +00:00
Andras BacsaiandClaude Opus 5.5 2b6af2744a fix(database): index server settings and team membership lookups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:30:40 +01:00
github-actions[bot] 25bbb69381 Merge remote-tracking branch 'origin/main' into next 2026-10-28 21:17:02 +00:00
Andras BacsaiandClaude Opus 5.5 0951c5daa1 fix(database): index team deployment and Docker cleanup history lookups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:14:51 +01:00
Andras Bacsai 57cdd92f7c fix(upgrade): count only scheduled jobs running on this host 2026-10-28 22:13:40 +01:00
github-actions[bot] 9d0b6a5054 Merge remote-tracking branch 'origin/main' into next 2026-10-28 13:28:51 +00:00
Andras BacsaiandClaude Opus 5.5 afe8fc05ea fix(healthcheck): keep the Dockerfile HEALTHCHECK of existing applications
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:16:22 +01:00
github-actions[bot] 71f1c33bf1 Merge remote-tracking branch 'origin/main' into next 2026-10-28 11:27:20 +00:00
Andras Bacsai 2dcf8eeca3 fix(previews): keep production values for previews from before the upgrade
Public pull request previews no longer get production values, and no
preview falls back to production variables. Existing previews were
deployed with these values; for example, their databases were
initialized with the production password, so they broke on redeploy.

Previews that exist at the upgrade get keeps_production_values and
keep the earlier behavior. Previews created later do not. Server
transfer moves the flag.
2026-10-28 12:10:27 +01:00
62b2a99a70 chore: merge main into next (#12351)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:25:43 +01:00
Andras Bacsai 101444b8ca fix(log-drains): support Axiom edge domains and update Fluent Bit to 5.1
- Add an Axiom edge domain setting (default us-east-1) and use the /v1/ingest endpoint, so EU datasets work
- Remove the Highlight drain (service ended) and stop its running containers
- Update Fluent Bit from 2.0 to 5.1 and use the warn log level
- Restart running drains when the generated files change, with the new image pulled before the old container stops
- Show log drain validation errors under their fields

Closes #9898
2026-10-27 17:41:50 +01:00
Andras Bacsai 1039368491 fix(s3): support virtual-hosted-style URLs for S3 storages
Add a "Use path-style URLs" setting to S3 storages. It is detected from
the endpoint (Alibaba OSS, Tencent COS, Volcengine/BytePlus TOS), and the
connection test switches to virtual-hosted style when the provider
rejects path-style requests. Backups pass `--path off` to mc.

Closes #10347
2026-10-27 15:53:16 +01:00
Andras Bacsai 2be4f259b8 Merge remote-tracking branch 'origin/main' into automation/sync-main-to-next 2026-10-26 12:41:43 +01:00
Andras Bacsai d8fe02464b Merge remote-tracking branch 'origin/next' into automation/sync-main-to-next 2026-10-26 12:40:59 +01:00
Andras Bacsai 2796609e96 feat(access): add scoped grants for team members and API tokens (#12329) 2026-10-26 12:13:20 +01:00
Andras Bacsai 8eb33ddf31 Merge remote-tracking branch 'origin/next' into automation/sync-main-to-next 2026-10-26 12:12:20 +01:00
Andras Bacsai 7b83fa72eb feat(git): add HTTPS credentials for private repositories on custom Git hosts (#12328) 2026-10-26 10:50:24 +01:00
Andras Bacsai 5d66fb719e fix(registration): time-limit first root account creation
Open root registration for ten minutes after startup, then require a Coolify restart to reopen it. Update installer credential handling and explain the setup window in the registration UI.
2026-10-26 10:49:19 +01:00
Andras BacsaiandClaude Opus 5.5 11f794790d feat(team): let owners and admins require 2FA for team members
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:47:39 +01:00
Andras BacsaiandClaude Opus 5.5 2e03926c01 fix(dev): give ssh key directories to www-data in development
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:55:32 +02:00
Andras Bacsai a3712f8902 fix(deploy): stop 502 errors during rolling updates
Traefik and Caddy routes of applications now retry a failed connection
on another container, and the rolling update waits a configurable drain
time (default 5 seconds) after the new container is healthy before it
stops the old containers. The wait is skipped when no old container runs
or when the proxy labels changed, because the proxy drops a route that
two containers define differently.

Fixes #8627
2026-10-24 11:16:46 +02:00
Andras BacsaiandClaude Opus 5.5 9db8d55473 feat(canvas): let admins drag server zones on the servers and dashboard canvases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:13:29 +02:00
Andras BacsaiandClaude Opus 5.5 7fa3110f0b feat(canvas): let admins drag project zones on the projects canvas
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:57:56 +02:00
Andras Bacsai 6012232e97 fix(server): rate limit failed server validations on cloud 2026-10-23 11:10:02 +02:00
Andras Bacsai c454f84545 fix(server-transfer): keep imported data exact and guard archived servers
- Skip TrimStrings and ConvertEmptyStringsToNull on the import route; an empty shared variable failed the whole import
- Keep compose parser versions, static ports, legacy variable keys, and only the bundle's variables and destinations
- Give the transfer back token the deploy permission that the import needs
- Move the Cloudflare tunnel DNS record with the server and park it on the source
- Refuse cloud server deletes, power on, tunnel and DNS changes, and scp for archives; skip their backup alerts and provider polling
- Add a column-level round-trip test, archive guard tests, and a live full-coverage transfer test
- Advance the GitLab App sequence in the dev seeder
2026-10-22 15:52:20 +02:00
Andras BacsaiandClaude Opus 5.5 65a7bd5c05 chore: merge main into release/v4.5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:37:20 +02:00
e0f6b41dac chore: merge main into release/v4.5 (#12206)
Co-authored-by: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Andras Bacsai <andrasbacsai@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:26:07 +02:00
Andras Bacsai cf71fda5c1 feat(gitea): add Gitea App sources and private repo deployments (#12234) 2026-10-19 21:58:30 +02:00
Andras Bacsai 62be8674bc feat(proxy): add optional permanent redirects for apps and services (#12233) 2026-10-19 21:46:12 +02:00
Andras BacsaiandClaude Opus 5.5 63153aa8b4 fix(cloud): rework unsubscribed team cleanup and account deletion (#12210)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 17:32:16 +02:00
Andras Bacsai dd456625ec Merge remote-tracking branch 'origin/release/v4.5' into release/v4.5 2026-10-19 15:03:38 +02:00
Andras Bacsai 975048bad8 fix(security): encrypt plaintext secrets at rest 2026-10-19 12:28:23 +02:00
Andras BacsaiandClaude Opus 5.5 4ca0b4415c feat(patches): add automatic security updates per server
- New server settings: is_auto_security_updates_enabled and
  auto_security_updates_time (maintenance window, HH:MM in the time zone
  of the server). Both move with a server transfer.
- Debian/Ubuntu: install unattended-upgrades and write
  52coolify-unattended-upgrades. `#clear` drops the distro origin lists,
  so only the security origins stay (Debian <codename>-security, Ubuntu
  <codename>-security, and the Ubuntu Pro ESM security origins). A
  drop-in for apt-daily-upgrade.timer sets the time.
  https://manpages.debian.org/bookworm/apt/apt.conf.5.en.html
  https://github.com/mvo5/unattended-upgrades/blob/master/README.md
- RHEL family: install dnf-automatic (dnf5-plugin-automatic on dnf5),
  set upgrade_type = security and apply_updates = yes in
  /etc/dnf/automatic.conf, and add a drop-in for dnf-automatic.timer
  (dnf4) or dnf5-automatic.timer (dnf5).
  https://dnf.readthedocs.io/en/latest/automatic.html
  https://dnf5.readthedocs.io/en/latest/dnf5_plugins/automatic.8.html
- Off removes the Coolify files, so the operating system default comes
  back. Other package managers show "not supported".
- The schedule and the automatic updates share one form and one
  unsaved bar. The remote commands run only when the automatic update
  settings change; a failure keeps the old setting.
- Commands are written for non-root SSH users (tee and single sh -c
  scripts) and were run in Debian 12, Ubuntu 24.04, Rocky 9, and Fedora
  containers as root and as a sudo user.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:41:42 +02:00
Andras BacsaiandClaude Opus 5.5 6806ed31fa feat(patches): save check results and run checks in a queued job
- server_settings gets patch_check_result (JSON), patch_check_error,
  patch_checked_at, and patch_check_frequency.
- The patches page shows the saved result and "Last checked" on load.
  "Check for updates" queues ServerPatchCheckJob (manual) instead of
  running SSH in the Livewire request. The job saves the result and
  broadcasts ServerPatchCheckFinished on the server team channel; the
  page reloads the saved result (with a 10 s poll as a fallback).
- A finished package update (callEventOnFinish) queues a new check on
  the server side, so the page no longer depends on the browser.
  ServerPackageUpdated is removed.
- The check frequency is a server setting (cron or preset, at most once
  per hour). Empty keeps the staggered weekly default.
- The failure notification is sent only when the state changes from ok
  to error, not on every check.
- Page access needs viewSecurity and every action needs update on the
  loaded server; a member gets 403. Updates accept only a package from
  the saved result.
- Server transfer: the frequency moves, the last result stays on the
  source (runtime).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:28:51 +02:00
22a8c09dd6 Next (#12202)
Co-authored-by: Aditya Tripathi <aditya@climactic.co>
Co-authored-by: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: rosslh <ross@rosshill.ca>
Co-authored-by: Abdulfetah Suudi <suudiabdulfetah@gmail.com>
Co-authored-by: Dharmveer <51308779+dharmveer97@users.noreply.github.com>
Co-authored-by: Maxwell <136101+mxswd@users.noreply.github.com>
2026-10-19 10:07:23 +02:00
Andras Bacsai 32096d53f1 Merge remote-tracking branch 'origin/release/v4.5' into pr-12202-next
# Conflicts:
#	.ai/lessons.md
#	app/Actions/Server/CleanupDocker.php
#	app/Http/Controllers/Api/DatabasesController.php
#	app/Http/Controllers/Api/ServerCanvasController.php
#	app/Http/Controllers/Api/ServicesController.php
#	app/Http/Middleware/ApiIpAllowed.php
#	app/Jobs/VolumeBackupJob.php
#	app/Livewire/Concerns/RemembersCanvasView.php
#	app/Livewire/Fleet/Metrics.php
#	app/Livewire/Project/Database/BackupEdit.php
#	app/Livewire/Project/Service/BackupExecutions.php
#	app/Livewire/Project/Shared/EnvironmentVariable/All.php
#	app/Livewire/Project/Shared/Storages/VolumeBackups.php
#	app/Livewire/Security/ApiTokens.php
#	app/Livewire/Tags/Show.php
#	app/Models/ApplicationSetting.php
#	app/Models/Service.php
#	app/Rules/ValidGitRepositoryUrl.php
#	app/Services/EnvironmentCanvas.php
#	app/Services/ProjectCanvas.php
#	app/Services/ServerCanvas.php
#	app/Services/ServerTransfer/ServerTransferExporter.php
#	app/Services/ServerTransfer/ServerTransferImporter.php
#	app/Services/ServerTransfer/ServerTransferMigrator.php
#	app/Services/SharedVariableCanvas.php
#	app/Traits/ExecutesDatabaseStartCommands.php
#	app/Traits/HasS3Replicas.php
#	bootstrap/helpers/shared.php
#	config/constants.php
#	other/nightly/versions.json
#	resources/css/app.css
#	resources/js/canvas-core.js
#	resources/js/canvas/deploy/DeployCanvas.svelte
#	resources/js/canvas/deploy/state.svelte.js
#	resources/js/canvas/deploy/styles.js
#	resources/js/canvas/environment/Card.svelte
#	resources/js/canvas/environment/EnvironmentCanvas.svelte
#	resources/js/canvas/environment/Panel.svelte
#	resources/js/canvas/environment/StatusDot.svelte
#	resources/js/canvas/environment/Toolbar.svelte
#	resources/js/canvas/environment/Zone.svelte
#	resources/js/deploy-canvas.test.js
#	resources/js/environment-canvas.js
#	resources/js/environment-canvas.test.js
#	resources/views/components/canvas-view-toggle.blade.php
#	resources/views/components/navbar.blade.php
#	resources/views/components/server/sidebar.blade.php
#	resources/views/components/shared-variables/layout.blade.php
#	resources/views/components/shared-variables/sidebar.blade.php
#	resources/views/components/top-user-menu.blade.php
#	resources/views/layouts/app.blade.php
#	resources/views/livewire/fleet/metrics.blade.php
#	resources/views/livewire/project/database/backup-edit/s3.blade.php
#	resources/views/livewire/project/database/backup-executions.blade.php
#	resources/views/livewire/project/environment-canvas.blade.php
#	resources/views/livewire/project/new/select.blade.php
#	resources/views/livewire/project/project-canvas.blade.php
#	resources/views/livewire/project/projects-canvas.blade.php
#	resources/views/livewire/project/shared/environment-variable/all.blade.php
#	resources/views/livewire/project/shared/storages/volume-backups/s3.blade.php
#	resources/views/livewire/security/api-tokens.blade.php
#	resources/views/livewire/server/canvas.blade.php
#	resources/views/livewire/server/index.blade.php
#	resources/views/livewire/server/navbar.blade.php
#	resources/views/livewire/server/partials/localhost-general.blade.php
#	resources/views/livewire/server/show.blade.php
#	resources/views/livewire/settings/advanced.blade.php
#	resources/views/livewire/shared-variables/canvas.blade.php
#	resources/views/livewire/tags/canvas.blade.php
#	resources/views/livewire/tags/show.blade.php
#	routes/web.php
#	tests/Feature/ApiDisabledCalloutTest.php
#	tests/Feature/BackupS3DestinationsFormTest.php
#	tests/Feature/DatabaseStartContentFilesTest.php
#	tests/Feature/DockerCleanupJobTest.php
#	tests/Feature/EnvironmentCanvasTest.php
#	tests/Feature/InstanceBackupMultipleS3DestinationsTest.php
#	tests/Feature/Livewire/Fleet/MetricsChartPayloadTest.php
#	tests/Feature/Livewire/Fleet/MetricsDataTest.php
#	tests/Feature/Mcp/McpEndpointTest.php
#	tests/Feature/Mcp/McpToggleApiTest.php
#	tests/Feature/ProjectCanvasTest.php
#	tests/Feature/ServerCanvasTest.php
#	tests/Feature/SharedVariableCanvasTest.php
#	tests/Feature/VolumeBackupTest.php
#	tests/Unit/ScpStyleGitUrlTest.php
#	tests/Unit/ServerTransfer/ServerTransferS3DestinationsTest.php
#	tests/v4/Browser/DeployCanvasTest.php
#	versions.json
2026-10-19 10:00:21 +02:00