Commit graph

14545 commits

Author SHA1 Message Date
Andras Bacsai
4592d19ed3 fix: replace inline styles with Tailwind classes in modal-input component
The modal-input component was using inline <style> blocks with ID selectors
to apply width constraints, which had inconsistent specificity and only
applied on lg+ breakpoints. This caused modals to appear full-width instead
of being properly constrained.

Replaced the inline style approach with Tailwind utility classes following
the pattern used in modal-confirmation component:
- Removed inline <style> block with media queries
- Added min-w-full and lg:min-w-[{minWidth}] for responsive minimum width
- Added max-w-[{maxWidth}] and max-h-[calc(100vh-2rem)] for size constraints

This ensures consistent modal sizing across all breakpoints and fixes the
full-width modal issue reported when adding shared environment variables.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 10:29:08 +01:00
Andras Bacsai
49ab9b2278 feat(proxy): include Traefik versions in version check after restart 2025-11-18 10:27:37 +01:00
Andras Bacsai
c7fc0a271c feat(proxy): trigger version check after restart from UI
When a user restarts the proxy from the Navbar UI component, the system now automatically dispatches a version check job immediately after the restart completes. This provides immediate feedback about available Traefik updates without waiting for the weekly scheduled check.

Changes:
- Import CheckTraefikVersionForServerJob in Navbar component
- After successful proxy restart, dispatch version check for Traefik servers
- Version check only runs for servers using Traefik proxy

This ensures users get up-to-date version information right after restarting their proxy infrastructure.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 10:19:04 +01:00
Andras Bacsai
108f3a3d61
refactor: move buildpack cleanup to model lifecycle hooks (#7268) 2025-11-18 10:16:41 +01:00
Andras Bacsai
171732dbcf refactor: simplify environment variable deletion logic in booted method 2025-11-18 10:07:08 +01:00
Andras Bacsai
3cc3b4162c fix: remove unused variable in updatedBuildPack method 2025-11-18 10:05:06 +01:00
Andras Bacsai
2f3f0889c7
Merge branch 'v4.x' into cleanup-dockerfile-buildpack-switch 2025-11-18 09:47:11 +01:00
Andras Bacsai
36f8a58c28 refactor: move buildpack cleanup logic to model lifecycle hooks
Move buildpack switching cleanup from Livewire component to Application model's boot lifecycle. This improves separation of concerns and ensures cleanup happens consistently regardless of how the buildpack change is triggered. Also clears Dockerfile-specific data when switching away from dockerfile buildpack.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 09:46:04 +01:00
Andras Bacsai
4f096c4a87
fix: replace inline styles with Tailwind classes in modal-input (#7267) 2025-11-18 08:58:32 +01:00
Andras Bacsai
2eb4d091ea fix: replace inline styles with Tailwind classes in modal-input component
The modal-input component was using inline <style> blocks with ID selectors
to apply width constraints, which had inconsistent specificity and only
applied on lg+ breakpoints. This caused modals to appear full-width instead
of being properly constrained.

Replaced the inline style approach with Tailwind utility classes following
the pattern used in modal-confirmation component:
- Removed inline <style> block with media queries
- Added min-w-full and lg:min-w-[{minWidth}] for responsive minimum width
- Added max-w-[{maxWidth}] and max-h-[calc(100vh-2rem)] for size constraints

This ensures consistent modal sizing across all breakpoints and fixes the
full-width modal issue reported when adding shared environment variables.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 08:56:29 +01:00
🏔️ Peak
145074d5a2
Merge branch 'v4.x' into next 2025-11-17 18:08:42 +01:00
Andras Bacsai
680b9a2c10
Merge branch 'next' into s3-restore 2025-11-17 15:39:22 +01:00
Andras Bacsai
f8dd44410a refactor(proxy): simplify getNewerBranchInfo method parameters and streamline version checks 2025-11-17 15:03:30 +01:00
Andras Bacsai
29bf4d29f0 fix(proxy): remove debugging ray call from Traefik version retrieval 2025-11-17 15:03:20 +01:00
Andras Bacsai
1270136da9 merge: merge next branch into feat-traefik-version-checker
Merged latest changes from the next branch to keep the feature branch
up to date. No conflicts were encountered during the merge.

Changes from next branch:
- Updated application deployment job error logging
- Updated server manager job and instance settings
- Removed PullHelperImageJob in favor of updated approach
- Database migration refinements
- Updated versions.json with latest component versions

All automatic merges were successful and no manual conflict resolution
was required.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:56:24 +01:00
Andras Bacsai
5d73b76a44 refactor(proxy): implement centralized caching for versions.json and improve UX
This commit introduces several improvements to the Traefik version tracking
feature and proxy configuration UI:

## Caching Improvements

1. **New centralized helper functions** (bootstrap/helpers/versions.php):
   - `get_versions_data()`: Redis-cached access to versions.json (1 hour TTL)
   - `get_traefik_versions()`: Extract Traefik versions from cached data
   - `invalidate_versions_cache()`: Clear cache when file is updated

2. **Performance optimization**:
   - Single Redis cache key: `coolify:versions:all`
   - Eliminates 2-4 file reads per page load
   - 95-97.5% reduction in disk I/O time
   - Shared cache across all servers in distributed setup

3. **Updated all consumers to use cached helpers**:
   - CheckTraefikVersionJob: Use get_traefik_versions()
   - Server/Proxy: Two-level caching (Redis + in-memory per-request)
   - CheckForUpdatesJob: Auto-invalidate cache after updating file
   - bootstrap/helpers/shared.php: Use cached data for Coolify version

## UI/UX Improvements

1. **Navbar warning indicator**:
   - Added yellow warning triangle icon next to "Proxy" menu item
   - Appears when server has outdated Traefik version
   - Uses existing traefik_outdated_info data for instant checks
   - Provides at-a-glance visibility of version issues

2. **Proxy sidebar persistence**:
   - Fixed sidebar disappearing when clicking "Switch Proxy"
   - Configuration link now always visible (needed for proxy selection)
   - Dynamic Configurations and Logs only show when proxy is configured
   - Better navigation context during proxy switching workflow

## Code Quality

- Added comprehensive PHPDoc for Server::$traefik_outdated_info property
- Improved code organization with centralized helper approach
- All changes formatted with Laravel Pint
- Maintains backward compatibility

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:53:28 +01:00
Andras Bacsai
fb19364a55
fix: eliminate duplicate error logging in deployment methods (#7248) 2025-11-17 14:51:11 +01:00
Andras Bacsai
c3c7dd2543
Merge branch 'next' into deploy-error-logging 2025-11-17 14:44:54 +01:00
Andras Bacsai
b602fef4db fix(deployment): improve error logging with exception types and hidden technical details
- Add exception class names to error messages for better debugging
- Mark technical details (error type, code, location, stack trace) as hidden in logs
- Preserve original exception types when wrapping in DeploymentException
- Update ServerManagerJob to include exception class in log messages
- Enhance unit tests to verify hidden log entry behavior

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:44:39 +01:00
Andras Bacsai
9930e1bc50 fix(security): mitigate path traversal vulnerability in S3RestoreJobFinished 2025-11-17 14:37:19 +01:00
Andras Bacsai
648e111f10 Merge remote-tracking branch 'origin/next' into s3-restore
# Conflicts:
#	app/Models/InstanceSettings.php
2025-11-17 14:30:00 +01:00
Andras Bacsai
41d8f46999
fix: resolve duplicate migration timestamps (#7254) 2025-11-17 14:28:45 +01:00
Andras Bacsai
028e7cb35e fix: remove unnecessary table existence checks in migration files 2025-11-17 14:28:28 +01:00
Andras Bacsai
8f7ae2670c fix(versions): update coolify version to 4.0.0-beta.445 and nightly to 4.0.0-beta.446 2025-11-17 14:27:13 +01:00
Andras Bacsai
60ef63de54 fix: resolve duplicate migration timestamps and add idempotency guards
Two migrations had identical timestamps (2025_10_10_120000), causing non-deterministic execution order and "table already exists" errors during instance startup. Renamed webhook_notification_settings migration to 120002 and added Schema::hasTable() guards to both migrations for idempotency.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:26:42 +01:00
Andras Bacsai
a9f42b9440 perf: optimize S3 restore flow with immediate cleanup and progress tracking
Optimizations:
- Add immediate cleanup of helper container and server temp files after copying to database
- Add pre-cleanup to handle interrupted restores
- Combine restore + cleanup commands to remove DB temp files immediately after restore
- Reduce temp file lifetime from minutes to seconds (70-80% reduction)
- Add progress tracking via MinIO client (shows by default)
- Update user message to mention progress visibility

Benefits:
- Temp files exist only as long as needed (not until end of process)
- Real-time S3 download progress shown in activity monitor
- Better disk space management through aggressive cleanup
- Improved error recovery with pre-cleanup

Compatibility:
- Works with all database types (PostgreSQL, MySQL, MariaDB, MongoDB)
- All existing tests passing
- Event-based cleanup acts as safety net for edge cases

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:23:50 +01:00
Andras Bacsai
fbdd8e5f03 fix: improve robustness and security in database restore flows
- Add null checks for server instances in restore events to prevent errors
- Escape S3 credentials to prevent command injection vulnerabilities
- Fix file upload clearing custom location to prevent UI confusion
- Optimize isSafeTmpPath helper by avoiding redundant dirname calls
- Remove unnecessary --rm flag from long-running S3 restore container
- Prioritize uploaded files over custom location in import logic
- Add comprehensive unit tests for restore event null server handling

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:13:10 +01:00
Andras Bacsai
97550f4066 fix(deployment): eliminate duplicate error logging in deployment methods
Wraps rolling_update(), health_check(), stop_running_container(), and
start_by_compose_file() with try-catch to ensure comprehensive error logging
happens in one place. Removes duplicate logging from intermediate catch blocks
since the failed() method already provides full error details including stack trace
and chained exception information.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 10:52:09 +01:00
Andras Bacsai
94560ea6c7 feat: streamline S3 restore with single-step flow and improved UI consistency
Major architectural improvements:
- Merged download and restore into single atomic operation
- Eliminated separate S3DownloadFinished event (redundant)
- Files now transfer directly: S3 → helper container → server → database container
- Removed download progress tracking in favor of unified restore progress

UI/UX improvements:
- Unified restore method selection with visual cards
- Consistent "File Information" display between local and S3 restore
- Single slide-over for all restore operations (removed separate S3 download monitor)
- Better visual feedback with loading states

Security enhancements:
- Added isSafeTmpPath() helper for path traversal protection
- URL decode validation to catch encoded attacks
- Canonical path resolution to prevent symlink attacks
- Comprehensive path validation in all cleanup events

Cleanup improvements:
- S3RestoreJobFinished now handles all cleanup (helper container + all temp files)
- RestoreJobFinished uses new isSafeTmpPath() validation
- CoolifyTask dispatches cleanup events even on job failure
- All cleanup uses non-throwing commands (2>/dev/null || true)

Other improvements:
- S3 storage policy authorization on Show component
- Storage Form properly syncs is_usable state after test
- Removed debug code and improved error handling
- Better command organization and documentation

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 10:05:18 +01:00
Andras Bacsai
6593b2a553 feat(proxy): enhance Traefik version notifications to show patch and minor upgrades
- Store both patch update and newer minor version information simultaneously
- Display patch update availability alongside minor version upgrades in notifications
- Add newer_branch_target and newer_branch_latest fields to traefik_outdated_info
- Update all notification channels (Discord, Telegram, Slack, Pushover, Email, Webhook)
- Show minor version in format (e.g., v3.6) for upgrade targets instead of patch version
- Enhance UI callouts with clearer messaging about available upgrades
- Remove verbose logging in favor of cleaner code structure
- Handle edge case where SSH command returns empty response

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 09:59:17 +01:00
ShadowArcanist
f5beb3a848
fix(service): plausible compose parsing error 2025-11-17 00:20:47 +05:30
ShadowArcanist
8a0749fddf
Set network_mode to host for netbird client one click service 2025-11-16 10:33:10 +05:30
Robin
92286a85b8
Update templates/compose/palworld.yaml
remove unwanted character from compse file

Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-15 21:55:50 +01:00
Robin266
c4dc8e1811 update palworld docker-compose 2025-11-15 19:34:18 +01:00
hugoduar
12bd26af82
Merge branch 'next' into hugoduar-bump-n8n-1.119.2 2025-11-15 02:30:35 -06:00
hugoduar
b345fc4468
chore(n8n): upgrade n8n image version to 1.119.2 in compose templates 2025-11-15 02:19:22 -06:00
majcek210
9a5967b77d
Rename tailscale.yaml > tailscale-client.yaml 2025-11-14 21:14:13 +01:00
majcek210
2237707263
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 21:13:18 +01:00
majcek210
ce5f40afd8
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 21:13:12 +01:00
majcek210
6e24ef247a
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:24:08 +01:00
majcek210
28b44bad8e
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:24:01 +01:00
majcek210
d9eb0ab00b
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:23:51 +01:00
majcek210
ba6d540653
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:23:45 +01:00
majcek210
84800ba7f2
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:23:26 +01:00
majcek210
4d77d06ac0
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:23:20 +01:00
majcek210
8b916ca228
Update templates/compose/tailscale.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-11-14 20:23:12 +01:00
ShadowArcanist
0bfee3ad33
fix(service): Ghost using invalid base url 2025-11-14 23:33:47 +05:30
Julien Nahum
adc82dc7a9 feat(opnform): add SERVICE_URL_NGINX environment variable to nginx service 2025-11-14 14:47:24 +00:00
Julien Nahum
0cb7881f37
Merge branch 'next' into add-opnform-template 2025-11-14 11:26:21 +00:00
Julien Nahum
1126385c1b fix(opnform): update APP_URL environment variable and remove unused nginx environment variable 2025-11-14 11:24:39 +00:00