Commit graph

254 commits

Author SHA1 Message Date
Andras Bacsai
ac9b1c68c1 fix(server): allow sentinel startup migrations to finish 2026-08-27 19:38:01 +02:00
Andras Bacsai
7bbd91175f Revert "Merge branch 'next' into main"
This reverts commit 2598f3e4c8, reversing
changes made to 83f1a2e503.
2026-08-21 12:12:56 +02:00
Andras Bacsai
81227670e6 Reapply "Merge origin/next into main"
This reverts commit 15359833d3.
2026-08-19 12:39:55 +02:00
Andras Bacsai
15359833d3 Revert "Merge origin/next into main"
This reverts commit 541d743907, reversing
changes made to bb1d3f13f2.
2026-08-19 12:33:16 +02:00
Andras Bacsai
541d743907 Merge origin/next into main 2026-08-19 12:30:09 +02:00
Andras Bacsai
f6467feeb3
Add support for apk package manager (on Alpine Linux) (#6189) 2026-08-18 16:46:02 +02:00
Andras Bacsai
96790e6531 feat(server): support Alpine package management and Docker setup
Add Alpine prerequisites, Docker CLI plugins, and OpenRC service handling while
falling back to sh for SSH commands on hosts without Bash.
2026-08-18 16:45:02 +02:00
Dion VH
5872cc095c
fix(docker): docker cleanup correctly checks the coolify.managed label (#8831) 2026-08-17 12:07:12 +02:00
Benoît de Biolley
47a14765e1
Install prerequisites and Docker on Alpine
InstallPrerequisites had no alpine branch and threw before Docker
install was ever reached. Enable the community repository (commented
out on some images) and install curl/wget/git/jq with apk.

The Docker install now also pulls docker-cli-compose, which
validateDockerCompose() requires, creates /etc/docker since Alpine's
docker package does not ship it, and enables/starts the OpenRC service.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GXciegHbJhXbGvVn7mwgbR
2026-08-11 18:09:16 +02:00
Benoît de Biolley
7ec1c939bf
Install docker on alpine 2026-08-11 18:09:15 +02:00
Benoît de Biolley
57401630a4
✏️ Fix copy-paste issue 2026-08-11 18:08:41 +02:00
Benoît de Biolley
7cf7138482
Add support to install Docker 2026-08-11 18:08:40 +02:00
Benoît de Biolley
e6a838ad50
Also support upgrade packages 2026-08-11 18:08:40 +02:00
Benoît de Biolley
41cbd7192c
Add support for apk package manager (on Alpine Linux) 2026-08-11 18:08:39 +02:00
Andras Bacsai
f9caa5250d
feat(servers): add cross-instance server migration (#11075) 2026-08-07 23:07:55 +02:00
Andras Bacsai
8f7eb2d790 feat(server): auto-resolve Sentinel URL and polish setup UI
Ensure a Sentinel endpoint from instance FQDN/IP when enabling, use process dialogs for validation with install state, and tidy server create, boarding, metrics empty state, and log timestamps.
2026-08-07 15:21:18 +02:00
Andras Bacsai
8ae56587d5
feat(ui): Shadow UI redesign, domain management, and DNS autoconfigure (#11119)
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2026-08-03 23:11:54 +02:00
Andras Bacsai
c8a332a3bc fix(servers): isolate cloud status checks from SSH checks
Track provider state independently, skip SSH work for placeholder IPs, and clean up failed cloud server provisioning.
2026-07-11 22:52:10 +02:00
Andras Bacsai
c303c34cfd feat(digitalocean): add droplet provisioning support 2026-07-08 10:42:58 +02:00
Andras Bacsai
2dd264f802 fix(vultr): remove duplicate deletion error log 2026-07-08 10:23:31 +02:00
Andras Bacsai
6ed92cb97a fix(vultr): validate public network and token scope
Require IPv6 when public IPv4 is disabled, constrain cloud token
lookup by team and provider during deletion, and encode Vultr instance IDs
in API paths.
2026-07-07 21:39:57 +02:00
Andras Bacsai
c58b4fd69c Merge remote-tracking branch 'origin/next' into feature/vultr-cloud-provider 2026-07-07 13:44:37 +02:00
Andras Bacsai
9b060958aa
fix(ray): remove Ray debug hooks from runtime (#10847) 2026-07-03 11:40:20 +02:00
Andras Bacsai
cf6f5a2678
feat(registry): add configurable docker registry url (#9017) 2026-07-02 18:52:46 +02:00
Cornelis Terblanche
94abbe1590 Add Vultr cloud provider integration 2026-06-03 21:32:18 +02:00
Andras Bacsai
d681e656c7 fix(server): preserve remote HOME in Railpack buildx prune 2026-06-02 16:36:00 +02:00
Andras Bacsai
67687efc65 Merge remote-tracking branch 'origin/next' into 10507-railpack-cache-volume 2026-06-02 15:14:13 +02:00
Andras Bacsai
a75dc07567 fix(server): prune Railpack buildx cache via helper container 2026-06-02 15:14:01 +02:00
Andras Bacsai
d87ab279fb fix(log-drain): connect drain to service networks
Ensure the log drain container joins enabled service destination networks
when services start or the log drain restarts.
2026-06-02 14:33:57 +02:00
Andras Bacsai
5eec212ade fix(deploy): persist Railpack buildx metadata
Mount the host buildx metadata directory into helper containers so the
Railpack builder can be pruned during Docker cleanup.
2026-06-02 14:30:49 +02:00
Andras Bacsai
90aa4e7e73 chore(sentinel): remove stale resource exit check 2026-05-27 16:55:03 +02:00
Andras Bacsai
626cfb4a22 fix(sentinel): reduce resource churn from health flaps
Ignore health status changes in Sentinel push deduplication when the container lifecycle state is unchanged.

Scope stale resource checks to Sentinel servers whose heartbeat is stale, and avoid refreshing resource last_online_at on unchanged statuses.
2026-05-27 16:48:38 +02:00
Andras Bacsai
8e91d627a3 Merge remote-tracking branch 'origin/next' into feat/railpack 2026-04-30 11:47:06 +02:00
Andras Bacsai
00d6e83e7f fix(sentinel): auto-regenerate invalid or undecryptable tokens
Replace hard validation error with self-healing token logic. Tokens that
are null, empty, or fail decryption are now regenerated automatically
rather than crashing sentinel startup or metrics reads.

Token format changed from encrypted JSON payload to a plain 64-char
random string (Str::random), eliminating double-encryption issues and
simplifying the validation regex to cover the new character set.

New `ensureValidSentinelToken()` method on ServerSetting centralises
the get-or-regenerate contract; both StartSentinel and HasMetrics now
delegate to it. HasMetrics logs a warning when regeneration occurs so
operators know a sentinel container restart is required.

`isValidSentinelToken()` now accepts `?string` (null → false).

Adds feature tests covering: null/empty/undecryptable stored values,
idempotent return of valid tokens, RuntimeException only when
regeneration itself produces an invalid token, no double-encryption of
newly generated tokens, and cast round-trip consistency.
2026-04-29 16:44:12 +02:00
Andras Bacsai
5cef7cc092 Merge remote-tracking branch 'origin/next' into feat/railpack 2026-04-28 14:36:54 +02:00
Andras Bacsai
0620496c5f fix(server): exclude persistent resources from container prune
Prevent docker container prune from removing containers labeled as
database, application, or service types. Previously only proxy containers
were excluded, risking accidental cleanup of active resources.
2026-04-19 15:17:47 +02:00
Andras Bacsai
f573ad28a0 Merge remote-tracking branch 'origin/next' into feat/railpack 2026-04-09 17:12:26 +02:00
Andras Bacsai
1a603a10ed fix(models): replace forceFill/forceCreate with fill/create and add fillable guards
Replace all uses of `forceFill`, `forceCreate`, and `forceFill` with their
non-force equivalents across models, actions, controllers, and Livewire
components. Add explicit `$fillable` arrays to all affected Eloquent models
to enforce mass assignment protection.

Add ModelFillableCreationTest and ModelFillableRegressionTest to verify that
model creation respects fillable constraints and prevent regressions.
2026-03-31 13:45:31 +02:00
Andras Bacsai
1da1f32f0e refactor: use forceCreate() for internal model creation
Replace create() with forceCreate() across internal model creation operations to bypass mass assignment protection. This is appropriate for internal code that constructs complete model state without user input.

Add InternalModelCreationMassAssignmentTest to ensure internal model creation behavior is properly tested. Optimize imports by using shortened Livewire attribute references and removing unused imports.
2026-03-30 13:04:11 +02:00
Andras Bacsai
103d5b6c06 fix: sanitize error output in server validation logs
Escape dynamic error messages with htmlspecialchars() before
concatenating into HTML strings stored in validation_logs. Add a
Purify-based mutator on Server model as defense-in-depth, with a
dedicated HTMLPurifier config that allows only safe structural tags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 18:36:36 +01:00
Andras Bacsai
207002dbb7 Merge remote-tracking branch 'origin/next' into feat/railpack 2026-03-25 16:45:30 +01:00
Andras Bacsai
534b8be8d0 refactor(docker): simplify installation and remove version pinning
- Remove hardcoded Docker version constraints (27.0 → latest)
- Use official Docker install script (get.docker.com) instead of rancher URLs
- Simplify installation logic by removing nested version fallback checks
- Consolidate OS-specific installation methods and improve Arch Linux upgrade handling
2026-03-24 14:17:05 +01:00
Andras Bacsai
ff0de0bc31 fix(docker): add docker buildx prune for coolify-railpack builder 2026-03-24 06:59:29 +01:00
Andras Bacsai
fcd574e1eb fix(log-drain): prevent command injection by base64-encoding environment variables
Replace direct shell interpolation of environment values with base64 encoding
to prevent command injection attacks. Environment configuration is now built as
a single string, base64-encoded, then decoded to file atomically.

Also add regex validation to restrict environment field values to safe
characters (alphanumeric, underscore, hyphen, dot) at the application layer.

Fixes GHSA-3xm2-hqg8-4m2p
2026-03-10 22:22:51 +01:00
Andras Bacsai
096d4369e5 fix(sentinel): add token validation to prevent command injection
Add validation to ensure sentinel tokens contain only safe characters
(alphanumeric, dots, hyphens, underscores, plus, forward slash, equals),
preventing OS command injection vulnerabilities when tokens are
interpolated into shell commands.

- Add ServerSetting::isValidSentinelToken() validation method
- Validate tokens in StartSentinel action and metrics queries
- Improve shell argument escaping with escapeshellarg()
- Add comprehensive test coverage for token validation
2026-03-10 22:19:19 +01:00
Andras Bacsai
9702543e20 chore: prepare for PR 2026-03-10 18:32:19 +01:00
Andras Bacsai
fe36b70680 chore: prepare for PR 2026-02-25 12:00:24 +01:00
Andras Bacsai
e7db637a5d fix(docker): use dynamic OS ID for Docker repository URL
Replace hardcoded 'debian' with ${ID} from /etc/os-release to use
the correct Docker repository for Ubuntu, Debian, and Raspbian servers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 10:04:42 +01:00
Andras Bacsai
6a9027dcbf Add human-friendly output to upgrade script
- Show clear progress with numbered steps (1/6 through 6/6)
- Display header and footer banners
- Show individual image pull progress
- Show which containers are being stopped
- Display final success message with version and log location
- Keep detailed logging to file for debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 15:18:57 +01:00
Andras Bacsai
6ea563c6ac Fix: Prevent coolify-helper and coolify-realtime images from being pruned
Current version of infrastructure images (coolify-helper, coolify-realtime) are now protected from deletion during docker cleanup, regardless of which registry they're pulled from (ghcr.io, docker.io, or Docker Hub implicit). Old versions continue to be cleaned up as intended.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:38:52 +01:00