Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/params-php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,23 @@ 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"},
{"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "nginx-stable"},
{"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"}
]


Expand Down
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
25 changes: 21 additions & 4 deletions .tests/scripts/get-modules.sh
Original file line number Diff line number Diff line change
Expand Up @@ -67,20 +67,22 @@ 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" )"
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)"


Expand All @@ -94,8 +96,8 @@ E="🗸" # Enabled mods modules (can be disabled)
D="d" # Disabled modules (can be enabled)
U=" " # Unavailable

echo "| Modules | <sup>PHP 7.4</sup> | <sup>PHP 8.0</sup> | <sup>PHP 8.1</sup> | <sup>PHP 8.2</sup> | <sup>PHP 8.3</sup> | <sup>PHP 8.4</sup> |"
echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
echo "| Modules | <sup>PHP 7.4</sup> | <sup>PHP 8.0</sup> | <sup>PHP 8.1</sup> | <sup>PHP 8.2</sup> | <sup>PHP 8.3</sup> | <sup>PHP 8.4</sup> | <sup>PHP 8.5</sup> |"
echo "|-------------------------------|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|:-------:|"
echo "${MODS}" | while read -r line; do
# Ignore modules
if [ "${line}" = "Core" ]; then
Expand Down Expand Up @@ -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
2 changes: 1 addition & 1 deletion .tests/tests/framework-cakephp-php8.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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}" )"

Expand Down
2 changes: 1 addition & 1 deletion .tests/tests/framework-cakephp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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}" )"

Expand Down
2 changes: 1 addition & 1 deletion .tests/tests/framework-drupal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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")


Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
26 changes: 25 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ All created projects (frontend or backend) will be able to communicate with one
<br/>
<br/>
**Available Architectures:** `amd64`, `arm64`<br/>
**Available PHP Versions:** `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`<br/>
**Available PHP Versions:** `7.4`, `8.0`, `8.1`, `8.2`, `8.3`, `8.4`, `8.5`<br/>
**Deprecated PHP Version:** `5.6`, `7.0`, `7.1`, `7.2`, `7.3` only available in `0.153` and previous


Expand Down Expand Up @@ -726,6 +726,30 @@ Every single attachable container comes with many different versions. In order t
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a target="_blank" title="PHP 8.4" href="https://github.com/devilbox-community/docker-php-fpm">8.4</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td><a target="_blank" title="PHP 8.5" href="https://github.com/devilbox-community/docker-php-fpm">8.5</a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

Expand Down
Empty file added cfg/php-fpm-8.5/.keepme
Empty file.
54 changes: 54 additions & 0 deletions cfg/php-fpm-8.5/README.md
Original file line number Diff line number Diff line change
@@ -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.
80 changes: 80 additions & 0 deletions cfg/php-fpm-8.5/devilbox-fpm.conf-default
Original file line number Diff line number Diff line change
@@ -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:
46 changes: 46 additions & 0 deletions cfg/php-fpm-8.5/devilbox-fpm.conf-pm_dynamic
Original file line number Diff line number Diff line change
@@ -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:
Loading