搭建本地开发环境:LEMP


lemp-centos-nginx-mysql-mariadb-php

我们需要在本机电脑搭建一个供学习、测试用的开发环境,此处我们选择 LEMP 开发环境,即 Linux(系统),Nginx(服务器),MariaDB/MySQL(数据库),PHP(开发语言)。

如果想完整的学习,请放弃 WAMP、MAMP、XAMPP 或者其他的一些一键速成的开发环境。

安装 Nginx

Nginx 是一种 web 服务器,接受 web 请求,并且把请求的内容发给用户。

安装 Nginx,执行:

sudo yum install nginx

启动 Nginx,执行:

sudo systemctl start nginx

设置 Nginx 开机启动,执行:

sudo systemctl enable nginx

在浏览器中访问 http://192.168.33.10 (或者其他你设置的服务器地址),如果看到 NGINX 的欢迎界面,则安装成功。

MariaDB / MySQL

MariaDB 是 MySQL 的一个分支,是加强版的 MySQL,它可以完全取代 MySQL。

CentOS 7.0 已经用 MariaDB 替换掉了 MySQL,所以默认只能使用包管理工具安装 MariaDB。

安装 MariaDB

使用包管理工具 yum 安装 MariaDB 执行以下命令(此处以安装 MariaDB 10.1 版本为例):

sudo yum install mariadb101u mariadb101u-server

安装过程中如果返回一个错误:Error: mariadb101u-errmsg conflicts with 1:mariadb-libs-5.5.52-1.el7.x86_64,说明系统安装 mariadb-libs-5.5.52-1.el7.x86_64 与现在安装的版本冲突,使用 sudo yum remove mariadb-libs-5.5.52-1.el7.x86_64 命令删除即可解决。

安装完成后,查看 MariaDB 的状态,执行:

service mariadb status

在返回信息中会发现:

Active: inactive (dead)

表示服务是停止的状态。

启动 MariaDB

service 命令启动 MariaDB 服务,执行:

sudo service mariadb start

想开机自动启动,用 systemctlenable 命令:

sudo systemctl enable mariadb.service

数据库安全设置

安装完 MariaDB 以后,可以执行一下安全设置,这样可以为 root(MariaDB 的超级管理员)用户添加密码,删除匿名用户还有 test 数据库等等。执行:

mysql_secure_installation

会返回以下信息:

  • Enter current password for root (enter for none):输入当前 root 用户的密码
  • Set root password? [Y/n]:想要设置 root 用户的密码吗?
  • New password:输入 root 用户的新密码
  • Re-enter new password:重新输入为 root 用户设置的密码
  • Remove anonymous users? [Y/n] :要删掉匿名用户吗?
  • Disallow root login remotely? [Y/n] :要禁用 root 用户远程登录吗?
  • Remove test database and access to it? [Y/n]:想要删掉 test 这个数据库吗?
  • Reload privilege tables now? [Y/n]:现在就要重新载入权限吗?

测试验证

登录数据库控制台,执行:

mysql -u root -p

输入密码后执行:

show databases;

会显示数据库系统的所有数据库:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

PHP-FPM

Web 应用如果是用 PHP 语言写的,比如 Drupal,WordPress,Laravel 等等,需要在服务器上安装 PHP 的解释工具。还需要让 Web 服务器可以跟 PHP 解释工具能够交流,这样 Web 服务器才能为用户输出请求的内容。因为我们选择使用 Nginx 服务器,它跟 PHP 的交流方式可以使用 PHP-FPM,因此首先来安装 PHP-FPM。

安装 PHP-FPM

安装前首先要确保系统仓库中有没有 PHP-FPM 的包,可以使用 yum search 命令搜索关键词确认,如果没有需要先安装第三方仓库,比如PHP 7.0 需要安装 IUS 仓库。

以安装 PHP 7.1 为例:

sudo yum install php71u-fpm

接下来安装一些 PHP 常用的扩展:

sudo yum install php71u-cli php71u-xml php71u-xmlrpc php71u-gd php71u-mysqlnd php71u-pdo php71u-mcrypt php71u-mbstring php71u-json

安装完成后,使用 service 命令启动 PHP-FPM:

sudo service php-fpm start

完成后,执行:

service php-fpm status

返回信息 Active: active (running) 说明已经成功启动。

配置 php-fpm 开机启动:

sudo systemctl enable php-fpm.service

配置 PHP-FPM

如果网站要写入某个目录,要确保运行 PHP-FPM 的用户对目录拥有写入权限。一般目录的拥有者对目录都有可以写入的权限,可以把运行 PHP-FPM 的用户修改成跟运行 NGINX 一样的用户,这样更方便后期记忆与操作。

先确认运行 PHP-FPM 与 NGINX 的用户:

ps aux | grep nginx

显示运行 nginx:worker process 的用户是 nginx

ps aux | grep php

显示运行 php-fpm:pool www 的用户是 php-fpm

修改运行 PHP-FPM 的用户需要设置 PHP-FPM 的配置文件:

/etc/php-fpm.d/www.conf

将配置信息中的:

user = php-fpm
group = php-fpm

修改为:

user = nginx
group = nginx

重启服务让配置生效,这样 PHP-FPM 就可以写入内容到这个目录了。

session 目录权限

存储 session 文件的地方,是 session.save_path 配置的,现在它的值是:

/var/lib/php/fpm/session

这个目录是安装 PHP 的时候创建的,目录的拥有是 php-fpm,前面我们已经把运行 PHP-FPM 的用户修改成了 nginx,所以需要把 session 目录的拥有都也修改成 nginx,这样 PHP-FPM 才能写入 session 文件到这个目录下面。

执行:

chown -R nginx:nginx /var/lib/php/fpm

Nginx 基础配置

在 CentOS 7 中,Nginx 的配置文件路径为:

/etc/nginx/nginx.conf

/etc/nginx 目录下,会包含一些其它的文件,.default 结尾的文件是原文件的备份文件,nginx.conf 就是 NGINX 的配置文件。

nginx.conf 文件中包含常用的配置说明,注释内容以 # 开头,配置内容一般是 指令 + 空格 + 参数 + 分号 的格式。

一些基础的配置代码意义如下:

  • user nginx; :配置系统运行 nginx 时用的用户名,默认是 nginx。
  • worker_processes auto; :配置 nginx 同时运行的进程数。
  • error_log /var/log/nginx/error.log; :配置 nginx 错误日志存放位置。
  • pid /run/nginx.pid; :配置 nginx 的 master 进程 ID(PID) 写入的位置。
  • worker_connections 1024;:设置每个 woker 进程同时能为多少个连接提供服务。
  • http {...}:我们对服务器的配置一般都在这个区块内,包含服务器,监听端口号,主机等。我们自己的配置内容可以在 /etc/nginx/conf.d 这个目录下,创建 .conf 后缀的文件进行。

配置 Nginx

一般的配置文件格式为:

server {
        listen          80;
        server_name     192.168.33.10;
        root            /vagrant/www/public;
        index           index.html index.php;

        location / {
                 try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
        }       
}

上面配置信息中,服务器地址、文件目录可以根据实际情况自己设置。

配置完成后重新启动 NGINX 让配置生效:

sudo systemctl reload nginx

验证配置

在上面设置的网站目录下创建一个 index.php 文件,内容:

<?php phpinfo(); ?>

完成后浏览器中输入设置的服务器地址,如果一切正常会显示一个 PHP 的信息页面。

如果发现配置了 NGINX,指定了网站的目录,并且相关权限问题也没有错误,浏览器然后提示没有权限访问(403 Forbidden / File not found. / Access denied ),很可能是 SELinux 的原因。

可以使用命令 sestatus 查看系统 SELinux 的运行状态,如果返回:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

current mode:enforcing 表示 SELinux 正在运行,我们需要将它关掉。

如果临时关闭,可以执行命令:

setenforce 0

如果永久关闭,需要修改一个配置文件:

sudo vi /etc/sysconfig/selinux

找到 SELINUX=enforcing,设置成 SELINUX=disabled

设置完成后,重启虚拟机,问题应该就解决了。(这个问题折腾了我一下午!)

至此,一般的 LEMP 的配置就完成了!

#EOF