- Updated the `php-fpm-entrypoint` script to set default values for PHP configuration settings, including `memory_limit`, `max_execution_time`, `upload_max_filesize`, and `post_max_size`, when not explicitly provided through environment variables. This change ensures that the application has sensible defaults, improving reliability and reducing potential misconfigurations during deployment. These modifications aim to enhance the Docker setup by providing fallback values for critical PHP settings, thereby streamlining the configuration process and ensuring better performance in various environments.
138 lines
4.1 KiB
Bash
138 lines
4.1 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 "Optimizing application"
|
|
php ./artisan optimize
|
|
}
|
|
|
|
main "$@" |