Difference between revisions of "SME9 Php-Fpm"

From Realm Business Systems Ltd
Jump to: navigation, search
(Created page with "{{Warning box|This page is for SME v9 and is now deprecated and for reference only. v10 uses systemd. See https://wiki.koozali.org/PHP if you search to write your own contrib...")
(No difference)

Revision as of 06:46, 4 May 2024

* Warning:
This page is for SME v9 and is now deprecated and for reference only.

v10 uses systemd. See https://wiki.koozali.org/PHP if you search to write your own contrib using php-fpm follow Building_Your_Contrib#PHP-FPM


Template:Languages {{#vardefine:contribname| {{#titleparts: sme9 php-fpm |1}} }} {{#vardefine:smecontribname| smeserver-{{#titleparts: sme9 php-fpm |1}} }} {{#vardefine:lang| {{#titleparts: sme9 php-fpm | | -1}} |en }} Template:Infobox contribs

Maintainer

Daniel

Version

* Warning:
DO NOT USE ON v10.

SME v9 is no longer supported. v10 has php-fpm built in. Please refer to this page for more information.
https://wiki.koozali.org/PHP



{{#smeversion: smeserver-php-fpm }}


Description

This contribs allow you to run php-fpm for php version from 5.6 to 7.3 on CentOS 6 (SME9). This contrib will likely not be needed directly for your own usage, unless you know what you want to do with it, but rather called by another contribs needing a specific version of php running.


Installation

yum --enablerepo=smecontribs install {{#var:smecontribname}}

you then need to issue the usual<syntaxhighlight lang="bash"> signal-event post-upgrade; signal-event reboot </syntaxhighlight>

or you can do <syntaxhighlight lang="bash"> signal-event webapps-update service php-fpm start service php56-php-fpm start service php70-php-fpm start service php71-php-fpm start service php72-php-fpm start service php73-php-fpm start

</syntaxhighlight>

Configuration

you can list the available configuration with the following command :<syntaxhighlight lang="bash"> config show php-fpm config show php56-php-fpm config show php70-php-fpm config show php71-php-fpm config show php72-php-fpm config show php73-php-fpm

</syntaxhighlight>

Some of the properties are not shown, but are defaulted in a template or a script. You can set those values for the php-fpm version you want, or you can set it against a particular share folder. Empty or missing property in the db means default value is used.

Here a more comprehensive list with default and expected values :

property default values
status enabled enabled,disabled
MemoryLimit 128M
MaxExecutionTime 30
MaxInputTime 60
AllowUrlFopen off
MaxChildren 15
PostMaxSize 10M
UploadMaxFilesize 10M
OpenBasedir
DisableFunctions system,show_source, symlink,exec,dl,shell_exec,passthru,phpinfo,escapeshellarg,escapeshellcmd

<syntaxhighlight lang="bash"> config setprop php72-phpfpm PHPMemoryLimit 256M signal-event webapps-update </syntaxhighlight>more values specifics for shares:

property default values information
PHPVersion 56,70,71,72,73 should be set one value
PHPCustomPool string use of a custom pool defined elsewhere, see use my own pool section. Keep it empty to use the share specific pool.
DynamicContent disabled enabled,disabled need to be enabled

<syntaxhighlight lang="bash"> db accounts setprop SHARENAME PHPVersion 72 PHPMemoryLimit 256M signal-event webapps-update </syntaxhighlight>

For contribs creators

you can either call an existing php-pool or create your own one. As an example you can check smeserver-nextcloud. The following template will make a dedicated php 7.1 pool with php setting adapted for Nextcloud.

vim /etc/e-smith/templates/etc/php-fpm.d/www.conf/15Nextcloud<syntaxhighlight lang="perl"> {

if ($PHP_VERSION eq '71'){

 if (($nextcloud{'status'} || 'disabled') eq 'enabled'){
   my $max_upload_size = ($nextcloud{MaxUploadSize} || '4096');
   $max_upload_size .= 'M' if ($max_upload_size =~ m/^\d+$/);
   my $memory_limit = ($nextcloud{MemoryLimit} || '512M');
   $memory_limit .= 'M' if ($memory_limit =~ m/^\d+$/);
   my $id = 'nextcloud';
   $OUT .=<<_EOF;

[php$PHP_VERSION-$id] user = www group = www listen.owner = root listen.group = www listen.mode = 0660 listen = /var/run/php-fpm/php$PHP_VERSION-$id.sock pm = dynamic pm.max_children = 15 pm.start_servers = 3 pm.min_spare_servers = 3 pm.max_spare_servers = 4 pm.max_requests = 1000 php_admin_value[session.save_path] = /var/lib/php/$id/session php_admin_value[session.gc_maxlifetime] = 86400 php_admin_value[opcache.file_cache] = /var/lib/php/$id/opcache php_admin_value[upload_tmp_dir] = /var/lib/php/$id/tmp php_admin_value[error_log] = /var/log/php/$id/error.log slowlog = /var/log/php/nextcloud/slow.log php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f php@{ $DomainName } php_admin_flag[display_errors] = off php_admin_flag[log_errors] = on php_admin_value[error_log] = syslog php_admin_value[memory_limit] = $memory_limit php_admin_value[max_execution_time] = 3600 php_admin_value[post_max_size] = $max_upload_size php_admin_value[upload_max_filesize] = $max_upload_size php_admin_value[disable_functions] = system, show_source, symlink, exec, nextcloud, shell_exec, passthru, phpinfo, escapeshellarg, escapeshellcmd php_admin_value[open_basedir] = /usr/share/nextcloud:/var/lib/nextcloud:/var/log/nextcloud.log:/var/lib/php/nextcloud:/home/e-smith/files/nextcloud:/dev/urandom:/proc/meminfo php_admin_flag[allow_url_fopen] = on php_admin_flag[file_upload] = on php_admin_flag[session.cookie_httponly] = on php_admin_flag[allow_url_include] = off php_admin_value[session.save_hannextclouder] = files php_admin_flag[output_buffering] = off

_EOF

 }
 else{
   $OUT .= '; Nextcloud is disabled';
 }

}

</syntaxhighlight>you will also need two httpd.conf template fragment:

vim /etc/e-smith/templates/etc/httpd/conf/httpd.conf/68FastCGIConfig15nextcloud<syntaxhighlight lang="perl"> { if ($fastcgi_mod eq 'mod_fastcgi'){

 $OUT .=<<_EOF;

Action phpnextcloud-fastcgi /php-cgi-bin/phpnextcloud-wrapper Alias /php-cgi-bin/phpnextcloud-wrapper /var/www/php-cgi-bin/phpnextcloud-wrapper FastCgiExternalServer /var/www/php-cgi-bin/phpnextcloud-wrapper -socket /var/run/php-fpm/php71-nextcloud.sock -pass-header Authorization -idle-timeout 120 _EOF } }

</syntaxhighlight>

vim /etc/e-smith/templates/etc/httpd/conf/httpd.conf/98nextcloud<syntaxhighlight lang="perl"> { my $access = $nextcloud{'access'} || 'private'; my $allow = ($access eq 'public')?'all':"$localAccess $externalSSLAccess"; my $authtype = $nextcloud{'Authentication'} || 'none';

my $alias = (($nextcloud{'AliasOnPrimary'} || 'enabled') eq 'enabled') ?

   'Alias /nextcloud /usr/share/nextcloud' : ;

my $maxupload = $nextcloud{'MaxUploadSize'} || '1024'; my $maxpost = $maxupload+1; $maxupload .= 'M'; $maxpost .= 'M';

my $auth = ; if ($authtype eq 'http'){

   $auth =<<'EOF';
   <FilesMatch "^(admin|rest)\.php">
       SSLRequireSSL on
       AuthName "nextcloud"
       AuthType Basic
       AuthBasicProvider external
       AuthExternal pwauth
       Require valid-user
   </FilesMatch>

EOF }

if ($nextcloud{'status'} eq 'enabled'){

 my $php =<<_EOF;
   AddType application/x-httpd-php .php
   php_admin_flag file_upload On
   php_admin_flag magic_quotes Off
   php_admin_flag magic_quotes_gpc Off
   php_admin_value upload_max_filesize $maxupload
   php_admin_value post_max_size $maxpost
   php_admin_value memory_limit 512M
   php_admin_flag output_buffering Off
   php_admin_value max_execution_time 0
   php_admin_value upload_tmp_dir /var/lib/nextcloud/tmp
   php_admin_value session.save_path /var/lib/nextcloud/tmp
   php_admin_value session.gc_maxlifetime 86400
   php_admin_value open_basedir /usr/share/nextcloud:/var/lib/nextcloud:/var/log/nextcloud.log:/var/lib/php/nextcloud:/home/e-smith/files/nextcloud:/dev/urandom:/proc/meminfo

_EOF

 if ($fastcgi_mod eq 'mod_fastcgi'){
   $php = "    AddHandler phpnextcloud-fastcgi .php\n";
 }
 elsif ($fascgi_mod eq 'mod_proxy_fcgi'){
   $php =<<'_EOF';
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm/php71-nextcloud.sock|fcgi://localhost"
    </FilesMatch>

_EOF

 }

my $config =<<_EOF;

 <Directory "/usr/share/nextcloud">
   Options +FollowSymLinks
   AllowOverride All

$php

   order deny,allow
   deny from all
   allow from $allow

$auth

   <IfModule mod_dav.c>
     Dav off
   </IfModule>
   SetEnv HOME /usr/share/nextcloud
   SetEnv HTTP_HOME /usr/share/nextcloud
   SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=\$1
 </Directory>
 <Directory "/home/e-smith/files/nextcloud/data/">
   # just in case if .htaccess gets disabled
   deny from all
 </Directory>

_EOF


$OUT .=<<"END"

  1. nextcloud Configuration

<IfModule mod_headers.c>

 Header always set Strict-Transport-Security "max-age=15552000"

</IfModule> $alias

$config

Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav


END } else{

   $OUT .= "# nextcloud is disabled\n";

} }

</syntaxhighlight>Of course you will need to process both httpd.conf, php-fpm specific version and restart both httpd-e-smith and the php-fpm version you use.

You will also need specific code to create the destination directories for php usage : see /etc/e-smith/events/actions/php-pool-dirs from this contrib


* Warning:
On initial installation, smeserver-php-fpm does not start php pools and signal-event webapps-update does only a reload which will not start stopped services.

So pay attention you need to start if not already started on initial install.


Create and use my own pool

using the default template : /etc/e-smith/templates/etc/php-fpm.d/custom.conf , you can set your own pool doing:<syntaxhighlight lang="bash"> db php set MYPOOLNAME pool Version 72 status enabled </syntaxhighlight>here are the accepted supplementary properties, as always missing or empty means using default.

property default values information
status enabled enabled,disabled
MemoryLimit 128M
MaxExecutionTime 30
MaxInputTime 60
AllowUrlFopen off
MaxChildren 15
PostMaxSize 10M
UploadMaxFilesize 10M
file_upload enabled
OpenBasedir
DisabledFunctions system,show_source,symlink,exec,dl,shell_exec,passthru,phpinfo,escapeshellarg,escapeshellcmd
User www
Group www
DisplayErrors disabled
LogErrors disabled

you will then need two httpd.conf custom template fragment to use your pool. You will need to change MYPOOL to what you want<syntaxhighlight lang="bash"> mkdir -p /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/ vim /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/98mypoolusage </syntaxhighlight><syntaxhighlight lang="perl"> <Directory /home/e-smith/files/ibays/test/html>

   SSLRequireSSL
   Options None
   Options +Indexes
   Options +FollowSymLinks
   DirectoryIndex index.php index.shtml index.htm index.html
   AddHandler phpMYPOOL-fastcgi .php
   AllowOverride All
   order deny,allow
   deny from all
   allow from all

</Directory>

</syntaxhighlight>then just do signal-event webapps-update

Uninstall

yum remove {{#var:smecontribname}}  {{#var:contribname}}

Bugs

Please raise bugs under the SME-Contribs section in bugzilla and select the {{#var:smecontribname}} component or use Template:BugzillaFileBug

Below is an overview of the current issues for this contrib:{{#bugzilla:columns=id,product,version,status,summary|sort=id|order=desc|component={{#var:smecontribname}} |noresultsmessage=No open bugs found.}}

Changelog

Only released version in smecontrib are listed here.

{{#smechangelog: {{#var:smecontribname}} }}