Files
opnform-host-nginx/docker/php-fpm-entrypoint
Julien Nahum 014a1f4408 Enhance Application Optimization in Docker Entrypoint
- Added a cache clearing step in the `optimize_application` function of the `php-fpm-entrypoint` script. This new line executes `php ./artisan optimize:clear` before optimizing the application, ensuring that any stale cache is removed, which can lead to improved performance and reliability during application optimization.

This change aims to enhance the application's responsiveness by ensuring that the optimization process starts with a clean state, thereby reducing potential issues related to outdated cached data.
2025-05-23 20:40:56 +02:00

141 lines
4.2 KiB
Bash

#!/bin/bash
main() {
local COMMAND_AS_STRING="$*"
local ROLE="api" # Default role
case "$COMMAND_AS_STRING" in
*"artisan queue:work"*)
ROLE="worker"
;;
*"artisan schedule:work"*)
ROLE="scheduler"
;;
*)
# Defaults to "api" for any other command (e.g., php-fpm)
ROLE="api"
;;
esac
echo "Determined role: $ROLE for command: $COMMAND_AS_STRING"
apply_php_configuration
prep_file_permissions
prep_storage
wait_for_db
if [ "$ROLE" = "api" ]; then
echo "Running setup for API role..."
apply_db_migrations
run_init_project
optimize_application
echo "Starting server for API role with command: $@"
exec "$@"
elif [ "$ROLE" = "scheduler" ]; then
echo "Running setup for Scheduler role..."
echo "Initializing scheduler status for first run (entrypoint)"
php ./artisan app:scheduler-status --mode=record
echo "Starting scheduler with command: $@"
exec "$@"
elif [ "$ROLE" = "worker" ]; then
echo "Running setup for Worker role..."
echo "Starting worker with command: $@"
exec "$@"
else
# This case should ideally not be reached if ROLE defaults to "api"
echo "Error: Unknown role '$ROLE' determined from command '$COMMAND_AS_STRING'. Exiting."
exit 1
fi
}
apply_php_configuration() {
echo "Applying PHP configuration from environment variables"
# Create custom PHP config file
PHP_CUSTOM_CONFIG_FILE="/usr/local/etc/php/conf.d/99-custom.ini"
# Apply memory limit if provided, otherwise default to 1G
if [ -n "$PHP_MEMORY_LIMIT" ]; then
echo "memory_limit = $PHP_MEMORY_LIMIT" >> $PHP_CUSTOM_CONFIG_FILE
else
echo "memory_limit = 1G" >> $PHP_CUSTOM_CONFIG_FILE
fi
# Apply max execution time if provided, otherwise default to 300s
if [ -n "$PHP_MAX_EXECUTION_TIME" ]; then
echo "max_execution_time = $PHP_MAX_EXECUTION_TIME" >> $PHP_CUSTOM_CONFIG_FILE
else
echo "max_execution_time = 300" >> $PHP_CUSTOM_CONFIG_FILE
fi
# Apply upload max filesize if provided, otherwise default to 50M
if [ -n "$PHP_UPLOAD_MAX_FILESIZE" ]; then
echo "upload_max_filesize = $PHP_UPLOAD_MAX_FILESIZE" >> $PHP_CUSTOM_CONFIG_FILE
else
echo "upload_max_filesize = 50M" >> $PHP_CUSTOM_CONFIG_FILE
fi
# Apply post max size if provided, otherwise default to 55M
if [ -n "$PHP_POST_MAX_SIZE" ]; then
echo "post_max_size = $PHP_POST_MAX_SIZE" >> $PHP_CUSTOM_CONFIG_FILE
else
echo "post_max_size = 55M" >> $PHP_CUSTOM_CONFIG_FILE
fi
# Log applied configuration
echo "Applied PHP configuration:"
cat $PHP_CUSTOM_CONFIG_FILE
}
prep_file_permissions() {
chmod a+x ./artisan
}
prep_storage() {
local app_storage_path="/usr/share/nginx/html/storage"
# Create Laravel-specific directories directly in the mounted volume
mkdir -p "$app_storage_path/app/public"
mkdir -p "$app_storage_path/framework/cache/data"
mkdir -p "$app_storage_path/framework/sessions"
mkdir -p "$app_storage_path/framework/views"
mkdir -p "$app_storage_path/logs"
# Set permissions for the entire storage directory
chown -R www-data:www-data "$app_storage_path"
chmod -R 775 "$app_storage_path"
touch /var/log/opnform.log
chown www-data /var/log/opnform.log
# Run Laravel's storage link command (ensure script is run from app root or adjust path to artisan)
echo "Creating public storage symlink"
php ./artisan storage:link
}
wait_for_db() {
echo "Waiting for DB to be ready"
until php ./artisan migrate:status 2>&1 | grep -q -E "(Migration table not found|Migration name)"; do
sleep 1
done
}
apply_db_migrations() {
echo "Running DB Migrations"
php ./artisan migrate --force
}
run_init_project() {
echo "Running app:init-project command"
php ./artisan app:init-project
}
optimize_application() {
echo "Clearing application cache"
php ./artisan optimize:clear
echo "Optimizing application"
php ./artisan optimize
}
main "$@"