2019最新PHP 7.3.8版和 Nginx1.16,总的来说坑比以前更多,流程也更为繁琐。本文的运行环境是Centos 7.1,除了yum工具的使用有别于其他Linux之外,大部分套路都是大同小异的。
1. 首先彻底反安装PHP,Nginx以及Apache,方法如下:
|grep php
rpm -qa
用以上三个命令抓取所有与之相关的包,然后用以下两条命令,将所有相关的包逐个卸载干净:
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/
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即可。
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安装结束。
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;
}
存盘退出。
5. 将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
6. 测试nginx和php是否工作正常:
nano /usr/local/nginx/html/info.php (创建一个php文件)
输入以下内容,只有一行:
存盘退出。
打开浏览器,输入网址: http://服务器ip/info.php
如果出现以下画面,说明安装成功:
7. 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检测(ATS),会比普通的https检测还要严格一些,苹果ATS能通过的话,你的网站https这一关就肯定没问题了。
最后,本文大量参阅了 阿里云 centos7.6 安装 php7.3 这篇文章的经验,在此对原作者表示感谢!