当前位置 : 主页 > 操作系统 > centos >

如何最接近rpm的安装方式去编译安装最新的php-fpm

来源:互联网 收集:自由互联 发布时间:2022-06-20
1 前言 笔者非常不喜欢某些人编译安装的软件,维护起来非常缺乏rpm安装的那种规范感觉,于是笔者参阅官方的编译安装教程以及对比分析rpm安装的目录布置结构,完成以下安装。 2 安

1 前言

笔者非常不喜欢某些人编译安装的软件,维护起来非常缺乏rpm安装的那种规范感觉,于是笔者参阅官方的编译安装教程以及对比分析rpm安装的目录布置结构,完成以下安装。

2 安装PHP-FPM

2.1 环境配置

2.1.1 安装解压工具

yum install -y bzip2

2.1.2 配置编译环境

yum -y install gcc gcc-c++ make expat-devel

2.1.3 下载php二进制安装包

cd ~ wget http://cn2.php.net/distributions/php-7.1.12.tar.bz2

注:具体的下载页面请参阅

http://sg2.php.net/downloads.php

2.1.4 创建运行用户

groupadd  -g 48 apache useradd -u 48 -g 48 -d /usr/share/httpd -s /sbin/nologin apache

2.1.5 预建目录

mkdir /var/log/php-fpm/ mkdir /run/php-fpm/

2.1.6 配置防火墙

firewall-cmd --permanent --add-port 9000/tcp

firewall-cmd --reload

firewall-cmd --list-all

2.2 编译安装

2.2.1 解压安装包

tar -xf php-7.1.12.tar.bz2

2.2.2 安装前构建

cd php-7.1.12 ./configure --bindir=/usr/sbin/ \             --sbindir=/usr/sbin/ \             --sysconfdir=/etc/ \             --libdir=/usr/lib64/  \             --mandir=/usr/share/man/ \             --includedir=/usr/include/ \             --with-fpm-user=apache \             --with-fpm-group=apache \             --enable-fpm \             --with-mysqli

根据提示解决安装的依赖关系

yum install -y libxml2-devel

2.2.3 编译并安装

make make install | tee install.log

2.3 配置FPM

2.3.1 配置php.ini

cp php.ini-development /etc/php.ini

2.3.2 防止空文件递给PHP-FPM后端

vim /etc/php.ini

修改以下参数:

cgi.fix_pathinfo = 0

注:可防任意脚本注入

2.3.3 创建配置

vim /etc/php-fpm.conf

加入如下配置:

;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix. ; Include one or more files. If glob(3) exists, it is used to include a bunch of ; files from a glob(3) pattern. This directive can be used everywhere in the ; file. include=/etc/php-fpm.d/*.conf ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Default Value: none pid = /run/php-fpm/php-fpm.pid ; Error log file ; Default Value: /var/log/php-fpm.log error_log = /var/log/php-fpm/error.log ; Log level ; Possible Values: alert, error, warning, notice, debug ; Default Value: notice ;log_level = notice ; If this number of child processes exit with SIGSEGV or SIGBUS within the time ; interval set by emergency_restart_interval then FPM will restart. A value ; of '0' means 'Off'. ; Default Value: 0 ;emergency_restart_threshold = 0 ; Interval of time used by emergency_restart_interval to determine when ; a graceful restart will be initiated.  This can be useful to work around ; accidental corruptions in an accelerator's shared memory. ; Available Units: s(econds), m(inutes), h(ours), or d(ays) ; Default Unit: seconds ; Default Value: 0 ;emergency_restart_interval = 0 ; Time limit for child processes to wait for a reaction on signals from master. ; Available units: s(econds), m(inutes), h(ours), or d(ays) ; Default Unit: seconds ; Default Value: 0 ;process_control_timeout = 0 ; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging. ; Default Value: yes daemonize = no ;;;;;;;;;;;;;;;;;;;; ; Pool Definitions ; ;;;;;;;;;;;;;;;;;;;; ; See /etc/php-fpm.d/*.conf

创建以下配置文件:

mkdir /etc/php-fpm.d/ vim /etc/php-fpm.d/www.conf

加入如下配置:

; Start a new pool named 'www'. [www] ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on ;                            a specific port; ;   'port'                 - to listen on a TCP socket to all addresses on a ;                            specific port; ;   '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Set listen(2) backlog. A value of '-1' means unlimited. ; Default Value: -1 ;listen.backlog = -1   ; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address ; must be separated by a comma. If this value is left blank, connections will be ; accepted from any ip address. ; Default Value: any listen.allowed_clients = 127.0.0.1 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions.  ; Default Values: user and group are set as the running user ;                 mode is set to 0666 ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0666 ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ;       will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = apache ; RPM: Keep a group allowed to write in log dir. group = apache ; Choose how the process manager will control the number of child processes. ; Possible Values: ;   static  - a fixed number (pm.max_children) of child processes; ;   dynamic - the number of child processes are set dynamically based on the ;             following directives: ;             pm.max_children      - the maximum number of children that can ;                                    be alive at the same time. ;             pm.start_servers     - the number of children created on startup. ;             pm.min_spare_servers - the minimum number of children in 'idle' ;                                    state (waiting to process). If the number ;                                    of 'idle' processes is less than this ;                                    number then some children will be created. ;             pm.max_spare_servers - the maximum number of children in 'idle' ;                                    state (waiting to process). If the number ;                                    of 'idle' processes is greater than this ;                                    number then some children will be killed. ; Note: This value is mandatory. pm = dynamic ; The number of child processes to be created when pm is set to 'static' and the ; maximum number of child processes to be created when pm is set to 'dynamic'. ; This value sets the limit on the number of simultaneous requests that will be ; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. ; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP ; CGI. ; Note: Used when pm is set to either 'static' or 'dynamic' ; Note: This value is mandatory. pm.max_children = 50 ; The number of child processes created on startup. ; Note: Used only when pm is set to 'dynamic' ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.start_servers = 5 ; The desired minimum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.min_spare_servers = 5 ; The desired maximum number of idle server processes. ; Note: Used only when pm is set to 'dynamic' ; Note: Mandatory when pm is set to 'dynamic' pm.max_spare_servers = 35   ; 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 URI to view the FPM status page. If this value is not set, no URI will be ; recognized as a status page. By default, the status page shows the following ; information: ;   accepted conn    - the number of request accepted by the pool; ;   pool             - the name of the pool; ;   process manager  - static or dynamic; ;   idle processes   - the number of idle processes; ;   active processes - the number of active processes; ;   total processes  - the number of idle + active processes. ; The values of 'idle processes', 'active processes' and 'total processes' are ; updated each second. The value of 'accepted conn' is updated in real time. ; Example output: ;   accepted conn:   12073 ;   pool:             www ;   process manager:  static ;   idle processes:   35 ;   active processes: 65 ;   total processes:  100 ; By default the status page output is formatted as text/plain. Passing either ; 'html' or 'json' as a query string will return the corresponding output ; syntax. Example: ;   http://www.foo.bar/status ;   http://www.foo.bar/status?json ;   http://www.foo.bar/status?html ; Note: The value must start with a leading slash (/). The value can be ;       anything, but it may not be a good idea to use the .php extension or it ;       may conflict with a real PHP file. ; Default Value: not set  ;pm.status_path = /status   ; The ping URI to call the monitoring page of FPM. If this value is not set, no ; URI will be recognized as a ping page. This could be used to test from outside ; that FPM is alive and responding, or to ; - create a graph of FPM availability (rrd or such); ; - remove a server from a group if it is not responding (load balancing); ; - trigger alerts for the operating team (24/7). ; Note: The value must start with a leading slash (/). The value can be ;       anything, but it may not be a good idea to use the .php extension or it ;       may conflict with a real PHP file. ; Default Value: not set ;ping.path = /ping ; This directive may be used to customize the response of a ping request. The ; response is formatted as text/plain with a 200 response code. ; Default Value: pong ;ping.response = pong   ; 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. A value of '0' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_terminate_timeout = 0   ; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_slowlog_timeout = 0   ; The log file for slow requests ; Default Value: not set ; Note: slowlog is mandatory if request_slowlog_timeout is set slowlog = /var/log/php-fpm/www-slow.log   ; Set open file descriptor rlimit. ; Default Value: system defined value ;rlimit_files = 1024   ; Set max core size rlimit. ; Possible Values: 'unlimited' or an integer greater or equal to 0 ; Default Value: system defined value ;rlimit_core = 0   ; Chroot to this directory at the start. This value must be defined as an ; absolute path. When this value is not set, chroot is not used. ; Note: chrooting is a great security feature and should be used whenever  ;       possible. However, all PHP paths will be relative to the chroot ;       (error_log, sessions.save_path, ...). ; Default Value: not set ;chroot =    ; Chdir to this directory at the start. This value must be an absolute path. ; Default Value: current directory or / when chroot ;chdir = /var/www   ; Redirect worker stdout and stderr into main error log. If not set, stdout and ; stderr will be redirected to /dev/null according to FastCGI specs. ; Default Value: no ;catch_workers_output = yes   ; Limits the extensions of the main script FPM will allow to parse. This can ; prevent configuration mistakes on the web server side. You should only limit ; FPM to .php extensions to prevent malicious users to use other extensions to ; exectute php code. ; Note: set an empty value to allow all extensions. ; Default Value: .php ;security.limit_extensions = .php .php3 .php4 .php5 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; the current environment. ; Default Value: clean env ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp ; Additional php.ini defines, specific to this pool of workers. These settings ; overwrite the values previously defined in the php.ini. The directives are the ; same as the PHP SAPI: ;   php_value/php_flag             - you can set classic ini defines which can ;                                    be overwritten from PHP call 'ini_set'.  ;   php_admin_value/php_admin_flag - these directives won't be overwritten by ;                                     PHP call 'ini_set' ; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. ; Defining 'extension' will load the corresponding shared extension from ; extension_dir. Defining 'disable_functions' or 'disable_classes' will not ; overwrite previously defined php.ini values, but will append the new value ; instead. ; Default Value: nothing is defined by default except the values in php.ini and ;                specified at startup with the -d argument ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com ;php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 128M ; Set session path to a directory owned by process user php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session

2.3.4 测试fpm启动

/usr/sbin/php-fpm &

2.3.5 查询服务状态

ps -aux | grep php-fpm netstat -antp | grep php-fpm

2.3.6 手动关闭服务

kill -s 15 `pgrep -u root php-fpm`

2.4 配置服务启动

2.4.1 配置启动脚本

vim /usr/lib/systemd/system/php-fpm.service

加入如下配置:

[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=simple PIDFile=/run/php-fpm/php-fpm.pid EnvironmentFile=/etc/sysconfig/php-fpm ExecStart=/usr/sbin/php-fpm --nodaemonize ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

配置环境文件:

echo '# Additional environment file for php-fpm' > /etc/sysconfig/php-fpm

重载控制脚本

systemctl daemon-reload

2.4.2 启动服务并配置默认启动

systemctl start php-fpm systemctl enable php-fpm

2.4.3 服务其他控制命令

systemctl start php-fpm systemctl restart php-fpm systemctl stop php-fpm

2.5 测试

由于nginx不是本章的重点,所以如需测试请根据以下文章配置nginx,

http://blog.51cto.com/cmdschool/1962061

最后你可以看到如下页面,

如何最接近rpm的安装方式去编译安装最新的php-fpm_php

参阅文档:

==============================================

http://sg2.php.net/manual/en/install.unix.nginx.php

上一篇:101个shell脚本
下一篇:没有了
网友评论