树莓派Raspbian Jessie源码编译安装PHP7

这篇教程介绍如何在树莓派Raspbian Jessie系统上编译PHP7源码,创建Systemd service文件,使用Systemd管理php-fpm.service服务。第一代树莓派是单核CPU,编译MariaDB数据库和PHP7效率非常低。建议使用带二核CPU的Pi2或购买最新的带四核CPU的Pi3。

Raspbian Jessie编译PHP7源码

首先SSH登录树莓派。使用下面的wget命令从php.net下载PHP7源码。

wget http://php.net/distributions/php-7.0.4.tar.gz

下载完后,解压tar.gz文件。

tar xvf php-7.0.4.tar.gz

cd进入解压后生成的php目录。

cd php-7.0.4/

安装编译所需要的依赖工具包。

sudo apt-get install libkrb5-devlibc-client2007e libc-client2007e-dev libcurl4-openssl-dev libbz2-dev libjpeg-dev libmcrypt-dev libxslt1-dev libxslt1.1 libpq-dev build-essential git make

我们都知道,Linux系统编译源码之前需要运行一个名为configure的脚本。在运行configure脚本之前,我先列出我在configure时遇到的两个错误,以及如何解决这两个错误。

错误1

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

这是说找不到libc-client.a这个静态库文件。(.a是archive是缩写,全称为object code archive,即目标代码归档,属于静态库文件。)解决的方法是创建一个软链接。(英文名soft link,又叫做symbolic link。)

sudo mkdir /usr/c-client/
sudo ln -s /usr/lib/libc-client.a /usr/c-client/

错误2

error: Kerberos libraries not found.

Check the path given to --with-kerberos (if no path is given, searches in /usr/kerberos, /usr/local and /usr )

这个是说找不到kerberos库文件。其实在安装依赖工包时kerberos的库文件已经安装好了,只是没有被发现。解决办法还是创建软链接。

sudo mkdir /usr/kerberos

sudo ln -s /usr/lib/arm-linux-gnueabihf/mit-krb5/* /usr/kerberos

如果你要自己看看是否会出现以上两个错误,那么现在不必创建这两个软链接。如果你不想看见错误,那么现在运行上面四个命令,以避免出现错误。

好了,现在复制下面的configure命令。是的,这里有很多参数。把下面的所有代码一块复制,粘贴到树莓派的终端,再按Enter键运行configure。

./configure \
--prefix=/opt/php-7.0.4                      \
--with-config-file-path=/opt/php-7.0.4/etc   \
--with-zlib-dir                              \
--with-freetype-dir                          \
--enable-mbstring                            \
--with-libxml-dir=/usr                       \
--enable-soap                                \
--enable-calendar                            \
--with-curl                                  \
--with-mcrypt                                \
--with-zlib                                  \
--with-gd                                    \
--disable-rpath                              \
--enable-inline-optimization                 \
--with-bz2                                   \
--with-zlib                                  \
--enable-sockets                             \
--enable-sysvsem                             \
--enable-sysvshm                             \
--enable-pcntl                               \
--enable-mbregex                             \
--enable-exif                                \
--enable-bcmath                              \
--with-mhash                                 \
--enable-zip                                 \
--with-pcre-regex                            \
--with-pdo-mysql                             \
--with-mysqli                                \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-jpeg-dir=/usr                         \
--with-png-dir=/usr                          \
--enable-gd-native-ttf                       \
--with-openssl                               \
--with-fpm-user=www-data                     \
--with-fpm-group=www-data                    \
--with-libdir=/usr/lib/arm-linux-gnueabihf          \
--enable-ftp                                 \
--with-imap                                  \
--with-imap-ssl                              \
--with-kerberos                              \
--with-gettext                               \
--with-xmlrpc                                \
--with-xsl                                   \
--enable-opcache                             \
--enable-fpm

configure完编译环境后,让我们来使用make命令来开始编译PHP7源码。

make

如果你的树莓派有4核CPU,那么可以使用-j4选项来并行编译,让4个CPU核心同时工作。

make -j4

我的第一代树莓派是单核的CPU,编译效率非常慢,用了5个小时才编译完成。Pi2和Pi3分别有两核CPU及4核CPU,编译效率会大大提高。

编译完成后,使用下面的命令将PHP7安装到Raspbian Jessie系统。

sudo make install

安装完成时,它会告诉你PHP7的文件都安装到了哪些目录。这是非常有用的信息。

树莓派Raspbian Jessie源码编译安装PHP7

从上面的截图可以发现,php-fpm可执行文件安装在/opt/php-7.0.4/sbin/目录下。 php-fpm的配置文件安装在/opt/php-7.0.4/etc/目录下。可以先尝试启动php-fpm进程。

/opt/php-7.0.4/sbin/php-fpm

树莓派Raspbian Jessie源码编译安装PHP7

出现错误,提示php-fpm.conf配置文件未找到。

我们需要重命名两个文件。

sudo mv /opt/php-7.0.4/etc/php-fpm.conf.default /opt/php-7.0.4/etc/php-fpm.conf

sudo mv /opt/php-7.0.4/etc/php-fpm.d/www.conf.default /opt/php-7.0.4/etc/php-fpm.d/www.conf

然后,复制php.ini-production文件到php-fpm的配置目录下,并将它重命名为php.ini。

sudo cp /home/pi/php-7.0.4/php.ini-production /opt/php-7.0.4/etc/

现在就能启动php-fpm进程了。

sudo /opt/php-7.0.4/sbin/php-fpm

与Nginx搭配运行

我们可以使用sudo apt-get install nginx命令从Raspbian软件库中安装Nginx服务器。当然,如果你喜欢尝试编译最新版本的Nginx,可以查看下面的教程。

树莓派Raspbian Jessie源码编译安装Nginx网站服务器

安装Nginx后,打开nginx配置文件,将下面的指令添加到文件中。

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

我的网站根目录是/usr/share/nginx/html,如果你用的是其他目录,那么更改上面的root指令并保存文件。

重新加载Nginx。

sudo sysemctl reload nginx

然后在网站根目录创建一个test.php文件。

sudo nano /usr/share/nginx/html/test.php

将下面的PHP代码粘贴到文件中。

<?php

phpinfo();

?>

保存文件。然后在浏览器的地址栏输入:

ip-of-raspberrypi/test.php

将ip-of-raspberrypi替换成树莓派的真实IP。比如我输入的是192.168.1.102/test.php。如果看见了以下页面,说明php-fpm与Nginx在正常运行。在这里可以查看PHP的各类信息,比如可以发现PHP的版本是7.0.4。

树莓派Raspbian Jessie源码编译安装PHP7

PHP7的优化

启用日志文件

编辑php-fpm.conf文件。

sudo nano /opt/php-7.0.4/etc/php-fpm.conf

找到如下一行文字。

;error_log = log/php-fpm.log

去掉前面的注释符(;)。更改成如下。

error_log = /var/log/php-fpm.log

保存文件。

创建Systemd service文件

为php-fpm创建php-fpm.service文件。

sudo nano /etc/systemd/system/php-fpm.service

将下面的代码粘贴到php-fpm.service文件中。

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/var/run/php-fpm.pid
ExecStart=/opt/php-7.0.4/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.4/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

保存文件。然后杀死正在运行的php-fpm进程,再用systemctl启动php-fpm进程。

sudo pkill php-fpm

sudo systemctl start php-fpm

查看php-fpm的状态。

sudo systemctl status php-fpm

树莓派Raspbian Jessie源码编译安装PHP7

让php-fpm随树莓派开机启动。

sudo systemctl enable php-fpm

编辑www.config文件

sudo nano /opt/php-7.0.4/etc/php-fpm.d/www.conf

找到下面三行文字。

;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660

去掉这三行前面的分号。再找到下面这一行。

listen = 127.0.0.1:9000

将它更改成:

listen = /var/run/php7-fpm.sock

保存文件。然后打开nginx的配置文件。将fastcgi_pass的值更改成/var/run/php7-fpm.sock

location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   unix:/var/run/php7-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

保存文件后重启Nginx以及php-fpm进程。

sudo systemctl restart nginx

sudo systemclt restart php-fpm

现在Nginx与php-fpm通过unix socket通信,而不是通过TCP通信。

好了!我们成功地在树莓派Raspbian Jessie系统上编译了PHP7源码,安装PHP7,并能使用Systemd来管理php-fpm服务,让Nginx与php-fpm通过unix socket通信,提高了通信效率。

为这篇文章评分
[Total: 2 Average: 4]

发表评论

电子邮件地址不会被公开。 必填项已用*标注