Commit Graph
18696 Commits
Author SHA1 Message Date
Andras Bacsai c3e5b4ba73 test(env): cover spaced shared variable inside a longer value (#7202) 2026-11-03 22:34:25 +01:00
Andras BacsaiandClaude Opus 5.5 960471984c fix(cleanup): delete sessions older than the session lifetime
Closes #7394

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:33:27 +01:00
Andras BacsaiandClaude Opus 5.5 8126a5c128 fix(backups): limit S3 uploads to 1000 parts for providers like Scaleway
Closes #8411

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:31:54 +01:00
Andras BacsaiandClaude Opus 5.5 0b89b857ed fix(backups): make the database backup executions table fit and readable
Closes #7188

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:30:19 +01:00
Andras BacsaiandClaude Opus 5.5 618d377d87 fix(ui): keep the dark theme during page loads and wire:navigate
Closes #7866

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:22:45 +01:00
Andras Bacsai 1b571f4509 fix(logs): cap streamed log reads so dockerd does not scan the full log file
Closes #7693
2026-11-03 22:22:22 +01:00
Andras BacsaiandClaude Opus 5.5 dec776025e fix(upgrade): finish the upgrade modal when the new version answers
Read the running version from the container that answers the status request, not from the old page state, so the modal shows success as soon as the new version is up. Hide all Livewire error pages while an upgrade runs.

Closes #8024

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:19:56 +01:00
Andras BacsaiandClaude Opus 5.5 31c3fcf50d feat(scheduled-tasks): add an option to run a task without a shell
Containers without sh (distroless or scratch images) could not run
scheduled tasks, because Coolify always ran the command with sh -c.
Turn off "Run in a shell" to split the command into arguments and run
it directly. The option is also in the API, the MCP tools, and the
server transfer.

Closes #8244

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:19:37 +01:00
Andras Bacsai e0b94662e9 fix(deployments): apply the concurrent build limit of build servers
The queue counted every running deployment against the deployment server,
and the job picked a build server at random. So the deployment server
limit capped builds on build servers, and the build server limit was
never read. Count each build on the server that runs it, reserve a build
server with a free slot when the deployment starts, and start waiting
deployments of other servers when a build server slot is freed.

Closes #7649
2026-11-03 22:16:14 +01:00
Andras Bacsai 4b9fe035dc fix(deployment): trust the server CA bundle in the helper container
BuildKit lets the Docker CLI in the helper fetch the registry token, and
the helper trusts only its own CAs. Behind a TLS-inspecting proxy, builds
failed with x509 errors although the server trusts the proxy CA. Mount
the server CA bundle read-only into the helper.

Closes #7568
2026-11-03 22:15:06 +01:00
Andras Bacsai f4a1e3e427 fix(proxy): keep Caddy WebSockets open across config reloads
caddy-docker-proxy reloads Caddy whenever any proxied container changes,
and Caddy closes every WebSocket on reload by default. Set
stream_close_delay on app, service, and dashboard reverse_proxy routes.

Closes #7942
2026-11-03 22:06:54 +01:00
Andras BacsaiandClaude Opus 5.5 3c87879e6b fix(compose): keep service names as hostnames in preview deployments
A preview renames its services to <name>-pr-<id>, so services that call
each other by their Compose names failed to start. Add the original name as an alias on the preview network.

Closes #8030

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:02:23 +01:00
Andras BacsaiandClaude Opus 5.5 780d67ccbb fix(storage): stop a deleted volume from coming back after a redeploy
Docker Compose gives a recreated container the old mount at each path
that the image declares with VOLUME, also a volume deleted in Coolify.
Before `up`, remove only containers that still mount a Coolify volume
whose storage entry was deleted. The stale volume delete dialog now
warns when a container still uses the volume.

Closes #6875

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 22:01:54 +01:00
Andras BacsaiandClaude Opus 5.5 5c71067481 fix(backups): limit the full backup run to its timeout
Each dump and S3 upload got the full backup timeout, so a long dump plus
an upload passed the worker timeout. The worker then killed the job
without cleanup: the execution stayed running, and the upload container
and the dump file stayed on the server.

- Give each step only the time that is left of the backup timeout, so a
  run that takes too long fails inside the job and cleans up.
- Run the dump once. An SSH retry started a second dump into the same
  file while the first could still run in the container.
- Explain exit code 124 and say in the timeout help that it covers the
  complete run.
- Remove backup upload containers of executions that are not running
  in the daily helper container cleanup.

Closes #8139

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 21:59:03 +01:00
Andras BacsaiandClaude Opus 5.5 ecb14e6cd5 fix(server): allow servers with the same IP and different SSH ports
Closes #7573

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 21:51:22 +01:00
Andras BacsaiandClaude Opus 5.5 21d1ad4874 fix(backups): upload to S3 endpoints with a path, like Supabase Storage
The MinIO client rejects endpoints such as `/storage/v1/s3`. Transfers to
these endpoints now use curl with a presigned URL that Coolify signs, for
database backups, volume backups, and S3 restores.

Closes #8530

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 21:43:47 +01:00
Andras Bacsai 3dc89cfe05 fix(oauth): require redirect URI to point at the provider callback route
Validate that the OAuth redirect URI path matches the auth.callback
route for the provider. Any other path falls through to the catch-all
route and silently sends the user back to the login page, so reject it
with a clear validation error instead.
2026-11-03 21:22:30 +01:00
Andras Bacsai 33cb5e3c6a test: cover OAuth redirect URI, multi-domain previews, server clones
- Add SettingsOauth tests that reject redirect URIs off the provider
  callback route and accept the callback route with or without a
  trailing slash
- Add a compose preview test checking that every domain of a
  multi-domain service gets a PR-prefixed domain and its own Traefik
  Host rule
- Add a clone test checking that cloning a service to another server
  keeps its generated database credentials and copies its volumes
- Refresh template_last_updated_at timestamps in the service templates
2026-11-03 21:21:34 +01:00
Andras Bacsai a5b4e1d32e feat(email): add a separate notification sender to the instance email settings
Team notifications sent through the instance email settings, the S3
connection error alert, and the channel disabled alert now use the
optional notification from address and name. Account mails keep the
default sender. Remove the unused emails command and its views.
2026-11-03 21:19:50 +01:00
Andras BacsaiandClaude Opus 5.5 b919af5f7e docs(readme): remove Best Consultant from big sponsors
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 21:19:43 +01:00
Andras BacsaiandClaude Opus 5.5 50af95a70b fix(service): show a starting health check as a warning on the resource card
Closes #9411

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:57:31 +01:00
Andras BacsaiandClaude Opus 5.5 666ac84efb fix(status): show running:starting while a health check is in its start period
Closes #9411

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:49:21 +01:00
Andras BacsaiandClaude Opus 5.5 3895ca05f3 fix(service): pull Convex images from the renamed ghcr.io/convex namespace
Closes #12449

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:47:51 +01:00
Andras BacsaiandClaude Opus 5.5 fcf92b751f fix(healthcheck): read the Dockerfile HEALTHCHECK only from the built stage
Closes #9475

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:46:44 +01:00
Andras Bacsai 6497cc73a6 docs(agents): tell agents not to edit CHANGELOG.md 2026-11-03 20:44:24 +01:00
Andras BacsaiandClaude Opus 5.5 2fbe9d2abe fix(proxy): notify once for each new Traefik patch version
Closes #9727

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:43:10 +01:00
Andras Bacsai 3f929edfc6 chore(dev): reach Mailpit as coolify-mail in scripts/dev instances 2026-11-03 20:42:03 +01:00
Andras Bacsai 06c41f57d6 feat(notifications): throttle repeated scheduled job failures and disable failing tasks 2026-11-03 20:42:03 +01:00
Andras BacsaiandClaude Opus 5.5 1ff99b0dc8 fix(logs): start the log copy during the click so it works on iOS
Closes #9408

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:41:03 +01:00
Andras BacsaiandClaude Opus 5.5 5431d4954d fix(server): run the connection check Docker commands through SSH mux
Each new SSH connection opens a systemd-logind session. Some systemd
versions leak closed sessions until the host refuses logins at 8192.
The connection check now opens one new login (the probe), not three.

Closes #9148

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:40:21 +01:00
Andras BacsaiandClaude Opus 5.5 d6acd9a3c5 fix(docker): use the Ubuntu and Debian repositories in the Docker install fallback
Closes #9455

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:39:44 +01:00
Andras BacsaiandClaude Opus 5.5 fc027be248 fix(compose): warn when the Compose file is in a subdirectory of the base directory
Closes #9525

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:36:26 +01:00
Andras BacsaiandClaude Opus 5.5 a05fe524f8 fix(storage): confirm volume renames because the data stays in the old volume
Closes #8816

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:34:55 +01:00
Andras BacsaiandClaude Opus 5.5 e29dcf70d9 fix(service): mark parts that are no longer in the Compose file
Closes #9591

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:34:37 +01:00
Andras BacsaiandClaude Opus 5.5 d6405d5545 fix(deployment): remove the helper container before restarting it with the same name
Docker frees the name of a stopped --rm container in the background, so
the second helper docker run for build secrets could fail with a name
conflict. Remove the old helper with docker rm -f before the run.

Closes #9363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:31:55 +01:00
Andras BacsaiandClaude Opus 5.5 e13652ee12 chore(changelog): remove scheduled task entries added by mistake
They belong to uncommitted work and come back with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:31:37 +01:00
Andras BacsaiandClaude Opus 5.5 8c6774e17f fix(deploy): keep the helper Docker CLI on its buildx plugin
A build-time HOME or DOCKER_CONFIG variable moved the Docker CLI in the
helper away from /root/.docker/cli-plugins, so BuildKit builds failed with
"buildx component is missing or broken". Force DOCKER_CONFIG=/root/.docker
for the build command and for the helper when build secrets are passed.

Closes #9726

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:31:16 +01:00
Andras BacsaiandClaude Opus 5.5 52a78cdb0f fix(env): keep the trailing newline of multiline environment variables
Closes #9438

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:30:59 +01:00
Andras BacsaiandClaude Opus 5.5 71814b4541 fix(deployment): use one COOLIFY_BRANCH value for preview deployments
A preview deployment set COOLIFY_BRANCH in three places with three
values: the Compose shell variables used the application branch
(main), the Compose parser used pull/<id>/head, and other build packs
used the fetched refspec (pull/<id>/head:pr-<id>-coolify) or the
application branch. A variable that refers to ${COOLIFY_BRANCH} then
got a different value than the container. All paths now use
Application::coolifyBranch(), which gives pull/<id>/head for previews
and git_branch for production deployments.

Closes #9572

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:25:28 +01:00
Andras BacsaiandClaude Opus 5.5 d3ef4d1c57 fix(service): route the rybbit /api path to the backend
The Rybbit template had a proxy route only for the client, so the
/api requests of the browser got a 404 from the client and sign-up
and login failed. The backend now declares SERVICE_URL_RYBBIT_3001=/api
on the same host and keeps the /api prefix. The backend is listed
before the client, so SERVICE_URL_RYBBIT (used in BASE_URL) stays the
root URL.

Closes #9055

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 20:19:27 +01:00
Andras Bacsai f21acdc3e4 fix(notifications): notify when a resource stops unexpectedly
Status checks now queue a delayed check for each application, preview,
service part, or database that goes from up to exited. After 2 minutes
it sends the "Resource status changes" notification if the resource is
still stopped, no deployment runs, and Coolify did not stop it. Each
resource sends at most one notification in 15 minutes.

Closes #9493
2026-11-03 20:18:50 +01:00
Andras BacsaiandClaude Opus 5.5 e20e652c00 fix(dns): check the closest Cloudflare wildcard for deeper domain names
Closes #12436

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:42:14 +01:00
Andras BacsaiandClaude Opus 5.5 d70801aaa1 fix(github): retry GitHub API reads on server and connection errors
Retry GET requests of githubApi() up to three times when GitHub answers
with a 5xx error or the connection fails. One 502 or one timeout on the
repository lookup before a deployment failed the deployment. Writes are
not retried, so a pull request comment is not posted two times. The
installation token request uses the same retry rule.

Closes #9785

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:42:04 +01:00
Andras Bacsai b7a2c75739 fix(github): check clock skew only from failed GitHub App responses
Stop calling /zen before each installation token request. A short
network problem to GitHub failed deployments with a cURL timeout on
/zen. assertGithubClockInSync now takes the failed response and reads
its Date header, so the "System time is out of sync" error still shows
when GitHub rejects the JWT.

Call it on failed JWT requests in the webhook installation check, the
permission job, the source connection test, and the server transfer
checklist. Remove the /zen fakes from the tests.
2026-11-03 19:29:45 +01:00
Andras BacsaiandClaude Opus 5.5 7f521e496d fix(s3): add a setting to skip TLS verification for S3 storages
S3 storages with a self-signed or private CA certificate failed with
"cURL error 60", because the Coolify container and the backup helper do
not use the CA certificates of the host. The new opt-in setting turns off
the certificate check in the PHP S3 clients and sets MC_INSECURE for mc.

Closes #9762

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:59:52 +01:00
Andras BacsaiandClaude Opus 5.5 a487d7c9d3 fix(service): prefix the litellm master key with sk- and add a salt key
Closes #10521

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:31:47 +01:00
Andras BacsaiandClaude Opus 5.5 dd8ea3dc93 fix(service): use postgres 16 in the outline template
New Outline versions run CREATE OR REPLACE TRIGGER in a migration,
which needs PostgreSQL 14 or later. On postgres:12-alpine the migration
failed and the Outline container restarted in a loop.

Closes #12345

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:31:28 +01:00
Andras BacsaiandClaude Opus 5.5 8f7d1be7a9 fix(service): limit supabase vector to the logs of its own stack
Closes #10324

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:30:43 +01:00
Andras BacsaiandClaude Opus 5.5 e9028e1338 fix(service): allow the redirect_to header in appflowy gotrue cors
AppFlowy Web runs on its own domain and sends a Redirect_to header to
/gotrue/magiclink on the admin domain. GoTrue does not allow that
header by default, so the CORS preflight failed and email sign-in
showed "Network error". Set GOTRUE_CORS_ALLOWED_HEADERS=redirect_to.

Closes #10545

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:29:35 +01:00
Andras BacsaiandClaude Opus 5.5 ccaa04ce33 fix(service): use postgresql in the bugsink template
The template used mysql:latest with binary logging on and no limit,
so the binary logs filled the disk and Bugsink stopped. Use
postgres:17-alpine and bugsink/bugsink:2, as the Bugsink Docker
Compose sample does. Existing services keep MySQL; the changelog
tells how to purge the logs and turn binary logging off.

Closes #10626

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 18:28:46 +01:00