Linux源码安装PHP及Swoole

前言

初衷:为了记录php源码安装及添加swoole扩展的命令。
环境:
阿里云服务器 linux
centos7.6
php7.2.2.1

一、PHP源码安装

1.先更新yum源及添加后续操作会用到的扩展。

已经装过就的忽略~

yum -y update
yum -y install wget
yum -y install lrzsz
yum -y install epel-release
yum -y install libmcrypt libmcrypt-devel
yum -y install openssl-devel
yum -y install curl-devel
yum -y install php-mcrypt
yum -y install gcc
yum -y install gcc+
yum -y install gcc-c++
yum -y install make gd-devel libjpeg-devel libpng libpng-devel libxml2-devel bzip2 bzip2-devel libcurl-devel libaio
yum -y install autoconf
yum -y install git
yum -y install freetype-devel
yum -y install libicu-devel
yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap

2.下载PHP源码并解压

wget https://www.php.net/distributions/php-7.2.21.tar.bz2

也可以到官网下载再通过rz上传到服务器

解压下载的压缩文件

tar -xjvf php-7.2.21.tar.bz2

进入解压完的目录

3.检测环境及编译安装

configure:监测软件依赖关系,对即将安装的软件进行配置,检测环境例如检测是否有gcc扩展等,下面几个基础参数介绍

--prefix:指定php的安装路径
--with-config-file-path:指定php配置文件存放路径
--enable-fpm:添加PHP-FPM扩展

其它的可以通过./configure --help查看详细的参数

这里我是准备把PHP安装在/usr/local/php7.2路径下,配置文件存放的路径是/usr/local/php7.2/etc,这个是比较常规的路径存放。命令中的路径以实际需要存放的路径为准
以下里面带了很多需要的扩展,看各自需求进行添加删除。

./configure --prefix=/usr/local/php7.2 --with-config-file-path=/usr/local/php7.2/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-ipv6 --disable-rpath --enable-dom --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-libmbfl --enable-ftp --with-gd --enable-gd-jis-conv --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --with-ldap=shared --without-gdbm

如果有报
configure: error: Cannot find ldap libraries in /usr/lib

执行以下命令

cp -frp /usr/lib64/libldap* /usr/lib/

make:构建,扩展提供的是源码包 需要编译成so文件php才能去加载这个so文件才能够使用

make install :装依赖

make
make install

将PHP源码目录中的配置文件复制到上面指定的配置文件路径,有两份配置文件,一份是开发版一份是生产的,这里使用的是开发板。

cp php.ini-development /usr/local/php7.2/etc/
cp php.ini-production /usr/local/php7.2/etc/
cp /usr/local/php7.2/etc/php.ini-production /usr/local/php7.2/etc/php.ini

执行命令查看路径是否对的上,如果对上了基本就OK了

/usr/local/php7.2/bin/php --ini
Configuration File (php.ini) Path: /usr/local/php7.2/etc
Loaded Configuration File:         /usr/local/php7.2/etc/php.ini

这里注意下如果需要重新编译安装(例如因配置参数填错需要重装)最好将原先安装的PHP的目录删掉再进行编译安装

4.添加php命令到全局变量

vi /etc/profile

以下是profile中部分代码

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge

最后一行添加以下代码,将PHP安装目录中的bin目录配置进全局PATH中

PATH=$PATH:/usr/local/php7.2/bin
export PATH

保存退出后执行以下命令后生效

source /etc/profile

5.开启php-fpm支持

拷贝php-fpm所需的配置文件去掉default

cp /usr/local/php7.2/etc/php-fpm.conf.default /usr/local/php7.2/etc/php-fpm.conf
cp /usr/local/php7.2/etc/php-fpm.d/www.conf.default /usr/local/php7.2/etc/php-fpm.d/www.conf

打开默认的www.conf配置文件,查看配置文件指定的user和group

vi /usr/local/php7.2/etc/php-fpm.d/www.conf

看到配置文件默认指定了用户和组都是www

user = www
group = www

创建对应的分组和用户

groupadd www
useradd -g www www

启动php-fpm服务

/usr/local/php7.2/sbin/php-fpm -R

配置php-fpm服务到systemctl,这个不是必须的没有需求可以跳过

编辑php-fpm配置文件

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

;pid = run/php-fpm.pid

修改为

pid = run/php-fpm.pid

这样php-fpm运行就会将运行的进程号记录到php-fpm.pid文件中

创建php-fpm服务文件

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

添加内容

[Unit]
Description=php-fpm
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/php7.2/var/run/php-fpm.pid
ExecStart=/usr/local/php7.2/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

PIDFile和ExecStart需改为对应文件实际的绝对路径

重新加载systemctll配置,启动服务

systemctl daemon-reload
systemctl start php-fpm

通常刚配置完启动后都会报端口冲突,可以通过

systemctl status php-fpm

查看是否是通过冲突,是的话找到php-fpm的进程号杀掉就可以或者直接

killall php-fpm

就OK了

常用的systemctl管理命令

启动服务
systemctl start php-fpm

查看状态
systemctl status php-fpm

停止服务
systemctl stop php-fpm

重启服务
systemctl restart php-fpm

修改配置文件后重载
systemctl reload php-fpm

开机自启动
systemctl enable php-fpm

禁止开机自启动
systemctl didable php-fpm

二丶添加Swoole扩展

1.下载swoole源码

git clone https://gitee.com/swoole/swoole.git

cd 到swoole 执行以下命令用于生成configure

/usr/local/php7.2/bin/phpize

指定pay-config 进行检测及配置,这里多加了一个启用异步Redis客户端

./configure --with-php-config=/usr/local/php7.2/bin/php-config --enable-async-redis
make
make install

最后在php.ini里添加

extension=swoole.so

END

你可能感兴趣的:(Linux源码安装PHP及Swoole)