一、安装依赖

[root@test1 tmp]# yum -y install gcc-c++ gd-devel openssl-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel curl-devel zlib-devel libxml2-devel bzip2-devel libjpeg-devel autoconf

二、编译php

[root@test1 tmp]# tar -zxf php-7.2.8.tar.gz
[root@test1 tmp]# cd php-7.2.8/             //先安装nginx后生成nginx用户
     ./configure \
     --prefix=/usr/local/php7 \
     --with-config-file-path=/usr/local/php7/etc \
     --with-config-file-scan-dir=/usr/local/php7/etc/php.d/ \
     --with-mysqli=mysqlnd \
     --with-pdo-mysql=mysqlnd \
     --with-iconv \
     --with-zlib \
     --with-openssl \
     --with-xmlrpc \
     --with-gettext \
     --with-curl \
     --with-mhash \
     --with-fpm-user=nginx \
     --with-fpm-group=nginx \
     --with-libzip \
     --with-pear \
     --enable-xml \
     --enable-pdo \
     --enable-bcmath \
     --enable-shmop \
     --enable-sysvsem \
     --enable-inline-optimization \
     --enable-mbregex \
     --enable-fpm \
     --enable-json \
     --enable-mbstring \
     --enable-ftp \
     --enable-pcntl \
     --enable-sockets \
     --enable-soap \
     --enable-session \
     --disable-ipv6 \
     --enable-opcache

[root@test1 php-7.2.8]# make && make install
[root@test1 php-7.2.8]# cp php.ini-production /usr/local/php7/etc/php.ini
[root@test1 php-7.2.8]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php7-fpm.service
[root@test1 php-7.2.8]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@test1 php-7.2.8]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# mkdir /usr/local/php7/etc/php.d -p
[root@test1 php-7.2.8]# echo "zend_extension=opcache.so" > /usr/local/php7/etc/php.d/opcache.ini
[root@test1 php-7.2.8]# ln -s /usr/local/php7/bin/phpize /bin/phpize
[root@test1 php-7.2.8]# ln -s /usr/local/php7/bin/php /usr/bin/php7

三、优化配置

[root@test1 php-7.2.8]# echo "php_admin_value[memory_limit] = 512M" >> /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# echo "php_admin_value[upload_max_filesize] = 20M" >> /usr/local/php7/etc/php-fpm.d/www.conf
[root@test1 php-7.2.8]# echo "php_admin_value[post_max_size] = 20M" >> /usr/local/php7/etc/php-fpm.d/www.conf

四、服务管理

[root@test1 php-7.2.8]# systemctl enable php7-fpm.service
[root@test1 php-7.2.8]# systemctl start php7-fpm.service

五、安装扩展

  • 安装redis扩展
    [root@test1 tmp]# echo -e "\n"|/usr/local/php7/bin/pecl install redis
    [root@test1 tmp]# echo "extension=redis.so" > /usr/local/php7/etc/php.d/redis.ini
    [root@test1 tmp]# /usr/local/php7/bin/php -m|grep redis
    redis
    
  • 安装php-beast-master
    [root@test1 tmp]# wget http://soft.g6p.cn/deploy/source/php-beast-master.zip
    [root@test1 tmp]# unzip php-beast-master.zip
    [root@test1 tmp]# cd php-beast-master/
    [root@test1 php-beast-master]# /usr/local/php7/bin/phpize
    [root@test1 php-beast-master]# ./configure --with-php-config=/usr/local/php7/bin/php-config
    [root@test1 php-beast-master]# make && make install
    
    [root@test1 php-beast-master]# ls /usr/local/php7/lib/php/extensions/no-debug-non-zts-20170718/beast.so
    
    [root@test1 php-beast-master]# vi /usr/local/php7/etc/php.d/50-beast.ini
    extension=beast.so
    beast.log_file = "/tmp/php_beast.log"
    

六、compose包管理工具

  • compose安装
    [root@test1 tmp]# cd /usr/local/php7/bin/
    [root@test1 bin]# curl -sS https://getcomposer.org/installer | ./php
    [root@test1 bin]# vi /usr/bin/composer7
    添加如下内容:
    #!/bin/bash
    export PATH=PATH:/usr/local/php7/bin/
    /usr/local/php7/bin/php /usr/local/php7/bin/composer.phar*
    [root@test1 bin]# chmod +x /usr/bin/composer7
    
  • 配置compose国内源
    [root@test1 ~]# sudo -H -u nginx bash -c 'composer7 config -g repo.packagist composer https://packagist.phpcomposer.com'
    [root@test1 ~]# composer7 -v
    

七、优化配置文件

以下配置优化取自php5,未经验证

[root@test-web php-fpm.d]# cat web1.conf
[web1]
;fpm监听端口,即nx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm_web1.sock
;listen.allowed_clients = 127.0.0.1
;允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。
;backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。
listen.backlog = 2048
;unix socket设置选项,如果使用tcp方式访问,这里注释即可。 
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
;启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。
user = nginx
group = nginx
;每一个请求的访问日志,默认是关闭的。
access.log = /data/logs/php-fpm/access.log
;设定访问日志的格式。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
;php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand 如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。
;pm = dynamic
pm = static
;如果选择dynamic,则进程数是动态变化的,由以下参数决定:
pm.max_children = 30                                               ;子进程最大数
pm.start_servers = 30                                               ;启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 30                                           ;保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 50                                          ;保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_requests = 80                                               ;设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /php-fpm_status_web1                               ;FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /php-fpm_ping_web1                                      ;FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)
ping.response = pong                                                ;用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
;request_terminate_timeout = 60s                                     ;设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
request_slowlog_timeout = 20s                                       ;当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
slowlog = /var/log/php-fpm/www-slow.log                             ;慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭
rlimit_files = 10240                                                ;设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
security.limit_extensions = .php .php3 .php4 .php5                  ;设置php允许执行的文件,默认只允许执行.php文件。
php_admin_value[error_log] = /data/logs/php-fpm/www-error.log         ;php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
php_admin_flag[log_errors] = on                                     ;记录错误信息(保存到日志文件中)
php_admin_value[date.timezone] = Asia/Shanghai                      ;增加参数,默认 date.timezone 是被注释掉的,也就是默认时区是 utc,设置php时区
php_value[session.save_handler] = files                             ;session的存储方式
php_value[session.save_path] = /var/lib/php/session                 ;session id存放路径
php_admin_value[upload_max_filesize] = 20M
php_admin_value[post_max_size] = 20M
php_admin_value[memory_limit] = 512M                                ;memory_limit主要是为了防止程序错误,或者死循环占用大量的内存,导致系统宕机。在引入大量三方插件,或者代码时,进行内存限制就非常有必要了。
;php_admin_value[disable_functions] = exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open
;使用disable_functions限制程序使用一些可以直接执行系统命令的函数如system,exec,passthru,shell_exec,proc_open等等。
;php_admin_value[disable_functions] = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
;php_admin_value[open_basedir] =  /data/www/:/tmp/:/home/www/
;upload_tmp_dir 的这个参数为上传文件的临时目录,需要 php 进程有读写权限。
php_admin_value[upload_tmp_dir] =  /tmp        
php_admin_value[display_errors] =  On
最后修改日期: 2019年10月16日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。