Hi! I’m trying to figure out the best way to maintain multiple php-fpm setups at the same time and ran into a somewhat annoying issue.
I’m not sure how many other users might have a similar situation? If this something too non-standard, let me know and I’ll shut up ;-) Background ========== The server supports multiple versions of PHP for websites using php-fpm. There are also multiple web servers running at the same time (on different IP/port combinations obviously). Specifically OpenBSD httpd and Apache httpd from ports. OpenBSD httpd runs in its normal chroot(2) environment. Apache httpd does not use chroot(2). This requires corresponding setups for php-fpm as well. Using e.g. a non-chroot(2) php-fpm with OpenBSD httpd does not work. Each php-fpm variant uses its own socket. So changing the PHP version for a web server (or even for just certain paths on that server) is as easy as pointing to the correct socket for the FastCGI mechanism of the web server. Setup ===== All available PHP Versions are supported and configured. I.e. 7.4, 8.0, 8.1 and 8.2 for OpenBSD 7.3. I have adjusted /etc/php-7.4.ini, /etc/php-8.0.ini, etc. as required I have created and modified /etc/php-fpm-7.4cr.conf, /etc/php-fpm-7.4ncr.conf, /etc/php-fpm-8.0cr.conf, /etc/php-fpm-8.0ncr.conf, etc. The default /etc/php-fpm.conf is not actively used. I have copied the /etc/rc.d/phpXX_fpm files and modified them to: - use the appropriate /etc/php-fpm.conf (/etc/php-fpm-7.4cr.conf, /etc/php-fpm-7.4ncr.conf, /etc/php-fpm-8.0cr.conf, /etc/php-fpm-8.0ncr.conf, etc.) - use the appropriate /etc/php.ini (/etc/php-7.4.ini, /etc/php-8.0.ini, /etc/php-8.1.ini and /etc/php-8.2.ini) - adjust the pexp to match the php-fpm.conf in addition to "php-fpm-7.4: master process", e.g. "php-fpm-7.4: master process .*/etc/php-fpm-7.4cr.conf.*", etc. Thus I have: /etc/rc.d/php74cr_fpm /etc/rc.d/php74ncr_fpm /etc/rc.d/php80cr_fpm /etc/rc.d/php80ncr_fpm /etc/rc.d/php81cr_fpm /etc/rc.d/php81ncr_fpm /etc/rc.d/php82cr_fpm /etc/rc.d/php82ncr_fpm And all of these have been enabled using `rcctl enable php74cr_fpm php74ncr_fpm php80cr_fpm php80ncr_fpm php81cr_fpm php81ncr_fpm php82cr_fpm php82ncr_fpm` and of course started using `rcctl start …`. For example: # cat /etc/rc.d/php82cr_fpm #!/bin/ksh daemon="/usr/local/sbin/php-fpm-8.2" daemon_flags="-c /etc/php-8.2-cr.ini -y /etc/php-fpm-82cr.conf" . /etc/rc.d/rc.subr pexp="php-fpm-8.2: master process .*/etc/php-fpm-82cr.conf.*" rc_reload=NO rc_cmd $1 # (Note: I know this could be further reduced to just one master process for each version with a chroot(2) and a non-chroot(2) pool defined in the single php-fpm.conf for each PHP version. But that is irrelevant to the issue at hand.) Issue ===== `rcctl ls started` lists php74_fpm, php80_fpm, php81_fpm and php82_fpm as started even though they are neither enabled nor started! The reason this happens is the pexp which is too general. E.g. for php74_fpm it is pexp="php-fpm-7.4: master process .*" Modifying this to e.g. pexp="php-fpm-7.4: master process .*/etc/php-fpm.conf.*" solves the problem. BUT: /etc/rc.d/php74_fpm will be overwritten when the php-7.4 port ist updated. (Same for the other versions of course.) So my change is lost and has to be reapplied. If I forget about this then at a later time I’ll become confused by the output of `rcctl ls started`. Questions ========= 1) Is there a better, update-proof way to solve this problem? 2) Would it make sense to include the more specific pexp in the PHP ports? (I don’t think doing so would hurt the default use case, but maybe I’m overlooking something?) OpenBSD 7.3, amd64 Thanks! Mike