Commit Graph
17057 Commits
Author SHA1 Message Date
peaklabs-dev 9faa4f4b7c Merge branch 'main' into next 2026-09-09 15:32:27 +02:00
🏔️ Peak 80b97517a4 feat: add custom container name prefix option (#11704) 2026-09-09 15:04:32 +02:00
peaklabs-dev 6ad739a53c feat(docker): limit container name prefixes to 30 characters 2026-09-09 15:01:57 +02:00
peaklabs-dev 0d8ef9411f feat(api): allow setting the container name prefix 2026-09-09 15:01:57 +02:00
peaklabs-dev 7efece06c4 feat(ui): add container name prefix to application container settings 2026-09-09 15:01:57 +02:00
peaklabs-dev 266d414a04 feat(docker): add container name prefix for generated container names 2026-09-09 15:01:57 +02:00
🏔️ Peak 62df33ba3d feat(docker): use ISO 8601 timestamp suffix for generated container names (#11702) 2026-09-09 15:01:53 +02:00
🏔️ Peak 45501131bb fix(docker): custom container names (#11701) 2026-09-09 14:58:10 +02:00
Andras Bacsai 936a2566c6 fix(analytics): hide traffic UI when disabled and skip default-on (#11700) 2026-09-09 14:28:15 +02:00
Andras Bacsai f4bec96bd6 feat(api): add database import and Cloudflare DNS management (#11699) 2026-09-09 14:28:08 +02:00
Andras Bacsai d4a655c390 fix(database): keep S3 import credentials out of activity commands
Pass S3 endpoint and keys as helper container env vars and run mc alias
via those variables so the stored import command no longer contains
access keys or secrets. Start the helper in a separate remote process,
use the storage filesystem adapter for object checks, and remove a
credential temp file during import cleanup when the path is safe.
2026-09-09 14:27:31 +02:00
Andras Bacsai 7109a11826 fix: queue import cleanup and scope DNS record updates
Move database import temp/container cleanup into a queued listener with retries, and clear the import running state on failed restore starts. Tighten Cloudflare replace/delete to the current server IP and owning resource, notify when DNS jobs fail, and pass domain-removal confirmation through remove-by-key. Document import request oneOf schemas without extra properties.
2026-09-09 13:43:56 +02:00
peaklabs-dev 8d07bb9274 fix(docker): use custom container names for compose applications 2026-09-09 13:38:07 +02:00
peaklabs-dev de013ace2a fix(docker): only use custom container names in consistent naming mode 2026-09-09 13:38:07 +02:00
peaklabs-dev efe474e0e2 fix(docker): enable consistent naming for legacy custom container names 2026-09-09 13:38:07 +02:00
Andras Bacsai 7002ee95bc fix(database): decompress gzip backups for mysql and mariadb restores
Single-database mysql/mariadb imports accepted .gz files but redirected
them straight into the client. Pipe through the existing gunzip fallback
used by dump-all restores.
2026-09-09 13:10:12 +02:00
Andras Bacsai edcd44db89 fix: serialize database import starts per resource
Hold a cache lock keyed by database UUID across the active-import
check and remote_process so two concurrent requests cannot both
queue a restore against the same database.
2026-09-09 13:10:04 +02:00
Andras Bacsai b5ca99c69d fix(api): return invalid token for database import endpoints
Import upload/create/show now return invalidTokenResponse() when the
access token has no team, matching the rest of the database API.
2026-09-09 13:09:31 +02:00
Andras Bacsai 27bb601e66 fix(dns): skip auto DNS jobs when server IP is invalid
ConfigureDnsRecordJob requires a string content value. Guard
configureDnsAfterDomainAdd with the same blank and FILTER_VALIDATE_IP
checks used by createManagedDnsRecord so a missing or hostname-only
server address cannot TypeError after the domain is saved.
2026-09-09 13:07:55 +02:00
Andras Bacsai 25e61deefd fix(api): reject unknown fields on database import
Run validator fails() before adding extra-field errors so Laravel does not replace the message bag and accept undocumented properties.
2026-09-09 13:06:18 +02:00
Andras Bacsai 903b5d3a0d fix(database): emit valid shell env vars in dump-all MySQL imports 2026-09-09 13:06:04 +02:00
Andras Bacsai 5a3d0002f8 fix(database): align restore confirmation copy with replace-existing behavior
PostgreSQL single-database restores no longer always replace existing
objects. Update the file and S3 confirmation dialogs so they match the
callout instead of claiming all data will be replaced.
2026-09-09 13:04:02 +02:00
Andras Bacsai 344b0dff5e test(api): assert abilities on all database import routes 2026-09-09 13:04:00 +02:00
Andras Bacsai e0dfbaa8b9 test(database): use App\Models namespaces in import command builder tests 2026-09-09 13:03:30 +02:00
Andras Bacsai d224f44dd5 test(dns): sort cached Cloudflare zone names before asserting 2026-09-09 13:02:41 +02:00
Andras Bacsai 4accae95b5 feat(database): add replace-existing option for PostgreSQL restores
Allow single-database PostgreSQL imports to drop matching objects before restore. The API and import form accept replace_existing, which adds --clean --if-exists to pg_restore, and pg_restore now uses --exit-on-error.
2026-09-09 11:48:17 +02:00
Andras Bacsai ab3b3926aa feat: add database import API and Cloudflare DNS management
Queue database imports from upload, S3, or server paths via REST, and
manage Cloudflare DNS records from integration tokens and domain UIs.
2026-09-09 11:14:22 +02:00
Andras Bacsai 424dbd36ff feat(sentinel): make sentinel mandatory on regular servers
Remove the enable/disable toggle from the server UI, logs page, and
Sentinel API so is_sentinel_enabled is derived and read-only. Enable
existing regular servers via migration, start Sentinel after validate-
and-install, and drop the daily ServerManagerJob restart.
2026-09-09 06:30:32 +02:00
Andras Bacsai d71a72a45d fix(applications): flatten mobile config nav and pin domain save
Replace the collapsible mobile configuration menu with an always-visible
responsive grid, stack the mobile heading, and swap the domain editor
unsaved bar for a sticky Save footer with a scrollable form body.
2026-09-08 22:21:32 +02:00
Andras Bacsai b39928d631 fix: support generic SSH Git usernames (#11685) 2026-09-08 20:51:15 +02:00
Andras Bacsai 83714ea395 fix(git): parse generic scp-style SSH URLs with custom users
Centralize scp-style Git URL parsing so user@host:path (including custom
usernames and embedded ports) is accepted and converted to HTTPS for
public clones, API create, webhooks, validation, and commit/branch links.
2026-09-08 20:33:45 +02:00
peaklabs-dev d25edb8551 fix(terminal): distinguish application containers across servers 2026-09-08 19:43:05 +02:00
Florian Pfitzer e9bf2551ed fix: support generic SSH Git usernames 2026-09-08 16:11:56 +02:00
Andras Bacsai 1e8a27b084 feat(teams): persist active team and add team selection screen (#11503) 2026-09-08 14:58:58 +02:00
Aditya Tripathi e52390ec03 fix(team): resolve stored team on deletion and impersonation
Use resolveStoredTeam() instead of teams()->first() when picking the
next active team after a team deletion or when an admin switches into
a user's account, so a valid stored preference wins over an arbitrary
first team. DeleteTeam now returns null when the deletion leaves the
owner with multiple teams, deferring to the selection screen instead
of guessing. refreshSession also stops persisting current_team_id
while impersonating, so viewing another user's account no longer
overwrites their real last-active team.
2026-09-08 14:44:42 +02:00
Aditya Tripathi f511921895 fix(teams): guard current_team_id clear against concurrent writes
Make clearStoredTeamIfMatches perform an atomic conditional UPDATE
so a concurrent team switch isn't clobbered, and call it for the
deleting owner in DeleteTeam so their stored team id doesn't point
at a deleted team. refreshSession now falls back to
resolveStoredTeam() instead of an arbitrary first team. Add a
return type to SelectTeam::render() and tests covering owner
deletion and concurrent-selection preservation.
2026-09-08 14:44:39 +02:00
Aditya Tripathi 2b92fb86b5 fix(teams): clear stale current_team_id when membership ends
Reset the user's persisted current_team_id when they are removed from
a team, when their team is deleted, or when refreshSession finds no
team left, so a dangling reference is never restored on next login.
2026-09-08 14:44:39 +02:00
Aditya Tripathi 12498b4b86 feat(teams): persist active team and add team selection screen
Add current_team_id to users so the last active team is restored on
login instead of always defaulting to the personal team. When a user
belongs to multiple teams and has no valid stored choice, redirect
them to a new team.select screen (SelectTeam Livewire component) to
pick one, rather than silently choosing the first team. Update
Fortify and OAuth login flows to use the new resolveStoredTeam()
logic.
2026-09-08 14:44:39 +02:00
Andras Bacsai c779251bfe feat(traffic): add Coolify analytics for Traefik and Caddy (#11292) 2026-09-08 14:41:20 +02:00
Andras Bacsai 327842a75c style(analytics): use coollabs-base KPI tiles and fix chevron-down
Switch analytics overview cards and skeleton tiles from white/base
backgrounds to --coollabs-base, show metric labels on skeletons, and
replace the scaled chevron-down path with a 24px polyline. Update
feature tests for the new tile classes and icon.
2026-09-08 14:40:39 +02:00
Andras Bacsai c927df0a1d Merge remote-tracking branch 'origin/next' into coolify-analytics-traefik-caddy 2026-09-08 14:28:24 +02:00
Andras Bacsai 16ec32cf65 style(dashboard): apply surface treatment to analytics KPI cards
Add a light/dark ring around the dashboard analytics KPI group and use canvas-tinted dark card backgrounds instead of dark:bg-base so the cards match other dashboard surfaces.
2026-09-08 14:26:39 +02:00
Andras Bacsai f17cdc1c74 feat(analytics): add server analytics page and split settings
Add a per-server Analytics page scoped to that host, move traffic
settings out of Sentinel, and put metrics settings on Charts.
Surface 4xx/5xx on path rows and restyle deployment logs.
2026-09-08 14:20:41 +02:00
Andras Bacsai 8af4e6f282 chore: merge main into next (#11690) 2026-09-08 13:55:53 +02:00
Andras Bacsai 9708b78bee Merge remote-tracking branch 'origin/next' into automation/sync-main-to-next
# Conflicts:
#	resources/css/app.css
2026-09-08 13:47:44 +02:00
Andras Bacsai bd7d0b5de1 feat(charts): show local and UTC times in metric tooltips
Chart tooltips now list the viewer's local time and UTC with short
timezone names, instead of a UTC-only stamp. Also add a little left
padding on the traffic requests chart so axis labels are not clipped.
2026-09-08 13:31:40 +02:00
Andras Bacsai a25231683e feat(analytics): add chart categories, loading states, and apply action
Pass series bucket timestamps to sparkline payloads so charts align with the selected range. Show loading overlays on analytics filters and range tabs, restyle the analytics header, and replace Sentinel custom-image autosave with an Apply and restart button so the unsaved bar no longer flashes.
2026-09-08 13:24:39 +02:00
peaklabs-dev b81381e85b fix(profile): show an enabled badge for two-factor authentication 2026-09-08 13:07:40 +02:00
Andras Bacsai 0615c784ac fix(server): remove duplicate Disabled badge from metrics empty state
The metrics-disabled empty state already titles itself "Metrics are disabled", so the extra status badge was redundant. Cover the Sentinel-enabled branch so that badge does not return.
2026-09-08 12:53:57 +02:00
🏔️ Peak ff24e82fd2 fix: prevent duplicate 2FA challenge submissions causing HTTP 419 (#11223) 2026-09-08 12:23:11 +02:00