在此前的文章中,详细记录了在 RHEL6/CentOS6上搭建 LAMP 的过程,随着时间的流逝,操作系统已经到了7.x版本,PHP 版本已经发展到了7.x, MySQL 版本也进化到了8.x,所以我们今天就来记录一下,在Linux7版本上搭建 LNMP环境 的全过程。
按照惯例,先列一下我们最终的操作系统和各软件版本
注:
基本所有的安装都是通过 yum 来完成,所以需要确保你的服务器能访问到公网。
另外确保你的 yum 安装了 epel 源。考虑到国内 GFW 的威力,也可以安装其他靠谱的源。
$ yum install epel-release
nginx 的安装非常简单
$ yum -y install nginx
安装成功后,可以通过下面的命令启动、查看及重启 nginx
$ systemctl start nginx # 启动 $ systemctl status nginx # 查看状态 $ systemctl enable nginx # 激活开机自启动 $ systemctl restart nginx # 重启
默认的 nginx 会在 /etc/nginx/default.conf
中设置默认的配置信息,不过考虑到之后可以搭建多套 web 服务,我们就把配置文件统一整理一下。
/etc/nginx/conf.d/
目录下其实就是放置我们自定义的 web 服务配置文件的,每次 nginx 启动后,会加载该目录下的配置。我们可以在 /etc/nginx/default.conf
文件中找到下面的代码:
# Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf;
我们新建一个默认的 default.conf
文件放置到 /etc/nginx/conf.d/
目录中,同时把原本位于 /etc/nginx/default.conf
中的 server
部分信息 剪切
过来(如果不是剪切,你的自定义的配置会被默认的配置所覆盖)。
文件中写入下面的内容:
server { listen 80; # 监听端口 server_name localhost; root /usr/share/nginx/html; # web 服务根目录 #access_log /var/log/nginx/host.access.log main; location / { index index.php index.html index.htm; # 记得写入 index.php } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ /.php$ { # 同样为了 PHP 而配置 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location @extensionless-php { rewrite ^(.*)$ $1.php last; } }
因为有些内容是为了 PHP能正确解析而加入的,关于 PHP 的内容,我们在后面章节会详细讨论。
如果我们需要在其他端口开启新的 web 服务,记得在 /etc/nginx/conf.d
目录下新建 conf 文件并仿照默认的配置文件设置好端口和根目录就好了。
配置完成后记得重启 nginx 服务。
更多关于 nginx 负载均衡、反向代理等内容就不在这里做过多的介绍,回头有需要可以单独开文章做进一步详细介绍。
关于开放相关端口,在另一篇文章 【LINUX】Linux7中的防火墙 - Firewall 中做了更详细的介绍,我们可以通过 firewall 打开默认的80端口。
PHP7 的安装同样需要两个额外的源,我们通过下面的命令安装:
$ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm $ yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
接下来,我们需要安装 yum-util
工具来更好地管理我们的 yum 源以及安装包
$ yum install yum-utils
安装好了 yum-utils
后,我们可以配置想要安装的 PHP 版本,选择你想要安装的 PHP 版本
$ yum-config-manager --enable remi-php70 [Install PHP 7.0] $ yum-config-manager --enable remi-php71 [Install PHP 7.1] $ yum-config-manager --enable remi-php72 [Install PHP 7.2]
通过下面的命令安装 PHP 相关的组件
$ yum install -y php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo php-fpm
同 nginx 的配置类似,PHP 也有自己默认的配置文件: /etc/php.ini
,不过这里我们可以不用修改,如下的修改只是我针对项目做出的个性化的设置。
我们分别修改一下几个地方:
session.cookie_httponly = 1 # 让我们 PHP 的 cookie 变成 http-only 的,更加安全 session.gc_probability = 1 session.gc_divisor = 100 # 这两个 gc 参数一并使用,表示每次访问有1/100的概率清除过期的 session session.gc_maxlifetime = 1440 # 默认的 session 过期时间(24)分钟,但是session 是否被清除,看上面的概率
关于这几项配置,我们可以从它们各自的注释中得到更全面的解释。
配置修改之后,需要重启 nginx 服务使配置得以生效。
还记得我们在之前配置 Nginx 时提前写入的关于 PHP 脚本的 FastCGI 部分么,我们在这里详细介绍一下:
Fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了Fastcgi功能的进程管理器, php-fpm
就是其中的一种。
再提一点, php-fpm
作为一种Fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们在 Nginx 的配置文件中能看到诸如下面的配置部分:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # 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; }
同样先安装特定的 yum 源
$ yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
特别提醒: 还是因为 GFW 的原因,下载安装过程可能耗时会很久,如果网速一般,可以用 nohup 方式运行在后台。
$ yum install mysql-community-server
安装完成后,开启 mysql 并设置开机自动启动
$ systemctl start mysqld $ systemctl enable mysqld
我们可以从 mysql 的安装 log 中拿到 root 用户的初始密码:
$ grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log |tail -1
我们会得到如下的输出:
2015-11-20T21:11:44.229891Z 1 [Note] A temporary password is generated for root@localhost: -et)QoL4MLid
也就是我们的 root 初始默认密码是 -et)QoL4MLid
当我们用 root 用户首次登录时,系统会提示我们修改默认密码。
配置文件在 /etc/my.cnf
中,可以按照个人需求,分别修改不同的配置项:
[mysqld] # mysqld 部分 bind-address=127.0.0.1 # 只能从本机访问 mysql character_set_server=utf8mb4 # 修改默认字符集 init_connect='SET NAMES utf8mb4' event_scheduler=on # 默认开启 event innodb_buffer_pool_size = 128M # 修改 innodb 的 buffer 大小 default-authentication-plugin=mysql_native_password # 提高老版本的 mysql 连接稳定性 max_connections=1000 # 最大并发连接数 local-infile=1 # 允许导入 local file 中的数据 [client] default_character_set=utf8mb4 # 默认字符集 local-infile=1 # 允许导入 local file 中的数据
配置文件修改后,记得 systemctl restart mysqld
来重启 mysql 服务。
到这里,我们整的 LNMP 环境就搭建完成了。