## Problem
Scheduled tasks, backups, and auto-updates stopped working after 1-2 months
with error: MaxAttemptsExceededException: App\Jobs\ScheduledJobManager has
been attempted too many times.
Root cause: ScheduledJobManager used WithoutOverlapping with only
releaseAfter(60), causing locks without expiration (TTL=-1) that persisted
indefinitely when jobs hung or processes crashed.
## Solution
### Part 1: Prevention (Future Locks)
- Added expireAfter(60) to ScheduledJobManager middleware
- Lock now auto-expires after 60 seconds (matches everyMinute schedule)
- Changed from releaseAfter(60) to expireAfter(60)->dontRelease()
- Follows Laravel best practices and matches other Coolify jobs
### Part 2: Recovery (Existing Locks)
- Enhanced cleanup:redis command with --clear-locks flag
- Scans Redis for stale locks (TTL=-1) and removes them
- Called automatically during app:init on startup/upgrade
- Provides immediate recovery for affected instances
## Changes
- app/Jobs/ScheduledJobManager.php: Added expireAfter(60)->dontRelease()
- app/Console/Commands/CleanupRedis.php: Added cleanupCacheLocks() method
- app/Console/Commands/Init.php: Auto-clear locks on startup
- tests/Unit/ScheduledJobManagerLockTest.php: Test to prevent regression
- STALE_LOCK_FIX.md: Complete documentation
## Testing
- Unit tests pass (2 tests, 8 assertions)
- Code formatted with Pint
- Matches pattern used by CleanupInstanceStuffsJob
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add affiliate link when users add their first Hetzner token
- Shows in both modal and full-page layouts
- Friendly messaging about supporting Coolify and getting credits
- Removed unnecessary environment variables and added security settings for Elasticsearch and Kibana.
- Implemented password setup for the kibana_system user during the Kibana setup process.
- Updated healthcheck commands for both services to ensure proper monitoring and readiness.
- Introduced a new setup service for Kibana to streamline user password configuration.
- Implemented logic to retrieve and display the default user password for Elasticsearch in the extraFields method of the Service model.
- Enhanced data collection for environment variables related to Elasticsearch, improving service configuration management.
- Enhanced environment variable configuration for the server and web services, including database and encryption settings.
- Updated health check intervals and retries for better reliability.
- Changed MinIO service configuration to use port 9000 and adjusted health checks accordingly.
- Improved volume management for data persistence.
These changes aim to streamline the deployment process and ensure better service health monitoring.
- Change MinIO image from 'minio/minio:latest' to 'quay.io/minio/minio:latest'
This matches the official Coolify MinIO template for consistency
- Update health check from curl-based to 'mc ready local' command
This is more reliable and matches the official MinIO template
- Update health check intervals and retries to match official template
(interval: 5s, timeout: 20s, retries: 10)
- Update service templates JSON files with corrected configuration
Addresses @devdilson's feedback about MinIO configuration consistency
with existing Coolify templates and best practices.
- Fix MinIO endpoint configuration to use SERVICE_URL_MINIO_3200 for public access
This resolves the issue with signed URLs for photo uploads as noted by @devdilson
- Add ENTE_INTERNAL_ADMIN environment variable to grant first account admin permissions
This prevents the 10GB storage limit issue mentioned in the review
- Update service templates JSON files with the corrected configuration
- Ensure MinIO service has proper SERVICE_URL configuration for external access
Addresses all feedback from @devdilson's review comments:
- Fixes signed URL access for photo uploads
- Grants admin permissions to first account
- Maintains proper service architecture for Coolify deployment
- Add ente-photos.yaml template with museum, postgres, and minio services
- Add custom SVG logo for Ente Photos
- Update service templates JSON files with new template
- Updated Appwrite service template to use the latest version of the compose configuration.
- Adjusted the `_APP_CONSOLE_HOSTNAMES` environment variable to remove the default values, allowing for more flexible hostname configuration.
- Updated the Appwrite compose file to reflect these changes.
This ensures better customization for users deploying Appwrite services.
* Update wordpress-with-mysql.yaml
Use the correct naming for WordPress.
It's "WordPress", not "Wordpress".
* replace Wordpress with WordPress in templates
* change slogans for templates
* fix in a livewire template file
- fixed URL issue as it was set to an empty string which caused a 404 error
- removed port mapping as it is not needed and insecure
- formatted the Compose file