The domain check of the transfer checklist resolved the server host name
with gethostbynamel(), which returns IPv4 only, so a domain that points to
an IPv6-only server was reported as pointing to another address. Resolve A
and AAAA records and compare normalized addresses. The Cloud SSH probe now
also resolves AAAA records when a host name has no A record.
Closes#12397
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Do not overwrite the WordPress site address from the Coolify domain.
WordPress owns this setting; the docs now explain how to change it.
This reverts commit dce02411a.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mc keeps one --resolve IP per host, and Coolify always pinned the IPv4
address of a dual-stack endpoint. On servers without IPv4, uploads failed
with "network is unreachable". A helper container on the upload network
now connects to each validated IP, IPv4 first, and the first IP that
connects is pinned. S3 restores are now pinned in the same way.
Closes#12397
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Define WP_HOME and WP_SITEURL from SERVICE_URL_WORDPRESS in the MariaDB
and MySQL templates, so a domain change no longer makes the login
redirect to the domain used at install time.
Closes#12406
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unset the helper's build secret variables before Compose pulls or starts
services, so containers get the runtime .env values. Give build secrets
the raw stored value instead of the quoted .env form.
Closes#12409
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docker Compose applications dropped the stored SERVICE_URL_<NAME>_<PORT> and SERVICE_FQDN_<NAME>_<PORT> variables and only generated the forms without a port, so compose references to them were blank. Generate the port-suffixed forms from the current domain for runtime and build-time, production and preview deployments.
Closes#12427
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move Sysbox checks and installation into a lazy Livewire component so its requests do not reset the runner form's unsaved state. Update tests to cover the separate component.
- a build pushes its images before the index that tags them, a run in between would see them as unused
- a push while the run reads the pages of versions shows one version twice, the list keeps it once so the second delete does not stop the run
- ghcr.io lists deleted versions for 30 days, a HEAD on docker.io for each would reach thousands per run, which could trigger rate limits
- twice the delete limit covers the last two runs, and manifests only docker.io has sort first, so a copy docker.io refused is deleted within two runs
- with a run every hour and 200 deletions per run the about 35,000 unused manifests on ghcr.io and docker.io are deleted in about 7 days, then the schedule goes back to every 2 weeks or every month
- a run deletes 200 at most, as GitHub allows an account 500 requests per hour and the ghrc.io PAT is an account level PAT
- Backup pages show Backup, and service sub-resources show their own
name, because the row opens that menu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- On a resource page, the main menu starts with a row that shows the
resource name and opens the deepest resource menu again.
- Pass the resource name to registerMainNavContext() again.
- Document the row in DESIGN.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser uses only the /app/{key} WebSocket. Laravel sends events to
Reverb over 127.0.0.1, so the generated Traefik and Caddy configs no longer
route /apps to port 6001, and the WebSocket rule only matches /app/.
Closes#12390
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Save build_server_id as soon as a build server is selected, so the cancel
cleanup finds the helper container on the build server. Let the final
helper stop run after a cancel.
Closes#12383
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
phpdotenv trims whitespace around an unquoted value, including the \r of
CRLF line endings. The repair quoted such values, which broke valid lines in
CRLF files and kept spaces that phpdotenv drops. Trim the value first and
quote it only when a space is still inside it.
Closes#12375
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Installers before 4.5.1 and manual edits could leave ROOT_USERNAME (or the
root email or password) with spaces and no quotes. The running container
ignores .env because its config is cached, so the next upgrade recreated it
and phpdotenv failed, which made every page return HTTP 500. The upgrade now
quotes these values before it restarts Coolify.
Closes#12375
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An invited user who set a password with Forgot password kept the forced
reset flag. A re-invite then replaced the password, and a revoked or
expired invitation deleted the account.