diff --git a/.github/workflows/params-php.yml b/.github/workflows/params-php.yml
index 326351804..d7efe5fd8 100644
--- a/.github/workflows/params-php.yml
+++ b/.github/workflows/params-php.yml
@@ -20,6 +20,7 @@ env:
{"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "apache-2.4"},
{"PHP_SERVER": "PHP 8.3", "HTTPD_SERVER": "apache-2.4"},
{"PHP_SERVER": "PHP 8.4", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 8.5", "HTTPD_SERVER": "apache-2.4"},
{"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "nginx-stable"},
{"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "nginx-stable"},
@@ -27,13 +28,15 @@ env:
{"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "nginx-stable"},
{"PHP_SERVER": "PHP 8.3", "HTTPD_SERVER": "nginx-stable"},
{"PHP_SERVER": "PHP 8.4", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 8.5", "HTTPD_SERVER": "nginx-stable"},
{"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "nginx-mainline"},
{"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "nginx-mainline"},
{"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "nginx-mainline"},
{"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "nginx-mainline"},
{"PHP_SERVER": "PHP 8.3", "HTTPD_SERVER": "nginx-mainline"},
- {"PHP_SERVER": "PHP 8.4", "HTTPD_SERVER": "nginx-mainline"}
+ {"PHP_SERVER": "PHP 8.4", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 8.5", "HTTPD_SERVER": "nginx-mainline"}
]
diff --git a/.gitignore b/.gitignore
index e461d8237..a3c91ef43 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,6 +49,7 @@
/log/php-fpm-8.2/*
/log/php-fpm-8.3/*
/log/php-fpm-8.4/*
+/log/php-fpm-8.5/*
!/log/.keepme
!/log/*/.keepme
@@ -96,6 +97,7 @@
/cfg/php-ini-8.2/*.ini
/cfg/php-ini-8.3/*.ini
/cfg/php-ini-8.4/*.ini
+/cfg/php-ini-8.5/*.ini
# Ignore custom disabled PHP.ini configs
/cfg/php-ini-5.6/*.ini-disabled
@@ -109,6 +111,7 @@
/cfg/php-ini-8.2/*.ini-disabled
/cfg/php-ini-8.3/*.ini-disabled
/cfg/php-ini-8.4/*.ini-disabled
+/cfg/php-ini-8.5/*.ini-disabled
# Ignore custom PHP-FPM configs
/cfg/php-fpm-5.6/*.conf
@@ -121,7 +124,8 @@
/cfg/php-fpm-8.1/*.conf
/cfg/php-fpm-8.2/*.conf
/cfg/php-fpm-8.3/*.conf
-/cfg/php-ini-8.4/*.conf
+/cfg/php-fpm-8.4/*.conf
+/cfg/php-fpm-8.5/*.conf
# Ignore custom PHP-FPM startup scripts
/autostart/*.sh
@@ -136,6 +140,7 @@
/cfg/php-startup-8.2/*.sh
/cfg/php-startup-8.3/*.sh
/cfg/php-startup-8.4/*.sh
+/cfg/php-startup-8.5/*.sh
# Ignore custom Varnish configs
/cfg/varnish-4/*.vcl
@@ -160,6 +165,7 @@
/mod/php-fpm-8.2/*.so
/mod/php-fpm-8.3/*.so
/mod/php-fpm-8.4/*.so
+/mod/php-fpm-8.5/*.so
# Ignore supervisord configs
/supervisor/*.conf
diff --git a/.tests/scripts/get-modules.sh b/.tests/scripts/get-modules.sh
index b997ff91e..38302c3e4 100755
--- a/.tests/scripts/get-modules.sh
+++ b/.tests/scripts/get-modules.sh
@@ -67,6 +67,7 @@ PHP81_BASE="$( get_modules "8.1" "base" )"
PHP82_BASE="$( get_modules "8.2" "base" )"
PHP83_BASE="$( get_modules "8.3" "base" )"
PHP84_BASE="$( get_modules "8.4" "base" )"
+PHP85_BASE="$( get_modules "8.5" "base" )"
PHP74_MODS="$( get_modules "7.4" "mods" )"
PHP80_MODS="$( get_modules "8.0" "mods" )"
@@ -74,13 +75,14 @@ PHP81_MODS="$( get_modules "8.1" "mods" )"
PHP82_MODS="$( get_modules "8.2" "mods" )"
PHP83_MODS="$( get_modules "8.3" "mods" )"
PHP84_MODS="$( get_modules "8.4" "mods" )"
+PHP85_MODS="$( get_modules "8.5" "mods" )"
###
### Todo: add ioncube
###
-#MODS="$( echo "${PHP74_MODS}, ${PHP80_MODS}, ${PHP81_MODS}, ${PHP82_MODS}, ${PHP83_MODS}, ${PHP84_MODS}" | sed_command 's/,/\n/g' | sed_command -e 's/^\s*//g' -e 's/\s*$//g' | sort -uf )"
-MODS_RAW="${PHP74_MODS},${PHP80_MODS},${PHP81_MODS},${PHP82_MODS},${PHP83_MODS},${PHP84_MODS}"
+#MODS="$( echo "${PHP74_MODS}, ${PHP80_MODS}, ${PHP81_MODS}, ${PHP82_MODS}, ${PHP83_MODS}, ${PHP84_MODS}, ${PHP85_MODS}" | sed_command 's/,/\n/g' | sed_command -e 's/^\s*//g' -e 's/\s*$//g' | sort -uf )"
+MODS_RAW="${PHP74_MODS},${PHP80_MODS},${PHP81_MODS},${PHP82_MODS},${PHP83_MODS},${PHP84_MODS},${PHP85_MODS}"
MODS="$(echo "$MODS_RAW" | tr ',' '\n' | grep -v '^$' | sort -uf)"
@@ -94,8 +96,8 @@ E="🗸" # Enabled mods modules (can be disabled)
D="d" # Disabled modules (can be enabled)
U=" " # Unavailable
-echo "| Modules | PHP 7.4 | PHP 8.0 | PHP 8.1 | PHP 8.2 | PHP 8.3 | PHP 8.4 |"
-echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
+echo "| Modules | PHP 7.4 | PHP 8.0 | PHP 8.1 | PHP 8.2 | PHP 8.3 | PHP 8.4 | PHP 8.5 |"
+echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
echo "${MODS}" | while read -r line; do
# Ignore modules
if [ "${line}" = "Core" ]; then
@@ -195,5 +197,20 @@ echo "${MODS}" | while read -r line; do
printf " %s |" "${U}" # Not available
fi
+ # ---------- PHP 8.5 ----------#
+ if echo ",${PHP85_MODS}," | grep -Eq ",${line},"; then
+ if echo "${DISABLED}" | grep -Eq ",${line},"; then
+ printf " %s |" "${D}" # Currently disabled
+ else
+ if echo ",${PHP85_BASE}," | grep -Eq ",${line},"; then
+ printf " %s |" "${B}" # Enabled, but cannot be disabled
+ else
+ printf " %s |" "${E}" # Enabled, can be disabled
+ fi
+ fi
+ else
+ printf " %s |" "${U}" # Not available
+ fi
+
printf "\\n"
done
diff --git a/.tests/tests/framework-cakephp-php8.sh b/.tests/tests/framework-cakephp-php8.sh
index 6951f5b0e..66ecfa38b 100755
--- a/.tests/tests/framework-cakephp-php8.sh
+++ b/.tests/tests/framework-cakephp-php8.sh
@@ -14,7 +14,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
RETRIES=10
# see framework-cakephp.sh for PHP <8 tests
-DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.4")
+DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.4" "8.5")
PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
diff --git a/.tests/tests/framework-cakephp.sh b/.tests/tests/framework-cakephp.sh
index f8a451640..ef5eb8287 100755
--- a/.tests/tests/framework-cakephp.sh
+++ b/.tests/tests/framework-cakephp.sh
@@ -14,7 +14,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
RETRIES=10
# see framework-cakephp-php8.sh for PHP 8+ tests
-DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4")
+DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
diff --git a/.tests/tests/framework-drupal.sh b/.tests/tests/framework-drupal.sh
index 363cfdab2..a63c6bcc8 100755
--- a/.tests/tests/framework-drupal.sh
+++ b/.tests/tests/framework-drupal.sh
@@ -13,7 +13,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
. "${SCRIPT_PATH}/../scripts/.lib.sh"
RETRIES=10
-DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4")
+DISABLED_VERSIONS=("5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
DISABLED_MYSQL_VERSIONS=("mysql-8.0" "percona-8.0")
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09e6a82cf..3fca214ce 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,16 @@ Make sure to have a look at [UPDATING.md](https://github.com/cytopia/devilbox/bl
## Unreleased
+### Added
+- Added PHP 8.5
+
+### Changed
+- Updated php-fpm images to `0.161` (PHP 8.4.27 / 8.5.12; PHP 8.1+ on Debian bookworm, 7.4/8.0 on bullseye)
+- `dvl up` without `DEVILBOX_CONTAINERS` now starts the full default list (adds `php84` and `php85`); re-sync `docker-compose.override.yml` (`dvl update`) or set `DEVILBOX_CONTAINERS`
+
+### Fixed
+- `.gitignore` ignored `cfg/php-ini-8.4/*.conf` instead of `cfg/php-fpm-8.4/*.conf`
+
## Release v3.0.1 (2025-07-17)
diff --git a/README.md b/README.md
index 2d2d52934..1197c244d 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ All created projects (frontend or backend) will be able to communicate with one
**Available Architectures:** `amd64`, `arm64`
-**Available PHP Versions:** `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`
+**Available PHP Versions:** `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`, `8.5`
**Deprecated PHP Version:** `5.6`, `7.0`, `7.1`, `7.2`, `7.3` only available in `0.153` and previous
@@ -726,6 +726,30 @@ Every single attachable container comes with many different versions. In order t
|
|
+
+ |
+ |
+ 8.4 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+ |
+ |
+ 8.5 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
diff --git a/cfg/php-fpm-8.5/.keepme b/cfg/php-fpm-8.5/.keepme
new file mode 100644
index 000000000..e69de29bb
diff --git a/cfg/php-fpm-8.5/README.md b/cfg/php-fpm-8.5/README.md
new file mode 100644
index 000000000..6b8128090
--- /dev/null
+++ b/cfg/php-fpm-8.5/README.md
@@ -0,0 +1,54 @@
+# PHP-FPM 8.5 config directory
+
+## General
+
+* Add you custom php-fpm.conf files into this directory.
+* Only files ending by `.conf` will be enabled
+* Only files ending by `.conf` are ignored by git
+
+
+## Example files
+
+This directory also holds three example files:
+
+| File | Description |
+|---------------------------------|---------------------------------------------|
+| `devilbox-fpm.conf-default` | Represents current PHP-FPM default settings |
+| `devilbox-fpm.conf-pm_dynamic` | Example settings for dynamic workers |
+| `devilbox-fpm.conf-pm_ondemand` | Example settings for ondemand workers |
+
+* Do not edit these example files!
+* Copy them to a new file (in case you want to use them)
+
+
+## Worker configuration
+
+When changing worker processes or scheduler, the following commands will come in handy
+to monitor number of processes and memory consumption.
+
+```bash
+# Show current PHP-FPM child memory consumption in MB
+ps -ylC php-fpm --sort:rss | awk '!/RSS/ { s+=$8 } END { printf "%dM\n", s/1024 }'
+
+# (repeatedly) show current PHP-FPM child memory consumption in MB
+watch --interval=1 "ps -ylC php-fpm --sort:rss | awk '"'!'"/RSS/ { s+=\$8 } END { printf \"%dM\n\", s/1024 }'"
+
+# (repeatedly) Current number of PHP-FPM childs
+watch --interval=1 "ps auxw | grep -E 'php-(cgi|fpm)' | grep -vE 'grep|master' | wc -l"
+```
+
+
+## Overwriting
+
+If multiple `.conf` files are present in this directory specifying different values for the
+same settings, the last file (alphabetically by filename) will overwrite any previous values.
+
+
+## Compatibility
+
+**Note:**
+
+PHP-FPM 5.2 uses XML-style configuration and does not allow includes.
+If you want to change php-fpm.conf for PHP-FPM 5.2 you need to adjust the main configuration file.
+
+See `php-fpm-5.2/` directory.
diff --git a/cfg/php-fpm-8.5/devilbox-fpm.conf-default b/cfg/php-fpm-8.5/devilbox-fpm.conf-default
new file mode 100644
index 000000000..37e1f8ed5
--- /dev/null
+++ b/cfg/php-fpm-8.5/devilbox-fpm.conf-default
@@ -0,0 +1,80 @@
+; ############################################################
+; Devilbox php-fpm.conf: Current default settings
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file shows example settings that are currently effective
+; * If this file is enabled, nothing will change as it reflects the current default settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".conf" extension
+; * Only files with ".conf" extensions will be applied by PHP-FPM
+
+
+; ###
+; ### PHP-FPM global settings
+; ###
+;
+[global]
+
+; Error log level. Possible values: alert, error, warning, notice, debug. Default value: notice.
+log_level = notice
+
+
+
+; ###
+; ### Pool configuratoin
+; ###
+
+[www]
+
+; The timeout for serving a single request after which the worker process will be killed.
+; This option should be used when the 'max_execution_time' ini option does not stop script
+; execution for some reason.
+request_terminate_timeout = 120s
+
+
+; A maximum of backlog incoming connections will be queued for processing.
+; If a connection request arrives with the queue full the client may receive an error with an
+; indication of ECONNREFUSED, or, if the underlying protocol supports retransmission,
+; the request may be ignored so that retries may succeed.
+; This should not be greater than `cat /proc/sys/net/core/somaxconn`, otherwise connections
+; are silently truncated
+listen.backlog = 1024
+
+
+; static - the number of child processes is fixed (pm.max_children).
+;
+; dynamic - the number of child processes is set dynamically based on the following directives:
+; pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
+;
+; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where
+; pm.start_servers are started when the service is started.
+pm = ondemand
+
+; The maximum number of child processes to be created
+pm.max_children = 50
+
+; The number of child processes created on startup. Used only when pm is set to dynamic.
+; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
+pm.start_servers = 4
+
+; The desired minimum number of idle server processes.
+pm.min_spare_servers = 2
+
+; The desired maximum number of idle server processes.
+pm.max_spare_servers = 6
+
+; The number of requests each child process should execute before respawning.
+; This can be useful to work around memory leaks in 3rd party libraries.
+; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
+; Default value: 0.
+pm.max_requests = 500
+
+; The number of seconds after which an idle process will be killed. Used only when pm is set to ondemand
+pm.process_idle_timeout = 10s
+
+; vim: set ft=dosini:
diff --git a/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_dynamic b/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_dynamic
new file mode 100644
index 000000000..59ec044b9
--- /dev/null
+++ b/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_dynamic
@@ -0,0 +1,46 @@
+; ############################################################
+; # Devilbox php-fpm.conf: dynamic example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible dynamic example configuration
+; * If this file is enabled, it will overwrite the current worker settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".conf" extension
+; * Only files with ".conf" extensions will be applied by PHP-FPM
+
+
+; ###
+; ### Pool configuratoin
+; ###
+
+[www]
+
+; dynamic - the number of child processes is set dynamically based on the following directives:
+pm = dynamic
+
+; The maximum number of child processes to be created
+pm.max_children = 50
+
+; The number of child processes created on startup. Used only when pm is set to dynamic.
+; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.
+pm.start_servers = 4
+
+; The desired minimum number of idle server processes.
+pm.min_spare_servers = 2
+
+; The desired maximum number of idle server processes.
+pm.max_spare_servers = 6
+
+; The number of requests each child process should execute before respawning.
+; This can be useful to work around memory leaks in 3rd party libraries.
+; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
+; Default value: 0.
+pm.max_requests = 500
+
+
+; vim: set ft=dosini:
diff --git a/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_ondemand b/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_ondemand
new file mode 100644
index 000000000..84cd3ca72
--- /dev/null
+++ b/cfg/php-fpm-8.5/devilbox-fpm.conf-pm_ondemand
@@ -0,0 +1,39 @@
+; ############################################################
+; # Devilbox php-fpm.conf: ondemand example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible ondemand example configuration
+; * If this file is enabled, it will overwrite the current worker settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".conf" extension
+; * Only files with ".conf" extensions will be applied by PHP-FPM
+
+
+; ###
+; ### Pool configuratoin
+; ###
+
+[www]
+
+; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where
+; pm.start_servers are started when the service is started.
+pm = ondemand
+
+; The maximum number of child processes to be created
+pm.max_children = 50
+
+; The number of requests each child process should execute before respawning.
+; This can be useful to work around memory leaks in 3rd party libraries.
+; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
+; Default value: 0.
+pm.max_requests = 500
+
+; The number of seconds after which an idle process will be killed.
+pm.process_idle_timeout = 10s
+
+; vim: set ft=dosini:
diff --git a/cfg/php-ini-8.5/.keepme b/cfg/php-ini-8.5/.keepme
new file mode 100644
index 000000000..e69de29bb
diff --git a/cfg/php-ini-8.5/README.md b/cfg/php-ini-8.5/README.md
new file mode 100644
index 000000000..c686e13ea
--- /dev/null
+++ b/cfg/php-ini-8.5/README.md
@@ -0,0 +1,26 @@
+# PHP 8.5 ini directory
+
+## General
+
+* Add you custom php.ini files into this directory.
+* Only files ending by `.ini` will be enabled
+* Only files ending by `.ini` are ignored by git
+
+
+## Example files
+
+This directory also holds two example files:
+
+| File | Description |
+|----------------------------|-----------------------------------------|
+| `devilbox-php.ini-default` | Represents current PHP default settings |
+| `devilbox-php.ini-xdebug ` | Example settings for Xdebug |
+
+* Do not edit these example files!
+* Copy them to a new file (in case you want to use them)
+
+
+## Overwriting
+
+If multiple `.ini` files are present in this directory specifying different values for the
+same settings, the last file (alphabetically by filename) will overwrite any previous values.
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-default b/cfg/php-ini-8.5/devilbox-php.ini-default
new file mode 100644
index 000000000..83d037120
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-default
@@ -0,0 +1,63 @@
+; ############################################################
+; # Devilbox php.ini: Current default settings
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file shows example settings that are currently effective
+; * If this file is enabled, nothing will change as it reflects the current default settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".ini" extension
+; * Only files with ".ini" extensions will be applied by PHP
+
+
+
+;
+; PHP.ini configuration
+;
+[PHP]
+
+; Memory
+; Note: "memory_limit" should be larger than "post_max_size"
+memory_limit = 512M
+
+
+; Timeouts
+max_execution_time = 120
+max_input_time = 120
+
+
+; Uploads
+; Note: "post_max_size" should be greater than "upload_max_filesize"
+post_max_size = 72M
+upload_max_filesize = 64M
+max_file_uploads = 20
+
+
+; Vars
+variables_order = EGPCS
+max_input_vars = 8000
+max_input_nesting_level = 64
+
+
+; Error reporting
+; Note: error_log is dynamic and handled during start to set appropriate setting
+error_reporting = E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED
+xmlrpc_errors = Off
+report_memleaks = On
+display_errors = On
+display_startup_errors = On
+log_errors = On
+html_errors = On
+
+
+; Xdebug settings
+xdebug.default_enable = Off
+xdebug.profiler_enable = Off
+xdebug.remote_enable = Off
+xdebug.remote_autostart = Off
+
+; vim: set ft=dosini:
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-mailhog b/cfg/php-ini-8.5/devilbox-php.ini-mailhog
new file mode 100644
index 000000000..2ed99e535
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-mailhog
@@ -0,0 +1,22 @@
+; ############################################################
+; # Devilbox php.ini: MailHog example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible Xdebug example configuration
+; * If this file is enabled, it will overwrite the current Xdebug settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".ini" extension
+; * Only files with ".ini" extensions will be applied by PHP
+
+
+
+;
+; PHP.ini configuration
+;
+[PHP]
+sendmail_path = '/usr/local/bin/mhsendmail --smtp-addr="mailhog:1025"'
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-mailpit b/cfg/php-ini-8.5/devilbox-php.ini-mailpit
new file mode 100644
index 000000000..d5e6a9464
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-mailpit
@@ -0,0 +1,22 @@
+; ############################################################
+; # Devilbox php.ini: MailPit example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible Xdebug example configuration
+; * If this file is enabled, it will overwrite the current Xdebug settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".ini" extension
+; * Only files with ".ini" extensions will be applied by PHP
+
+
+
+;
+; PHP.ini configuration
+;
+[PHP]
+sendmail_path = "/usr/sbin/sendmail -S mailpit:1025 -t"
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-msmtp b/cfg/php-ini-8.5/devilbox-php.ini-msmtp
new file mode 100644
index 000000000..58f4fc1b1
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-msmtp
@@ -0,0 +1,22 @@
+; ############################################################
+; # Devilbox php.ini: msmtp example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible Xdebug example configuration
+; * If this file is enabled, it will overwrite the current Xdebug settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".ini" extension
+; * Only files with ".ini" extensions will be applied by PHP
+
+
+
+;
+; PHP.ini configuration
+;
+[smtp]
+sendmail_path = '/usr/local/bin/msmtp -t'
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-performance b/cfg/php-ini-8.5/devilbox-php.ini-performance
new file mode 100644
index 000000000..b465fff85
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-performance
@@ -0,0 +1,51 @@
+; Max execution time per request
+max_execution_time = 300
+
+; Max memory per instance
+memory_limit = 4G
+
+;The maximum size of an uploaded file.
+upload_max_filesize = 128M
+
+; Increase max input variables value
+max_input_vars = 10000000
+
+;Sets max size of post data allowed. This setting also affects file upload.
+;To upload large files, this value must be larger than upload_max_filesize
+post_max_size = 128M
+
+session.auto_start = off
+session.gc_probability = 0
+suhosin.session.cryptua = off
+
+; Disable garbage collector
+zend.enable_gc = off
+
+[opcache]
+opcache.enable = 1
+opcache.enable_cli = 1
+opcache.memory_consumption = 2048
+opcache.interned_strings_buffer = 20
+opcache.file_cache = /tmp
+opcache.max_accelerated_files = 80000
+opcache.max_wasted_percentage = 5
+opcache.use_cwd = 1
+opcache.validate_timestamps = 1
+opcache.revalidate_freq = 0
+opcache.file_update_protection = 2
+opcache.revalidate_path = 0
+opcache.save_comments = 1
+opcache.load_comments = 1
+opcache.fast_shutdown = 1
+opcache.enable_file_override = 0
+opcache.optimization_level = 0xffffffff
+opcache.inherited_hack = 1
+opcache.blacklist_filename = ""
+opcache.max_file_size = 0
+opcache.consistency_checks = 0
+opcache.force_restart_timeout = 180
+opcache.error_log = ""
+opcache.log_verbosity_level = 1
+opcache.preferred_memory_model = ""
+opcache.protect_memory = 0
+apc.cache_by_default = false
diff --git a/cfg/php-ini-8.5/devilbox-php.ini-xdebug b/cfg/php-ini-8.5/devilbox-php.ini-xdebug
new file mode 100644
index 000000000..2608fedc5
--- /dev/null
+++ b/cfg/php-ini-8.5/devilbox-php.ini-xdebug
@@ -0,0 +1,54 @@
+; ############################################################
+; # Devilbox php.ini: Xdebug example
+; ############################################################
+;
+; Information
+; -----------
+; * Do not edit this file (it belongs to git)
+; * This file show a possible Xdebug example configuration
+; * If this file is enabled, it will overwrite the current Xdebug settings
+;
+; How to enable?
+; --------------
+; * Copy this file to another file with ".ini" extension
+; * Only files with ".ini" extensions will be applied by PHP
+
+
+
+;
+; PHP.ini configuration
+;
+[PHP]
+
+; Xdebug (version 3.x.x - latest)
+; Upgrade Guide: https://3.xdebug.org/docs/upgrade_guide
+; Settings Guide: https://xdebug.org/docs/all_settings
+;
+; Use these settings to enable Xdebug for PHP
+; Make sure to read up on Xdebug some settings might significantly slow down requests.
+; The following is just an example configuration and should be adjusted.
+;
+; In order to use Xdebug in macOS, make sure to configure as per following article:
+; https://devilbox.readthedocs.io/en/latest/howto/xdebug/host-address-alias-an-mac.html#howto-host-address-alias-on-mac
+
+; Defaults
+xdebug.mode = debug
+;xdebug.remote_handler = dbgp
+xdebug.start_with_request = yes
+;xdebug.start_with_request = trigger
+;xdebug.trigger_value = randomkey
+
+; How to connect
+xdebug.client_port = 9000
+xdebug.client_host = 10.254.254.254
+xdebug.discover_client_host = 0
+
+; Logging
+xdebug.log = /var/log/php/xdebug.log
+xdebug.log_level = 7
+
+; IDE Configuration
+xdebug.idekey = PHPSTORM
+;xdebug.idekey = VSCODE
+
+; vim: set ft=dosini:
diff --git a/cfg/php-startup-8.5/.keepme b/cfg/php-startup-8.5/.keepme
new file mode 100644
index 000000000..e69de29bb
diff --git a/cfg/php-startup-8.5/01-update-apt-index.sh-example b/cfg/php-startup-8.5/01-update-apt-index.sh-example
new file mode 100755
index 000000000..d324ef890
--- /dev/null
+++ b/cfg/php-startup-8.5/01-update-apt-index.sh-example
@@ -0,0 +1,6 @@
+#!/bin/bash
+#
+# Simple example showing how to update the packet index
+#
+
+DEBIAN_FRONTEND=noninteractive apt-get update -q
diff --git a/cfg/php-startup-8.5/README.md b/cfg/php-startup-8.5/README.md
new file mode 100644
index 000000000..2b65da2f6
--- /dev/null
+++ b/cfg/php-startup-8.5/README.md
@@ -0,0 +1,29 @@
+# Custom startup scripts (for PHP 8.5 only)
+
+Any script inside this directory ending by `.sh` will be executed during the PHP container startup.
+This is useful to apply your custom settings such as installing software that usually requires
+the user to accept a license or similar.
+
+A few examples are given that do not end by `.sh` which won't be run. If you want to use the
+provided examples, copy them to a file ending by `.sh`
+
+
+## Info
+
+If you want to autostart NodeJS applications, you can use [pm2](https://github.com/Unitech/pm2).
+Ensure you do this as user `devilbox`, as by default everything is run by root.
+
+```bash
+su -c 'cd /shared/httpd/node/node; pm2 start index.js' -l devilbox
+```
+
+
+## Note
+
+This directory will startup commands only for a specific PHP version. If you want to run commands
+for all versions , go to `autostart/` in the root of the Devilbox git directory.
+
+
+## Important
+
+All provided scripts will be executed with **root** permissions.
diff --git a/compose/docker-compose.override.yml-magento2 b/compose/docker-compose.override.yml-magento2
index 1840d8f3b..61508b3ed 100644
--- a/compose/docker-compose.override.yml-magento2
+++ b/compose/docker-compose.override.yml-magento2
@@ -124,7 +124,7 @@ services:
php74:
<<: *default-php
- image: devilboxcommunity/php-fpm:7.4-slim-0.160
+ image: devilboxcommunity/php-fpm:7.4-slim-0.161
hostname: php74
networks:
app_net:
@@ -151,7 +151,7 @@ services:
php80:
<<: *default-php
- image: devilboxcommunity/php-fpm:8.0-slim-0.160
+ image: devilboxcommunity/php-fpm:8.0-slim-0.161
hostname: php80
networks:
app_net:
@@ -178,7 +178,7 @@ services:
php81:
<<: *default-php
- image: devilboxcommunity/php-fpm:8.1-slim-0.160
+ image: devilboxcommunity/php-fpm:8.1-slim-0.161
hostname: php81
networks:
app_net:
@@ -205,7 +205,7 @@ services:
php82:
<<: *default-php
- image: devilboxcommunity/php-fpm:8.2-slim-0.160
+ image: devilboxcommunity/php-fpm:8.2-slim-0.161
hostname: php82
networks:
app_net:
@@ -232,7 +232,7 @@ services:
php83:
<<: *default-php
- image: devilboxcommunity/php-fpm:8.3-slim-0.160
+ image: devilboxcommunity/php-fpm:8.3-slim-0.161
hostname: php83
networks:
app_net:
@@ -259,7 +259,7 @@ services:
php84:
<<: *default-php
- image: devilboxcommunity/php-fpm:8.4-slim-0.160
+ image: devilboxcommunity/php-fpm:8.4-slim-0.161
hostname: php84
networks:
app_net:
@@ -284,6 +284,33 @@ services:
# Users SSH directory (read-only)
- ${HOST_PATH_SSH_DIR}:/home/devilbox/.ssh:ro${MOUNT_OPTIONS}
+ php85:
+ <<: *default-php
+ image: devilboxcommunity/php-fpm:8.5-slim-0.161
+ hostname: php85
+ networks:
+ app_net:
+ ipv4_address: 172.16.238.214
+ volumes:
+ # Specific volumes
+ - ${DEVILBOX_PATH}/cfg/php-ini-8.5:/etc/php-custom.d:ro${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/cfg/php-fpm-8.5:/etc/php-fpm-custom.d:ro${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/cfg/php-startup-8.5:/startup.1.d:rw${MOUNT_OPTIONS}
+ # Generic volumes
+ - ${HOST_PATH_HTTPD_DATADIR}:/shared/httpd:rw${MOUNT_OPTIONS}
+ - ${HOST_PATH_BACKUPDIR}:/shared/backups:rw${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/supervisor:/etc/supervisor/custom.d:rw${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/bash:/etc/bashrc-devilbox.d:rw${MOUNT_OPTIONS}
+ # - ${DEVILBOX_PATH}/cfg/msmtp/msmtprc:/etc/msmtprc:ro${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/autostart:/startup.2.d:rw${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/cfg/php-startup-8.5:/startup.1.d:rw${MOUNT_OPTIONS}
+ - devilbox-mail:/var/mail:rw${MOUNT_OPTIONS}
+ - ${DEVILBOX_PATH}/supervisor:/etc/supervisor/custom.d:rw${MOUNT_OPTIONS}
+ # Certificate Authority public key
+ - ${DEVILBOX_PATH}/ca:/ca:rw${MOUNT_OPTIONS}
+ # Users SSH directory (read-only)
+ - ${HOST_PATH_SSH_DIR}:/home/devilbox/.ssh:ro${MOUNT_OPTIONS}
+
# ------------------------------------------------------------
# MySQL Database
# ------------------------------------------------------------
diff --git a/docker-compose.yml b/docker-compose.yml
index 73be1445e..8cbf2262d 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -104,7 +104,7 @@ services:
# PHP
# ------------------------------------------------------------
php:
- image: devilboxcommunity/php-fpm:${PHP_SERVER}-work-0.160
+ image: devilboxcommunity/php-fpm:${PHP_SERVER}-work-0.161
hostname: php
##
diff --git a/docs/src/content/docs/advanced/add-your-own-docker-image.md b/docs/src/content/docs/advanced/add-your-own-docker-image.md
index 44cc52b66..dc659c7c9 100644
--- a/docs/src/content/docs/advanced/add-your-own-docker-image.md
+++ b/docs/src/content/docs/advanced/add-your-own-docker-image.md
@@ -170,7 +170,7 @@ share with a team.
```dotenv
CONTAINERS_CONFIG_DEFAULT="bind httpd php mysql"
-CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"
+CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
```
The installer reads those values to export `DEVILBOX_CONTAINERS` into
diff --git a/docs/src/content/docs/configuration-files/env-file.md b/docs/src/content/docs/configuration-files/env-file.md
index 90aa031af..8ec36d4f2 100644
--- a/docs/src/content/docs/configuration-files/env-file.md
+++ b/docs/src/content/docs/configuration-files/env-file.md
@@ -45,8 +45,8 @@ Always-provisioned containers read by `install.sh`; default lean stack for DNS,
### CONTAINERS_CONFIG_OPTIONAL
Optional containers appended by `install.sh` to preserve the broader roster for new clones.
- Type: `string list`
-- Default: `"php74 php81 php82 php83 php84 redis opensearch buggregator"`
-- Example: `CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"`
+- Default: `"php74 php81 php82 php83 php84 php85 redis opensearch buggregator"`
+- Example: `CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"`
- Notes: Remove names before install when you do not want those containers exported.
## Core settings
diff --git a/docs/src/content/docs/custom-container/enable-all-container.md b/docs/src/content/docs/custom-container/enable-all-container.md
index 3ab3bb40b..6bbe8565e 100644
--- a/docs/src/content/docs/custom-container/enable-all-container.md
+++ b/docs/src/content/docs/custom-container/enable-all-container.md
@@ -84,6 +84,7 @@ agentic optional roster:
- `php82`
- `php83`
- `php84`
+- `php85`
- `redis`
- `opensearch`
- `buggregator`
diff --git a/docs/src/content/docs/getting-started/agentic-tools-toggle.md b/docs/src/content/docs/getting-started/agentic-tools-toggle.md
index 2010d6647..9919ba7f6 100644
--- a/docs/src/content/docs/getting-started/agentic-tools-toggle.md
+++ b/docs/src/content/docs/getting-started/agentic-tools-toggle.md
@@ -55,7 +55,7 @@ active. For example, `env-example` defines:
```dotenv
CONTAINERS_CONFIG_DEFAULT="bind httpd php mysql"
-CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"
+CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
```
Agentic tools follow the same principle:
diff --git a/docs/src/content/docs/getting-started/change-container-versions.md b/docs/src/content/docs/getting-started/change-container-versions.md
index 389e0acac..7ee3fc817 100644
--- a/docs/src/content/docs/getting-started/change-container-versions.md
+++ b/docs/src/content/docs/getting-started/change-container-versions.md
@@ -66,8 +66,9 @@ The default PHP service uses `PHP_SERVER`. The current selectable values are:
| `8.2` | available |
| `8.3` | available |
| `8.4` | available |
+| `8.5` | available |
-Example: switch the default PHP service to 8.4.
+Example: switch the default PHP service to 8.5.
```bash
dvl down
@@ -81,7 +82,8 @@ Edit `.env` so only one `PHP_SERVER` assignment is active:
#PHP_SERVER=8.1
#PHP_SERVER=8.2
#PHP_SERVER=8.3
-PHP_SERVER=8.4
+#PHP_SERVER=8.4
+PHP_SERVER=8.5
```
Start again:
@@ -92,7 +94,7 @@ dvl exec "php -v"
```
:::tip
-If your installation includes versioned PHP services such as `php74`, `php81`, `php82`, `php83`, and `php84`, use `dvl shell php84` to enter a specific version without changing the default `php` service.
+If your installation includes versioned PHP services such as `php74`, `php81`, `php82`, `php83`, `php84`, and `php85`, use `dvl shell php85` to enter a specific version without changing the default `php` service.
:::
## HTTPD versions
diff --git a/docs/src/content/docs/getting-started/enter-the-php-container.md b/docs/src/content/docs/getting-started/enter-the-php-container.md
index dcaa35511..2f87aba18 100644
--- a/docs/src/content/docs/getting-started/enter-the-php-container.md
+++ b/docs/src/content/docs/getting-started/enter-the-php-container.md
@@ -38,6 +38,7 @@ The current default installation can include versioned PHP service names:
| `php82` | PHP 8.2 service. |
| `php83` | PHP 8.3 service. |
| `php84` | PHP 8.4 service. |
+| `php85` | PHP 8.5 service. |
Enter a specific service with:
diff --git a/docs/src/content/docs/getting-started/install-script.mdx b/docs/src/content/docs/getting-started/install-script.mdx
index 1d257b4d9..3aab3c5b2 100644
--- a/docs/src/content/docs/getting-started/install-script.mdx
+++ b/docs/src/content/docs/getting-started/install-script.mdx
@@ -32,8 +32,8 @@ The installer provides semantic feedback using standard ANSI color codes. If `tp
When running with `--verbose`, you will see additional internal state tracking:
```bash
[VERBOSE] Removing existing directory: /Users/user/Workspace/devilbox
-[VERBOSE] Default : bind httpd php php74 php81 php82 php83 php84
-[VERBOSE] Optional: mysql redis opensearch buggregator
+[VERBOSE] Default : bind httpd php mysql
+[VERBOSE] Optional: php74 php81 php82 php83 php84 php85 redis opensearch buggregator
[VERBOSE] Using shell profile: /Users/user/.zprofile
```
@@ -225,7 +225,7 @@ If you prefer not to use the automated script, you can perform the installation
Add the following to your `~/.zshrc` or `~/.bashrc`:
```bash
export DEVILBOX_PATH="$HOME/Workspace/devilbox"
- export DEVILBOX_CONTAINERS="bind httpd php php74 php81 php82 php83 php84 mysql redis opensearch buggregator"
+ export DEVILBOX_CONTAINERS="bind httpd php php74 php81 php82 php83 php84 php85 mysql redis opensearch buggregator"
```
5. **Create a global alias or symlink**:
diff --git a/docs/src/content/docs/getting-started/install-the-devilbox.md b/docs/src/content/docs/getting-started/install-the-devilbox.md
index 68e440db3..2ee83cca4 100644
--- a/docs/src/content/docs/getting-started/install-the-devilbox.md
+++ b/docs/src/content/docs/getting-started/install-the-devilbox.md
@@ -108,7 +108,7 @@ The installer adds Devilbox configuration to the profile for your detected shell
The profile receives values like these:
```bash
-export DEVILBOX_CONTAINERS="bind httpd php mysql php74 php81 php82 php83 php84 redis opensearch buggregator"
+export DEVILBOX_CONTAINERS="bind httpd php mysql php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
export DEVILBOX_PATH="$HOME/Workspace/devilbox"
```
@@ -126,7 +126,7 @@ The installer reads the default and optional rosters from `env-example`:
```bash
CONTAINERS_CONFIG_DEFAULT="bind httpd php mysql"
-CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"
+CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
```
It combines those values and exports them as `DEVILBOX_CONTAINERS`. That is the list started by `dvl up` when you do not pass explicit services.
@@ -227,7 +227,7 @@ Add shell profile exports:
```bash
export DEVILBOX_PATH="$HOME/Workspace/devilbox"
-export DEVILBOX_CONTAINERS="bind httpd php mysql php74 php81 php82 php83 php84 redis opensearch buggregator"
+export DEVILBOX_CONTAINERS="bind httpd php mysql php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
```
Create a symlink or alias for `dvl`:
diff --git a/docs/src/content/docs/getting-started/prerequisites.md b/docs/src/content/docs/getting-started/prerequisites.md
index 6a078c3d6..e3738260c 100644
--- a/docs/src/content/docs/getting-started/prerequisites.md
+++ b/docs/src/content/docs/getting-started/prerequisites.md
@@ -152,7 +152,7 @@ printf '%s\n' "$PATH"
| Variable | Example value | Purpose |
| --- | --- | --- |
| `DEVILBOX_PATH` | `$HOME/Workspace/devilbox` | Tells `dvl` where the Devilbox repository lives. |
-| `DEVILBOX_CONTAINERS` | `bind httpd php mysql php74 php81 php82 php83 php84 redis opensearch buggregator` | Defines the services started by `dvl up`. |
+| `DEVILBOX_CONTAINERS` | `bind httpd php mysql php74 php81 php82 php83 php84 php85 redis opensearch buggregator` | Defines the services started by `dvl up`. |
The installer chooses a profile based on your shell:
diff --git a/docs/src/content/docs/getting-started/start-the-devilbox.md b/docs/src/content/docs/getting-started/start-the-devilbox.md
index 9678f8b5f..e5696acd7 100644
--- a/docs/src/content/docs/getting-started/start-the-devilbox.md
+++ b/docs/src/content/docs/getting-started/start-the-devilbox.md
@@ -33,7 +33,7 @@ CONTAINERS_CONFIG_DEFAULT="bind httpd php mysql"
The installer also appends the optional roster to preserve the broader legacy start set:
```bash
-CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"
+CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
```
Together, those values become `DEVILBOX_CONTAINERS` in your shell profile. `dvl up` starts that list when no services are passed.
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index a621c0d8e..71843a0f5 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -25,7 +25,7 @@ import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
## What you get
- PHP 7.4, 8.1, 8.2, 8.3, 8.4 side-by-side. Switch with one env var.
+ PHP 7.4, 8.1, 8.2, 8.3, 8.4, 8.5 side-by-side. Switch with one env var.
12 AI coding agents — Claude Code, Codex, Copilot, Gemini, OpenCode, Qwen, and more — pre-installed and auto-discovered.
diff --git a/docs/src/content/docs/intermediate/dvl-cli.mdx b/docs/src/content/docs/intermediate/dvl-cli.mdx
index 447e8b878..4f2918020 100644
--- a/docs/src/content/docs/intermediate/dvl-cli.mdx
+++ b/docs/src/content/docs/intermediate/dvl-cli.mdx
@@ -29,7 +29,7 @@ Starts the designated Devilbox services in detached mode.
- **Synopsis**: `dvl up [services...]`
- **Behavior**:
- If no services are specified, it starts the list defined in your `DEVILBOX_CONTAINERS` environment variable.
- - If `DEVILBOX_CONTAINERS` is empty, it falls back to a default stack: `bind httpd php php74 php81 php82 php83 php84 mysql redis opensearch buggregator`.
+ - If `DEVILBOX_CONTAINERS` is empty, it falls back to a default stack: `bind httpd php php74 php81 php82 php83 php84 php85 mysql redis opensearch buggregator`.
- **Exit Codes**: `0` on success, `1` if Docker fails.
**Examples**:
diff --git a/docs/src/content/docs/support/troubleshooting.md b/docs/src/content/docs/support/troubleshooting.md
index 730c232aa..3617a00bf 100644
--- a/docs/src/content/docs/support/troubleshooting.md
+++ b/docs/src/content/docs/support/troubleshooting.md
@@ -99,8 +99,8 @@ grep '^PHP_SERVER=' .env
grep '^CONTAINERS_CONFIG_' .env env-example
```
-Current PHP containers are `php74`, `php81`, `php82`, `php83`, and
-`php84`. Remove obsolete custom service names from local overrides and
+Current PHP containers are `php74`, `php81`, `php82`, `php83`, `php84`,
+and `php85`. Remove obsolete custom service names from local overrides and
`DEVILBOX_CONTAINERS`.
Recreate PHP after changing image tags or mounts:
diff --git a/dvl.sh b/dvl.sh
index 7234d6c8e..0506d2b26 100755
--- a/dvl.sh
+++ b/dvl.sh
@@ -207,7 +207,7 @@ YQ_BINARY="$DEVILBOX_PATH/.tests/binaries/yq"
# Read-only variables
readonly VERSION="1.2.6"
-readonly DEFAULT_DVL_CONTAINERS="bind httpd php php74 php81 php82 php83 php84 mysql redis opensearch buggregator"
+readonly DEFAULT_DVL_CONTAINERS="bind httpd php php74 php81 php82 php83 php84 php85 mysql redis opensearch buggregator"
function main {
if [[ $# -eq 0 ]] ; then
@@ -312,7 +312,7 @@ function __get_default_containers {
if [[ ! -z "$DEVILBOX_CONTAINERS" ]]; then
printf %s "${DEVILBOX_CONTAINERS}"
else
- printf %s "bind httpd php php74 php81 php82 php83 mysql redis opensearch buggregator"
+ printf %s "${DEFAULT_DVL_CONTAINERS}"
fi
}
@@ -602,12 +602,12 @@ EOL
local minor="${version_num:1:1}"
local version="$major.$minor"
echo "Using version $version derived from container name" >&2
- current_image="devilboxcommunity/php-fpm:$version-slim-0.155"
+ current_image="devilboxcommunity/php-fpm:$version-slim-0.161"
else
# Get default PHP version if container name doesn't contain version
local default_php="$( "${SCRIPT_PATH}/env-getvar.sh" "PHP_SERVER" )"
echo "Using default PHP version: $default_php" >&2
- current_image="devilboxcommunity/php-fpm:$default_php-slim-0.155"
+ current_image="devilboxcommunity/php-fpm:$default_php-slim-0.161"
fi
echo "Using derived image: $current_image" >&2
fi
@@ -1628,7 +1628,7 @@ function InteractiveQuestions {
7.0|70|7.1|71|7.2|72|7.3|73|7.4|74)
PHP_VERSION=$(awk '{gsub(/[.]/,"");print $NF}' <<< "php$response")
;;
- 8.0|80|8.2|82|8.3|83|8.4|84)
+ 8.0|80|8.2|82|8.3|83|8.4|84|8.5|85)
PHP_VERSION=$(awk '{gsub(/[.]/,"");print $NF}' <<< "php$response")
;;
8.1|81|*)
diff --git a/env-example b/env-example
index 52fc191c0..b42d49f9d 100644
--- a/env-example
+++ b/env-example
@@ -31,11 +31,11 @@
###
### install.sh reads these to compute DEVILBOX_CONTAINERS exported
### to your shell profile. DEFAULT is always installed; OPTIONAL is
-### appended to preserve the legacy 12-container roster. Edit here
+### appended to preserve the legacy 13-container roster. Edit here
### to change what install.sh provisions for new clones.
###
CONTAINERS_CONFIG_DEFAULT="bind httpd php mysql"
-CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 redis opensearch buggregator"
+CONTAINERS_CONFIG_OPTIONAL="php74 php81 php82 php83 php84 php85 redis opensearch buggregator"
###
@@ -309,6 +309,7 @@ PHP_SERVER=8.1
#PHP_SERVER=8.2
#PHP_SERVER=8.3
#PHP_SERVER=8.4
+#PHP_SERVER=8.5
###
diff --git a/log/php-fpm-8.5/.keepme b/log/php-fpm-8.5/.keepme
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/test-install-sh.sh b/tests/test-install-sh.sh
index f7bd2f984..2c2735db9 100755
--- a/tests/test-install-sh.sh
+++ b/tests/test-install-sh.sh
@@ -102,8 +102,8 @@ assert_file_exists "${ENV_EXAMPLE}" "env-example exists"
assert_grep_count '^CONTAINERS_CONFIG_DEFAULT=' "${ENV_EXAMPLE}" 1 "CONTAINERS_CONFIG_DEFAULT defined"
assert_grep_count '^CONTAINERS_CONFIG_OPTIONAL=' "${ENV_EXAMPLE}" 1 "CONTAINERS_CONFIG_OPTIONAL defined"
-# 3. Container roster parity (12 legacy tokens)
-print_h_sub "3. Container roster parity (12 legacy tokens)"
+# 3. Container roster parity (13 legacy tokens)
+print_h_sub "3. Container roster parity (13 legacy tokens)"
_default_line="$(grep -E '^CONTAINERS_CONFIG_DEFAULT=' "${ENV_EXAMPLE}" | head -n1)"
_optional_line="$(grep -E '^CONTAINERS_CONFIG_OPTIONAL=' "${ENV_EXAMPLE}" | head -n1)"
_default_val="${_default_line#CONTAINERS_CONFIG_DEFAULT=}"
@@ -117,10 +117,10 @@ _optional_val="${_optional_val%\'}"; _optional_val="${_optional_val#\'}"
_combined="${_default_val} ${_optional_val}"
# tokenize on whitespace, sort unique
_actual_sorted="$(printf '%s\n' ${_combined} | tr ' ' '\n' | sed '/^$/d' | sort -u | tr '\n' ' ')"
-_expected_sorted="$(printf '%s\n' bind httpd php mysql php74 php81 php82 php83 php84 redis opensearch buggregator | sort -u | tr '\n' ' ')"
+_expected_sorted="$(printf '%s\n' bind httpd php mysql php74 php81 php82 php83 php84 php85 redis opensearch buggregator | sort -u | tr '\n' ' ')"
if [ "${_actual_sorted}" = "${_expected_sorted}" ]; then
- pass "Container roster matches exactly (12 unique tokens)"
+ pass "Container roster matches exactly (13 unique tokens)"
else
fail "Container roster mismatch.
expected: ${_expected_sorted}