PHP7.4正式版已经发布!本文详细记录了基于Ubuntu安装PHP7.4 + Nginx + MySQL来搭建WEB服务器的过程。
PHP7.4支持箭头函数、代码预加载等新特性,详细了解PHP7.4的新特性请点击:php7.4新特性。
安装之前
按照惯例更新软件列表:
1 | sudo apt-get update |
安装PHP7.4
下载PHP 7.4的源代码到Ubuntu上:
1
wget https://www.php.net/distributions/php-7.4.0.tar.gz
如果下载速度太慢,可以使用PHP 7.4国内高速下载地址:
1
wget https://gz-1257226027.cos.ap-guangzhou.myqcloud.com/php-7.4.0.tar.gz
解压,进入php7.4源代码目录:
1
2tar zxvf php-7.4.0.tar.gz
cd php-7.4.0/先安装PHP需要的依赖
1
2
3
4sudo apt-get install libzip-dev bison autoconf build-essential pkg-config git-core\
libltdl-dev libbz2-dev libxml2-dev libxslt1-dev libssl-dev libicu-dev libpspell-dev\
libenchant-dev libmcrypt-dev libpng-dev libjpeg8-dev libfreetype6-dev libmysqlclient-dev\
libreadline-dev libcurl4-openssl-dev librecode-dev libsqlite3-dev libonig-dev配置PHP安装参数
1
./configure --prefix=/usr/local/php7 --with-config-file-scan-dir=/usr/local/php7/etc/php.d --with-config-file-path=/usr/local/php7/etc --enable-mbstring --enable-zip --enable-bcmath --enable-pcntl --enable-ftp --enable-xml --enable-shmop --enable-soap --enable-intl --with-openssl --enable-exif --enable-calendar --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-opcache --enable-fpm --enable-session --enable-sockets --enable-mbregex --enable-wddx --with-curl --with-iconv --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr --enable-gd-jis-conv --with-openssl --with-pdo-mysql=mysqlnd --with-gettext=/usr --with-zlib=/usr --with-bz2=/usr --with-recode=/usr --with-xmlrpc --with-mysqli=mysqlnd
执行编译安装
1
sudo make install
如果编译过程中提示内存不足:
virtual memory exhausted: Cannot allocate memory
Makefile:921: recipe for target ‘ext/fileinfo/libmagic/apprentice.lo’ failed
make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1请先给服务器添加虚拟内存,参考: 为Linux添加虚拟内存Swap。
复制配置文件
1
2
3sudo cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
sudo cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
sudo cp php.ini-production /usr/local/php7/etc/php.ini添加环境变量,编辑 /etc/profile,文件末尾添加一行:
1
PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH
使环境变量生效:
1
source /etc/profile
将php添加到sudo环境变量,编辑
/etc/sudoers
文件中的Defaults secure_path
,后面加上PHP路径:1
/usr/local/php7/bin:/usr/local/php7/sbin:
启动php-fpm
1
sudo php-fpm
如果提示找不到用户组
nobody
的gid:[15-Nov-2019 15:53:49] ERROR: [pool www] cannot get gid for group ‘nobody’
[15-Nov-2019 15:53:49] ERROR: FPM initialization failed就要先创建nobody用户组:
1
sudo groupadd nobody
再重新执行
sudo php-fpm
即可启动。使用
php -v
命令查看php版本:1
2
3
4php -v
PHP 7.4.0 (cli) (built: Nov 28 2019 13:38:00) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies安装Nginx
到Nginx官网下载页面下载主线版本的Nginx源码,本次下载的是nginx-1.17.6。
1
wget http://nginx.org/download/nginx-1.17.6.tar.gz
随后解压源代码、进入源代码目录:
1
2tar zxvf nginx-1.17.6.tar.gz
cd nginx-1.17.6/先安装依赖
1
sudo apt-get install build-essential libtool libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev
配置、编译和安装nginx
1
2
3./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module
make
sudo make install配置软连接(启动、关闭nginx时就不用输入nginx的完整路径)
1
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
启动nginx
1
sudo nginx
没有任何输出,说明启动成功。
测试是否可以访问
在浏览器输入Ubuntu的IP地址,可以看到**Welcome to nginx!**说明启动成功。
也可以使用命令行curl 127.0.0.1
,正常情况能够看到HTML代码,说明nginx正常运行:1
2
3
4
5
6
7ubuntu@VM-35-226-ubuntu:~/nginx-1.17.6$ curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
......常用操作和路径
nginx安装目录:/usr/local/nginx
网站根目录:/usr/local/nginx/html/
nginx日志目录:/usr/local/nginx/logs/
nginx配置文件:/usr/local/nginx/conf/nginx.conf
启动nginx:
sudo nginx
关闭nginx:sudo nginx -s stop
重启nginx:sudo nginx -s reload
配置HTTPS、gzip压缩等常用功能参考:Nginx常用配置
配置nginx解析PHP
编辑nginx的配置文件:
1 | sudo vim /usr/local/nginx/conf/nginx.conf |
找到下面这段代码:
1 | location / { |
在后面添加一段:
1 | location ~ \.php(.*)$ { |
保存后,保存后重新启动nginx:
1 | sudo nginx -s reload |
在网站根目录创建一个php文件:
1 | sudo vi /usr/local/nginx/html/index.php |
写入以下php代码并保存:
1 |
|
在浏览器中输入服务器的IP地址看到phpinfo信息说明配置解析PHP成功。
安装Mariadb数据库
Mariadb是MySQL数据库的一个分支,API和命令行大部分兼容MySQL。
- 使用apt安装mariadb数据库:
1
sudo apt-get install mariadb-server mariadb-client
- 执行数据库初始化安装:根据提示设置数据库root用户密码、是否允许外网访问等。提示信息如下:
1
sudo mysql_secure_installation
Enter current password for root: 输入当前数据库root用户密码,直接回车即可。
*Set root password?*: 是否设置root用户密码,输入Y,随后输入并确认root密码。
*Remove anonymous users?*: 是否移除匿名数据库用户,根据自己需求选择
*Disallow root login remotely?*:是否禁止root用户远程登录,根据自己需求选择
*Remove test database and access to it?*:是否删除测试数据库test,自己选择
*Reload privilege tables now?*:是否刷新数据库权限表,选Y
尝试使用
mysql -u root -p
登录数据库,输入刚才设置的密码后提示错误如下:1
2
3mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'原因是数据库默认使用Linux系统的用户来登录数据库,需要将登录方式修改为密码登录。
解决方法:
使用sudo mysql -u root
登录数据库,在数据库中依次执行以下语句,修改登录方式并刷新权限:mysql 1
2
3
4use mysql #切换到mysql数据库
update user set plugin='mysql_native_password'; #修改plugin字段
flush privileges; #刷新权限
exit; #退出数据库再次输入
mysql -u root -p
即可通过密码登录数据库,无需root权限执行。mariadb配置文件目录和常用命令
mariadb配置文件保存在多个位置:/etc/mysql/mariadb.cnf
/etc/mysql/mariadb.conf.d/
/etc/mysql/conf.d/
mariadb常用命令:
启动mariadb:sudo systemctl start mariadb
关闭mariadb:systemctl stop mariadb
设置mariadb开机启动:sudo systemctl enable mariadb