User Tools

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
gentoo:separated-php [2024/03/12 08:15] – created willygentoo:separated-php [2025/03/13 13:27] (current) – [Using independent PHP for different services] willy
Line 1: Line 1:
-====== Using independent PHP for different services ======+====== L) Using independent PHP for different services ======
  
 Ideally, you want to run each PHP-based service within the boundaries of it's own PHP instance. The advantages of such a solution would be that each PHP instance can run as the service user which guarantee service isolation and more protection in data access. Ideally, you want to run each PHP-based service within the boundaries of it's own PHP instance. The advantages of such a solution would be that each PHP instance can run as the service user which guarantee service isolation and more protection in data access.
Line 16: Line 16:
 </code> </code>
  
-the script will assume you want to run PHP-FPM with a version of PHP called //service1//, so the only thing you need to do is to copy the configuration files under **/etc/php** and create proper symlink for the php version under **/usr/lib64**. You are basically "creating" a specific version of PHP which does not exist.+the script will assume you want to run PHP-FPM with a version of PHP called //service1//, so the only thing you need to do is to copy the configuration files under **/etc/php** and doing minor editing to the original script. You are basically "creating" a specific version of PHP which does not exist.
  
 So, copy (don't link, as you will need to edit that per service) the configs: So, copy (don't link, as you will need to edit that per service) the configs:
 <code bash> <code bash>
 cp -a /etc/php/fpm-php8.2 /etc/php/fpm-service1 cp -a /etc/php/fpm-php8.2 /etc/php/fpm-service1
 +rm /etc/php/fpm-service1/php.ini
 </code> </code>
 Choose your preferred (or required) PHP version for service1. Choose your preferred (or required) PHP version for service1.
 +Your PHP FPM will still use the **php.ini** from the original setup folder, so delete the copied one or you will get confused!
  
-Then, link the libraries (i knowthis step is ugly and badbut i tihnk it's better than modifying the init scriptIn both cases you would need some post-update maintenance, so...)+Then,  you need the following edit to your **/etc/init.d/php-fpm** script becauseby defaultyour //service1// will be used as it was a PHP version but there is no PHP version numbered //service1//, so you need to separate the two thingsThe edit is simple, you need to split the PHP_SLOT variable to a PHP_SLOT_EXEC one that you can changeThis approach will alow the __original__ way to still work while supporting also our __new__ wayFind the row
-<code bash+<code> 
-ln -s /usr/lib64/php8.2 /usr/lib64/service1+command="/usr/lib64/${PHP_SLOT}/bin/php-fpm"
 </code> </code>
-Here you need to symlink it, you don't really want two copies of php. 
  
-Now, assuming the service1 runs as //service1// user and group, edit the php configuration file to run the php daemon as user //service1//Edit **/etc/php/fpm-service1/fpm.d/www.conf** to match the following lines (also replace the port with an available one!):+and replace it with the following lines: 
 +<code> 
 +if [ -e "/etc/php/fpm-${PHP_SLOT}/php-version" ]; then 
 +        PHP_SLOT_EXEC="$(cat /etc/php/fpm-${PHP_SLOT}/php-version)" 
 +else 
 +        PHP_SLOT_EXEC="${PHP_SLOT}" 
 +fi 
 +command="/usr/lib64/${PHP_SLOT_EXEC}/bin/php-fpm" 
 +</code> 
 + 
 +===== PHP configuration for specific service ===== 
 + 
 +Ok, it's time to adapt the PHP configuration for our service. You need to configure three things: 
 +  * Setup the desired PHP version manually 
 +  * Change username and group under which PHP will run 
 +  * change the port used by PHP FPM 
 +  * Replace the include path for the confiiguration 
 + 
 +First of allcreate the file **/etc/php/fpm-service1/php-version** with the required PHP version in it: 
 +<file - php-version> 
 +php8.2 
 +</file> 
 + 
 +Then edit the file **/etc/php/fpm-service1/php-fpm.conf** and fix the following path: 
 +<code> 
 +include=/etc/php/fpm-service1/fpm.d/*.conf 
 +</code> 
 + 
 +Last, edit the file  **/etc/php/fpm-service1/fpm.d/www.conf** to match the following lines (also replace the port with an available one!):
 <code> <code>
 user = service1 user = service1
Line 36: Line 65:
 listen = 127.0.0.1:9000 listen = 127.0.0.1:9000
 </code> </code>
 +
 +Remeber the port number as you will need to use it in NGINX configuration.
  
 and then you can start it and add to boot: and then you can start it and add to boot:
Line 45: Line 76:
 done! done!
  
-==== Updating php ====+==== NGINX configuration ====
  
 +See [[selfhost:nginx|The Reverse Proxy concept]] for more datails on NGINX. 
  
 +A generic NGINX configuration for PHP-FPM is the following:
 +<code>
 +        location ~ /.*\.php$ {
 +                try_files $uri =404;
 +                fastcgi_split_path_info ^(.+\.php)(/.+)$;
 +                include fastcgi_params;
 +                fastcgi_param SCRIPT_FILENAME $request_filename;
 +                fastcgi_pass 127.0.0.1:9000;
 +        }
 +</code>
  
 +where you need to adapt the port (9000) and the location, of course.
 +
 +==== Updating php ====
  
 +When you perform emerge updates PHP will be updated sooner or later.
  
 +You can, and should, migrate to the newer version when possible. In this case all you need to do it to update the value into **php-version** and probably also update the specific //php.ini// values.
  
-This approach will load configuration files from **/etc/php/fpm-service1** 
  
  
  
  

This website uses technical cookies only. No information is shared with anybody or used in any way but provide the website in your browser.

More information