0%

Ubuntu系统安装PHP7.3 + Nginx + Mariadb详细教程

在Ubuntu上搭建最新的Web服务器环境:PHP7.3 + Nginx + Mariadb。Mariadb数据库是MySQL的一个分支,API和命令行兼容MySQL。

安装环境

操作系统:Ubuntu 16.04
PHP版本: PHP 7.3
Web服务器:Nginx 1.17.4
数据库:Mariadb 10.0.38(MySQL的一个分支,与MySQL兼容)

安装之前

按照惯例更新软件列表:

1
sudo apt-get update

安装PHP

  1. PHP官网下载页面找到PHP 7.3的源代码下载地址,下载到Ubuntu上:

    1
    wget https://www.php.net/distributions/php-7.3.10.tar.gz
  2. 解压,进入php7.3源代码目录:

    1
    2
    tar zxvf php-7.3.10.tar.gz
    cd php-7.3.10/
  3. 先安装PHP需要的依赖

    1
    2
    3
    4
    sudo 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
  4. 配置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
  5. 执行编译安装

    1
    sudo make install
  6. 复制配置文件

    1
    2
    3
    sudo 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
  7. 添加环境变量,编辑 /etc/profile,文件末尾添加一行:

    1
    PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH
  8. 使环境变量生效:

    1
    source /etc/profile
  9. 将php添加到sudo环境变量,编辑 /etc/sudoers文件中的 Defaults secure_path,后面加上PHP路径:

    1
    /usr/local/php7/bin:/usr/local/php7/sbin:
  10. 启动php-fpm

    1
    sudo php-fpm

    如果提示找不到nobody的gid:

    [20-Oct-2019 21:37:26] ERROR: [pool www] cannot get gid for group ‘nobody’
    [20-Oct-2019 21:37:26] ERROR: FPM initialization failed

    就要先创建nobody用户组:

    1
    sudo groupadd nobody

    再重新执行sudo php-fpm即可启动。

安装Nginx

  1. Nginx官网下载页面下载主线版本的Nginx源码,本次下载的是nginx-1.17.4。

    1
    wget http://nginx.org/download/nginx-1.17.4.tar.gz

    随后解压源代码、进入源代码目录:

    1
    2
    tar zxvf nginx-1.17.4.tar.gz
    cd nginx-1.17.4/
  2. 先安装依赖

    1
    sudo apt-get install build-essential libtool libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev
  3. 配置、编译和安装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
  4. 配置软连接(启动、关闭nginx时就不用输入nginx的完整路径)

    1
    sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
  5. 启动nginx

    1
    sudo nginx

    没有任何输出,说明启动成功。

  6. 测试是否可以访问
    在浏览器输入Ubuntu的IP地址,可以看到**Welcome to nginx!**说明启动成功。
    也可以使用命令行curl 127.0.0.1,正常情况能够看到HTML代码,说明nginx正常运行:

    1
    2
    3
    4
    5
    6
    7
    ubuntu@VM-35-226-ubuntu:~/nginx-1.17.4$ curl 127.0.0.1
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    ......
  7. 常用操作和路径
    nginx安装目录/usr/local/nginx
    网站根目录/usr/local/nginx/html/
    nginx日志目录/usr/local/nginx/logs/
    nginx配置文件/usr/local/nginx/conf/nginx.conf

    启动nginxsudo nginx
    关闭nginxsudo nginx -s stop
    重启nginxsudo nginx -s reload

    配置HTTPS、gzip压缩等常用功能参考:Nginx常用配置

配置nginx解析PHP

编辑nginx的配置文件:

1
sudo vim /usr/local/nginx/conf/nginx.conf

找到下面这段代码:

1
2
3
4
location / {
root html;
index index.html index.htm;
}

在后面添加一段:

1
2
3
4
5
6
7
8
9
location ~ \.php(.*)$  {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}

保存后,保存后重新启动nginx:

1
sudo nginx -s reload

安装Mariadb数据库

  1. 使用apt安装mariadb数据库:
    1
    sudo apt-get install mariadb-server mariadb-client
  2. 执行数据库初始化安装:
    1
    sudo mysql_secure_installation
    根据提示设置数据库root用户密码、是否允许外网访问等。提示信息如下:
    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
  1. 尝试使用 mysql -u root -p登录数据库,输入刚才设置的密码后提示错误如下:

    1
    2
    3
    $ mysql -u root -p
    Enter password:
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    原因是数据库默认使用Linux系统的用户来登录数据库,需要将登录方式修改为密码登录。

    解决方法:
    使用sudo mysql -u root 登录数据库,在数据库中依次执行以下语句,修改登录方式并刷新权限:

    mysql
    1
    2
    3
    4
    use mysql #切换到mysql数据库
    update user set plugin='mysql_native_password'; #修改plugin字段
    flush privileges; #刷新权限
    exit; #退出数据库

    再次输入mysql -u root -p即可通过密码登录数据库,无需root权限执行。

  2. 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