【亲测】PHP Version 7.3.8 + Nginx 1.16.1 (100%无坑版)编译安装

2019最新PHP 7.3.8版和 Nginx1.16,总的来说坑比以前更多,流程也更为繁琐。本文的运行环境是Centos 7.1,除了yum工具的使用有别于其他Linux之外,大部分套路都是大同小异的。

第一章 环境准备

1. 最好当然是全新的干净系统无疑,但我猜大多数情况下是做不到的,那么请首先彻底反安装PHP,Nginx以及Apache,方法如下:

rpm -qa|grep php
rpm -qa|grep nginx
rpm -qa|grep httpd

用以上三个命令抓取所有与之相关的包,然后用以下两条命令,将所有相关的包逐个卸载干净:

yum -y remove 包名
或者
rpm -e 包名

2. 然后开始更新系统,安装EPEL源:

yum -y install epel-release 
yum -y update

3. 安装前的填坑之旅

在安装前需要预先将可能遇到的坑先填平才可进入下一步,这一步有点繁琐,请坚持做完,如果跳过这一步直接进入安装环节,将会出现许多不可预知的错误。

a) 常规坑,这个比较简单,用yum安装各种依赖关系(注:这是一条长命令,务必一次性复制完再粘贴执行):

yum install -y gcc gcc-c++ \
freetype-devel bzip2-devel \
curl-devel autoconf libxml2-devel \
libjpeg-devel libpng-devel \
libxslt-devel libzip-devel \
libmcrypt mhash openssl openssl-devel

b) zlib 坑:

wget https://www.zlib.net/fossils/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install

yum remove -y libzip
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install

c) lib64 坑:

nano /etc/ld.so.conf
在文件尾部加入:
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
存盘退出。
ldconfig -v
ln -s /usr/lib64/libssl.so /usr/lib/

第二章 安装PHP 7.3.8

1. 下载php 7.3.8

wget https://www.php.net/distributions/php-7.3.8.tar.gz
tar xzvf php-7.3.8.tar.gz
cd  php-7.3.8

2. 创建php相关用户

groupadd www
useradd -g www www

3. 配置php, 完整复制粘贴以下长命令:

./configure --prefix=/usr/local/php \
--with-fpm-user=www \
--with-fpm-group=www \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-png-dir \
--with-jpeg-dir \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-bz2 \
--with-mhash \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-xml \
--enable-zip \
--enable-fpm 

命令执行完毕后如果显示 ”Thank you for using PHP.“ , 说明各种坑都填平了,可以进入编译安装环节,如果中途报错了,还得仔细根据提示看看到底哪个环节出了问题。


4. 编译及安装

在编译安装之前,不要着急,先执行这条命令:

cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

然后才是老规矩:

make && make install

一般来说,如果严格按照我上述的流程走下来,到这一步就不会再出现什么错误了,安装过程大概20分钟,请耐心等待。


5. 加入php路径到系统PATH

nano ~/.bash_profile
在PATH=$PATH这行尾部加上:/usr/local/php/bin
存盘退出。
source ~/.bash_profile

6. 创建php和php-fpm初始配置文件

cp php.ini-production /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
ln -s /usr/local/php/sbin/php-fpm /usr/local/bi

7, 安装mcrypt

mcrypt是一个已被弃用的加密模块,尽管官方从php 7.1开始就已经无法使用常规方法去安装了,但是大量php项目还在使用它,一时半会儿还无法真正退出历史舞台,所以没办法,我们只能使用phpize来曲线救国:

wget http://pecl.php.net/get/mcrypt-1.0.1.tgz
tar zxvf mcrypt-1.0.1.tgz
cd mcrypt-1.0.1
phpize (注意:如果之前没有将php路径加入系统PATH,则phpize在此处无法直接运行)
./configure
make && make install
安装完毕后,会显示一条信息:
Libraries have been installed in:
   /root/src/mcrypt-1.0.1/modules
这是mcrypt.so文件的存放路径,记下它。

编辑php.ini文件:
nano /usr/local/php/lib/php.ini
在文件种加一行:
extension=/root/src/mcrypt-1.0.1/modules/mcrypt.so

存盘退出,重启php即可。

此处如果报:mcrypt.h not found. Please reinstall libmcrypt,就按以下方法处理一下:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install

 


8. 设置php-fpm, 这是nginx与php建立联系的关键,此处我们选择用unix套接字来链接nginx

题外话:关于采用unix套接字还是TCP地址来链接nginx的优缺点,此处不做深入讨论,感兴趣的可以参见这篇文章:

nginx 和 php-fpm 通信使用unix socket还是TCP

nano /usr/local/php/etc/php-fpm.d/www.conf

[www]
listen = /var/run/php-fpm.sock
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 10000
rlimit_files = 1024
slowlog = log/$pool.log.slow
存盘退出。

9. 将php设置为自启动服务

cp /root/src/php-7.3.8/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
(注:/root/src/php-7.3.8是我解压php源代码的目录)
systemctl start php-fpm
systemctl enable php-fpm

至此,PHP 7.3.8安装结束。


第三章 安装Nginx 1.16.1

1. 下载nginx

wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0.tar.gz

2. 配置nginx, 完整复制粘贴以下长命令:

./configure --user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_v2_module

3. 编译及安装:

make && make install

4. 修改nginx.conf配置文件

nano /usr/local/nginx/conf/nginx.conf

找到:
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

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

存盘退出。

4. 将nginx设为自启动服务:

nano /usr/lib/systemd/system/nginx.service

输入以下内容:
[Unit]
Description=nginx
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

存盘退出。

killall nginx (如果之前曾运行过nginx,先停止它)
systemctl start nginx
systemctl enable nginx

5. 测试nginx和php是否工作正常:

nano /usr/local/nginx/html/info.php (创建一个php文件)

输入以下内容,只有一行:

<?php phpinfo(); ?>

存盘退出。

打开浏览器,输入网址: http://服务器ip/info.php

如果出现以下画面,说明安装成功:


6. PHP 7.3.8 和 Nginx 1.16.1的各种默认路径小结

php可执行文件路径:
	/usr/local/php/bin
php配置文件:
 	/usr/local/php/lib/php.ini
php-fpm配置文件:
 	/usr/local/php/etc/php-fpm.conf

nginx可执行文件路径:   
 	/usr/local/nginx/sbin
nginx配置文件:
 	/usr/local/nginx/conf/nginx.conf
nginx 网站根目录:
	/usr/local/nginx/html

至此,php和nginx安装完毕,网站就基本可用了,接下来是番外篇,如果需要mysql服务和https服务的,可以一看。


第四章 番外

1. 安装mysql

安装原版mysql比较繁琐,可以选择mariadb替代,用法和原版mysql几乎一模一样,安装方法:

yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb

装完之后,进行初始化设置:

mysql_secure_installation

初始密码为空,直接敲入回车后,再设置root密码,其他没什么好说的,一路默认回车即可,只不过在碰到:

Disallow root login remotely? [Y/n] 

这是问你是否禁止远程root访问,我们要选No,否则Navicat之类工具会用不了,但如果此处我们即使选了No也不灵的话,那就只能用回传统方法来解决这个问题了:

mysql -uroot -p (进入mysql服务器,用刚才设置的新密码)
mysql>use mysql; 
mysql>update user set host = '%' where user = 'root'; 
mysql>FLUSH PRIVILEGES; 

2 . 如果碰到这个错误怎么办:

Error while trying to create admin user: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory

一般来说我们的mysql地址都是选localhost端口默认为3306的,但如果碰到以上错误,尝试把数据库地址填为:

127.0.0.1:3306

3. 安装ssl网站证书:

现在https越来越主流,如果SSL证书没有配置好,每次访问的时候浏览器就会报错,说你这是一个不安全的网站云云,我也花了很多时间来研究所谓“自颁证书”,很麻烦而且也没法彻底解决,因此我还是建议大家去VPS服务提供商(比如阿里,腾讯等)申请一个免费证书吧,如图:

证书申请成功后,一般会给你两个文件,一个.cet,另一个是.key,建立一个存放它的目录,比如:

mkdir /usr/local/nginx/cert

然后在将这两个文件上传到该目录,修改nginx配置:

nano /usr/local/nginx/conf/nginx.conf

找到:
 ssl_certificate      cert.pem;
 ssl_certificate_key  cert.key;
这两个地方,将它改为:

 ssl_certificate /usr/local/nginx/cert/你的证书.crt;
 ssl_certificate_key /usr/local/nginx/cert/你的证书.key;

就行了。

证书设置好了之后,可以去腾讯平台验证一下https是否安装成功:

https://cloud.tencent.com/product/tools

如果检测通过,会显示这样的画面:

一般来说,苹果的https检测(ATS),会比普通的https检测要严格一些,苹果ATS能通过的话,你的网站https这一关就肯定没问题了。


最后,本文大量参阅了 https://segmentfault.com/a/1190000017570008 这篇文章的经验,在此对原作者表示感谢!

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值