标签: PHP-FPM

  • AWS云服务器Bitnami套件安装WordPress更新php版本到7.4.33 图文教程

    AWS云服务器Bitnami套件安装WordPress更新php版本到7.4.33 图文教程

    今日有小伙伴找到老季,说想要把aws云ec2服务器WordPress网站环境从php7.3升级到php7.4的版本,我们这里也记录一下这个的更新过程。

    服务器情况

    无法连接aws的ec2服务器

    登录上aws也经历了一些波折,发现登录服务器,老是无法连接。要不就是卡住了一样。之后就没有反应了。

    要么就是提示:

    ———-ERROR——- Unable to start command: invalid uid and gid

    毫无办法,按理来说aws不可能会有这种,控制台都无法连接ec2服务器的问题。之后我们终于查到了问题,由于系统安装的是ubuntu,所以我们用终端连接时,需要使用ubuntu用户进行连接,具体如下图所示:

    Run As : ubuntu

    这就是重点了,如果是centos、debian等发型版用root即可。

    之后重新使用”会话管理器”菜单就可以连接了。

    已安装的环境bitnami套件

    登录上服务器,发现服务器使用的是/opt/bitnami/ctlscript.sh命令,所以断定是bitnami的套件,而官网并没有给出详细的套件,这里我们只能自己编译了。

    编译php7.4.33

    安装必要的环境包

    请先直接切换到root用户,然后使用如下命令进行批量下载并安装必要的包

    sudo su   //直接回车
    wget https://www.php.net/distributions/php-7.4.33.tar.gz
    tar -xvf php-7.4.33.tar.gz
    apt-get update
    apt-get install -y libxml2-dev libssl-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libfreetype6-dev zlib1g-dev libzip-dev libsqlite3-dev libonig-dev

    No package ‘libxml-2.0’ found

    hecking for libxml-2.0 >= 2.7.6… no configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met: No package ‘libxml-2.0’ found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.

    但我们已经安装了libxml而且是最新的版本,在终端中指定一下路径:

    export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
    

    No package ‘sqlite3’ found

    configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package ‘sqlite3’ found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SQLITE_CFLAGS and SQLITE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.

    apt-get install libsqlite3-dev

    No package ‘oniguruma’ found

    configure: error: Package requirements (oniguruma) were not met: No package ‘oniguruma’ found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables ONIG_CFLAGS and ONIG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.

    apt-get install libonig-dev

    配置PHP

    cd php-7.4.33
    ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --enable-mbstring --with-curl --with-openssl --with-zlib --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --enable-opcache --enable-xml --enable-intl --with-gd --with-jpeg --with-freetype --with-mysqli --with-pdo-mysql

    Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

    一开始出现了Your PHP installation appears to be missing the MySQL extension which is required by WordPress.错误,是我们没有带上mysql的扩展--with-mysqli --with-pdo-mysql,以上编译时,我们已经带上了。

    编译和安装PHP7.4.33

    make
    sudo make install
    

    配置php.ini

    sudo cp php.ini-development /usr/local/php7/etc/php.ini

    编辑 /usr/local/php7/etc/php.ini

    找到mysqli.default_socketpdo_mysql.default_socket的配置区,将其设置成/opt/bitnami/mysql/tmp/mysql.sock

    mysqli.default_socket = "/opt/bitnami/mysql/tmp/mysql.sock"
    
    pdo_mysql.default_socket = "/opt/bitnami/mysql/tmp/mysql.sock"
    

    如不配置则会出现:Error establishing a database connection

    导致WordPress的运行php环境找不到mysql的链接方法

    配置php-fpm.conf

    编辑/usr/local/php7/etc/php-fpm.conf文件

    sudo vi /usr/local/php7/etc/php-fpm.conf

    内容如下:

    [global]
    pid = /run/php-fpm.pid
    error_log = /var/log/php-fpm/error.log
    [my_pool]
    user = daemon
    group = daemon
    ;listen = 127.0.0.1:9000
    listen = /var/run/php-fpm.sock
    listen.owner = daemon
    listen.group = daemon
    pm = dynamic
    pm.start_servers = 5
    pm.min_spare_servers = 2
    pm.max_spare_servers = 8
    pm.max_children = 12

    这里我们使用的用户及用户组都是daemon跟bitnami套件中apache设置的是一样的权限。

    检查一下/var/run/这个目录是否存在,不存在则需要创建。

    启动php-fpm

    /usr/local/php7/sbin/php-fpm

    可以通过 ps aux | grep php-fpm 命令查看我们的php是否允许成功

    如果有/usr/local/php7/etc/php-fpm.conf的配置在运行说明已成功。

    配置apache2

    修改/opt/bitnami/apache2/conf/php-fpm-apache.conf,修改前记得备份!!!

    修改配置前请确保:/usr/local/php7/etc/php-fpm.conf的php-fpm已在运行。

    /opt/bitnami/apache2/conf/php-fpm-apache.conf改为以下内容

    <IfDefine USE_PHP_FPM>
      <Proxy "unix:/var/run/php-fpm.sock|fcgi://www-fpm" timeout=300>
      </Proxy>
      <FilesMatch \.php$>
        <If "-f %{REQUEST_FILENAME}">
          SetHandler "proxy:fcgi://www-fpm"
        </If>
      </FilesMatch>
    </IfDefine>

    此处Proxy需要跟上面的php-fpm.conf配置的listen一致,否则apache2无法链接到php-fpm。

    重启bitnami的apache服务

    /opt/bitnami/ctlscript.sh restart apache
    

    检查php版本是否成功

    我们在网站目录中新建一个info.php内容如下

    <?php phpinfo();
    

    之后通过网址打开 http://域名/info.php 检查一下,php版本是否是7.4.33

    错误日志

    我们的配置过程中出现了一些未知错误,还好有日志可以查询,下面我们指一下日志位置,有需要的小伙伴可能会用到。

    tail -n 20 /opt/bitnami/apache2/logs/error_log

    至此,教程结束,可能不算十分完整,但大概过程就是这样的。请小伙伴们指正~

  • LNMP定时自动检测502 Bad Gateway错误并重启PHP

    LNMP定时自动检测502 Bad Gateway错误并重启PHP

    简单的脚本,用来监控php的 502 Bad Getway 并自动重启php服务进程,下面记录一下具体的脚本内容,比如将文件命名为 check_php.sh ,放在 /root 目录中

    #!/bin/bash
    MY_URL="https://www.jiloc.com/"
    RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
    if [ -n "$RESULT" ]; then
        /etc/init.d/php-fpm restart
    fi

    给予可执行权限:

    chmod +x /root/check_php.sh

    通过 crontab 设置自动运行:

    crontab -e

    crontab里写入如下内容

    */5 * * * * /root/check_php.sh
  • php-fpm 在 MacOS 中重启 图文教程

    php-fpm 在 MacOS 中重启 图文教程

    查看php-fpm端口是否在被php-fpm使用

    sudo lsof -i:9000

    一般修改 php.ini 文件后经常需要重启php-fpm,杀掉全部进程

    sudo killall php-fpm 

    启动php-fpm

    sudo php-fpm 
  • 如何在Docker容器中安装 apache php7.3配置环境?

    如何在Docker容器中安装 apache php7.3配置环境?

    前面我们写了 公司OA项目服务器配置注意点 ,迫于公司的系统只有现成apache的rewirte规则,而且我对apache并不熟而且使用得很少,所以这里我们记录一下如何在Docker容器中配置apache+php7.3的环境,废话不多说直接看配置。

    在powershell终端中部署容器

    docker run -d -p 8081:80 --name japache --link jmysql -v D:\wwwroot:/data/wwwroot -v D:\DockerConfig\apache2\sites-enabled\:/etc/apache2/sites-enabled/ --restart=always php:7.3-apache

    网站文件跟目录在 D:\wwwroot

    请注意容器与主机之间映射文件的对应关系

    进入Docker容器

    docker exec -it japache /bin/bash

    在容器中安装php扩展mysqli,启用rewrite功能

    docker-php-ext-install mysqli
    a2enmod rewrite

    配置apache文件

    D:\DockerConfig\apache2\sites-enabled\ 目录下配置一个名为 poweridc.conf 的文件,内容如下:

    <VirtualHost *:80>
    	ServerName poweridc
    	ServerAdmin webmaster@localhost
    	DocumentRoot /data/wwwroot/POWER_IDC
    	<Directory /data/wwwroot/POWER_IDC>
    		Options Indexes FollowSymLinks
    		AllowOverride All
    		Require all granted
    	</Directory>
    	RewriteEngine on
    	RewriteCond %{REQUEST_METHOD} ^TRACE
    	RewriteRule .* - [F]
    	RewriteRule !(^/static|\.(gif|swf|exe|png|jpg|js|css)$) /index.php [L]
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    修改hosts(可选)

    Linux Windows MacOS 等系统中hosts的原理及作用

    浏览器访问

  • docker logs-查看docker容器日志

    docker logs-查看docker容器日志

    前面老季学习了docker的相关知识,在实际的项目中我们知道使用docker logs查看日志,但是如何通过 docker logs 命令可以查看容器的指定时间日志,指定最后行数呢?下面我们将会记录一下具体的方法。

    命令格式

    $ docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

    例子

    查看指定时间后的日志,只显示最后100行:

    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

    查看最近30分钟的日志:

    $ docker logs --since 30m CONTAINER_ID

    查看某时间之后的日志:

    $ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

    查看某时间段日志:

    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
  • PHP7 开启 Zend Opcache 加速网站服务器 图文教程

    PHP7 开启 Zend Opcache 加速网站服务器 图文教程

    作为PHP这10年来最大的版本与性能升级,PHP7在多次的测试中都表现出很夸张的性能提升,然而,为了让它能发挥出最大的性能,需要手动开启PHP自带的opcache使其性能加速(默认是关闭的)。对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索“PHP APC加速”的方法。

    什么是zend opcache?

    Zend OPcache 通过 opcode 缓存和优化提供更快的 PHP 执行过程。它将预编译的脚本文件存储在共享内存中供以后使用,从而避免了从磁盘读取代码并进行编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。

    当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。如果动态内容的性能瓶颈不在于 CPU 和内存,而在于 I/O 操作,比如数据库查询带来的磁盘 I/O 开销,那么 opcode cache 的性能提升是非常有限的。但是既然 opcode cache 能带来 CPU 和内存开销的降低,这总归是好事! 现代操作码缓存器(Optimizer+,APC2.0+,其他)使用共享内存进行存储,并且可以直接从中执行文件,而不用在执行前“反序列化”代码。这将带来显着的性能加速,通常降低了整体服务器的内存消耗,而且很少有缺点。

    线下开发环境谨慎请设置 revalidate_freq值!!!

    如何开启opcahe加速?

    修改 php.ini 搜索 : [opcache]
    增加以下代码(或者在原有基础上改一下):

    zend_extension = php_opcache.dll
    opcache.enable=1
    opcache.enable_cli=1
    opcache.memory_consumption=128
    opcache.revalidate_freq=60
    opcache.max_accelerated_files=2000

    几个重要参数的作用说明:

    zend_extension = php_opcache.dll //没有这一句无法开启Zend Opcache
    opcache.enable=1 //开启opcache
    opcache.enable_cli=1 //是否在CLI(即命令行时)启用opcache
    opcache.memory_consumption=128 //共享内存的大下 可以根据项目大小和服务器配置自行调整
    opcache.max_accelerated_files=2000 //最大缓存文件个数
    opcache.revalidate_freq=60  //定期检查文件的修改时间,我这设置为60s  单位 秒 

    设置好后,重启apache即可。打开phpinfo观察变化:

  • Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    Docker 本地基本搭建Nginx+PHP-FPM+MARIADB 命令

    记录一下在MacOS下利用Docker搭建Nginx+php-fpm+MariaDB的常用命令:

    # 拉取镜像资源
    docker pull mariadb && docker pull bitnami/php-fpm && docker pull nginx
    # 本地Docoker建立顺序
    docker run -d --name jmysql --restart=always -e MYSQL_ROOT_PASSWORD=jjjjjj -e TZ="Asia/Shanghai" mariadb
    docker run -d --name jphp-fpm -v /wwwroot:/data/wwwroot --restart=always -e TZ="Asia/Shanghai" --link jmysql bitnami/php-fpm
    docker run -d --name jnginx -v /DockerConfig/nginx/conf.d:/etc/nginx/conf.d -v /wwwroot:/data/wwwroot -p 8081:80 --restart=always -e TZ="Asia/Shanghai" --link jphp-fpm --link jmysql nginx
    #启动顺序
    docker start jmysql
    docker start jphp-fpm
    docker start jnginx

  • Docker 安装 PHP 并配合 Nginx 运行 phpinfo

    Docker 安装 PHP 并配合 Nginx 运行 phpinfo

    搜索安装 PHP 镜像

    docker pull php

    查找Docker Hub上的php镜像

    $ docker search php
    NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    php                       While designed for web development, the PH...   1232      [OK]       
    richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   207                  [OK]
    phpmyadmin/phpmyadmin     A web interface for MySQL and MariaDB.          123                  [OK]
    eboraas/apache-php        PHP5 on Apache (with SSL support), built o...   69                   [OK]
    php-zendserver            Zend Server - the integrated PHP applicati...   69        [OK]       
    million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   67                   [OK]
    webdevops/php-nginx       Nginx with PHP-FPM                              39                   [OK]
    webdevops/php-apache      Apache with PHP-FPM (based on webdevops/php)    14                   [OK]
    phpunit/phpunit           PHPUnit is a programmer-oriented testing f...   14                   [OK]
    tetraweb/php              PHP 5.3, 5.4, 5.5, 5.6, 7.0 for CI and run...   12                   [OK]
    webdevops/php             PHP (FPM and CLI) service container             10                   [OK]
    ...

    这里我们拉取官方的镜像,标签为5.6-fpm

    $ docker pull bitnami/php-fpm

    等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为5.6-fpm的镜像。

    $ docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
     bitnami/php-fpm            latest              84abb84939ff        About an hour ago   246MB
     php                        latest              f0357c41bff5        10 days ago         367MB
     nginx                      latest              719cd2e3ed04        2 weeks ago         109MB
     docker4w/nsenter-dockerd   latest              2f1c802f322f        8 months ago        187kB

    Nginx + PHP 部署

    Nginx 部署可以查看:Docker 安装 Nginx,一些 Nginx 的配置参考这篇文章。

    启动PHP容器

    $ docker run -d --name jphp-fpm -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc  bitnami/php-fpm

    命令说明:

    • –name jphp-fpm : 将容器命名为 jphp-fpm。
    • -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc 将主机中项目的目录 POWER_IDC 挂载到容器的data/wwwroot/poweridc

    查看php容器IP

    docker inspect --format '{{ .NetworkSettings.IPAddress }}' jphp-fpm

    配置Nginx的虚拟主机文件

    在该目录下修改 D:\DockerConfig\nginx\conf.d\poweridc.conf 文件,内容如下:

    server {
        listen       80;
        server_name  poweridc;
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        location / {
            root   /data/wwwroot/poweridc;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            #root           html;
            fastcgi_pass   jphp-fpm:9000;#下面用了--link参数,hosts里会自动解析ip
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /data/wwwroot/poweridc/$fastcgi_script_name;
            include        fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    

    配置文件说明:

    • 172.17.0.3:9000: 表示 php-fpm 服务的容器地址,上面已经说明。

    启动Nginx

    docker run -d -p 8081:80 --name jnginx -v D:\wwwroot\POWER_IDC:/data/wwwroot/poweridc -v D:\DockerConfig\nginx\conf.d\poweridc.conf:/etc/nginx/conf.d/poweridc.conf -v D:\DockerConfig\nginx\logs:/etc/nginx/logs --link jphp-fpm:bitnami/php-fpm nginx
    • -p 8081:80: 端口映射,把 nginx 中的 80 映射到本地的 8081 端口。
    • D:\wwwroot\POWER_IDC: 是本地 html 文件的存储目录,/data/wwwroot/poweridc 是容器内 html 文件的存储目录。
    • D:\DockerConfig\nginx\conf.d\poweridc.conf: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d/poweridc.conf 是容器内 nginx 配置文件的存储目录。

    运行php文件

    接下来我们在 D:\wwwroot\POWER_IDC 目录下创建 info.php,代码如下:

    <?php phpinfo();

    浏览器打开 http://poweridc:8081/info.php,显示如下:

  • Amh 面板 Nginx php-fpm Thinkphp Rewrite

    Amh 面板 Nginx php-fpm Thinkphp Rewrite

    前面我们介绍了?Nginx 下 ThinkPHP URL 的 PATHINFO 与 REWRITE 重写 配置方法,那么我们说一下在Amh面板中的使用方法

    Thinkphp REWRITE模式 2:
    该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess 文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了,具体参考下面的URL重写部分。四、兼容模式: 设置URL_MODEL 为3
    兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序,还可以和URL_WRITE模式整合。兼容模式URL可以支持任何的运行环境。
    兼容模式的效果是:
    http://serverName/appName/?s=/module/action/id/1/
    并且也可以支持参数分割符号的定义,例如在URL_PATHINFO_DEPR为~的情况下,下面的URL有效:
    http://serverName/appName/?s=module~action~id~1

    ThinkPHP提供的Nginx环境配置情况
    在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

    location / { // …..省略部分代码
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    }

    其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

    AMH面板中的操作流程:
    1、在/usr/local/nginx/conf/rewrite下面新建一个规则文件thinkphp.conf

    2、将内容修改为如下:

    location / { 
        if (!-e $request_filename) { 
            rewrite ^(.*)$ /index.php?s=$1 last; 
            break; 
        } 
    }

    3、在面板编辑主机选择Rewrite规则:thinkphp.conf 就OK啦!

WeChat