LNMP平台搭建与应用
1.LNMP架构概述
LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统、Nginx作为web服务器、PHP作为解析动态脚本语言、MySQL即为数据库
Linux作为服务器的操作系统
Nginx作为WebServer服务器
PHP作为动态解析服务,也不只是php还有python、perl
MySQL作为后端存储数据库服务
Nginx服务本身不能处理PHP请求,那么当用户发起PHP动态请求,PHP是这样处理的
用户—>http协议—>nginx—>fastcgi协议—>php-fpm
注意fastcgi是nginx连接php-fpm之间的协议
Nginx解析php的方法
1.将PHP页面的解析请求通过代理方式转发给Apache进行处理
将PHP页面的解析请求转发给php-fpm模块
1.1.LNMP架构图
图文解释: 客户端使用浏览器访问某页面,通过http协议请求到对应的web服务器,web服务器是Nginx,如果客户端请求的静态页面比如html,Nginx会自己处理然后将对应的页面内容发送给客户端 如果客户端请求的是动态页面例如PHP,因为网页大部分都是php写的,Nginx会把请求通过fastcgi协议转交给php进行处理,php会把解析的页面进行分析,如果页面信息包含数据库数据,php会与mysql建立tcp三次握手获取数据,数据获取后再转交给fastcgi协议,fastcgi协议再转交给Nginx服务,Nginx再通过http协议将页面呈现在浏览器上
1.2.Nginx与Fast_CGI详细工作流程
1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx 2.Nginx会根据用户的请求进行判断,这个判断会通过定义的location完成,例如图片、文件会去找ftp服务,php会去找php-fpm 3.判断用户请求的是否是静态页面,如果是静态页面Nginx会直接处理 4.判断用户请求的是否是动态页面,如果是动态页面,Nginx会将该请求交给fastcgi协议进行下发 5.fastcgi会将请求交给php-fpm管理进程,php-fpm管理进程接收到后调用具体的工作线程wrapper,类似于工单,每当工作来临时,php-fpm就会进行分配 6.wapper线程会调用php进行解析,如果只是解析代码,PHP解析完会自动返回 7.如果有查询数据库操作,则由php连接数据库(通过用户、密码、IP)进行连接然后发起查询操作 8.最终数据由mysql--->php--->php-fpm--->fastcgi--->nginx--->http--->user
2.安装LNMP架构
2.1.安装Nginx
使用官方提供的rpm包 [root@localhost ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx baseurl=http://nginx.org/packages/centos/7/$basearch enabled=1 gpgcheck=0 yum安装 [root@localhost ~]# yum -y install nginx 启动 [root@localhost ~]# systemctl start nginx [root@localhost ~]# systemctl enable nginx 扩展 1.仅下载rpm包不进行安装,如果想安装并下载那么就把--downloadonly去掉 [root@localhost ~]# yum -y install nginx --downloadonly --downloaddir=/soft 在使用rpm安装,可以留着等下次做实例的时候用 [root@localhost soft]# rpm -ivh nginx-1.16.1-1.el7.ngx.x86_64.rpm 2.我们在官网系在了nginx的rpm包可能会存在依赖关系 [root@localhost ~]# yum -y localinstall nginx-1.16.1-1.el7.ngx.x86_64.rpm
2.2.安装MySQL
- mysql有两个版本可以选择一个5.6一个是5.7我们都来做一遍
- mysql所有功能都是修改配置文件实现的
2.2.1.安装MySQL5.7
1.下载MySQL官方扩展源 [root@localhost ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm 也可以使用wget下载下来方便以后使用 [root@localhost ~]# wgt http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm 2.安装完mysqlrpm后会在/etc/yum.repos.d中生成两个文件 root@localhost ~]# ls /etc/yum.repos.d/my* /etc/yum.repos.d/mysql-community.repo /etc/yum.repos.d/mysql-community-source.repo 3.安装mysql5.7 把mysql5.7包下载下来,然后方便下次使用 首先配置yum,开启缓存,不然安装好后就会自动删除 [root@localhost conf.d]# vim /etc/yum.conf keepcache=1 [root@localhost ~]# yum install mysql-community-server --downloaddir=/root/soft/ --downloadonly 在使用localinstall安装(也可以用rpm直接装) [root@localhost soft]# yum -y localinstall mysql-community-server-5.7.29-1.el7.x86_64.rpm 4.启动 [root@localhost soft]# systemctl start mysqld [root@localhost soft]# systemctl enable mysqld 5.由于mysql5.7默认配置了密码,需要在日志中过滤temporary password获取默认密码 [root@localhost soft]# grep "temporary password" /var/log/mysqld.log 2020-04-10T04:01:09.027390Z 1 [Note] A temporary password is generated for root@localhost: *2cNf4-Gh:oe 6.登录 [root@localhost ~]# mysql -u root -p*2cNf4-Gh:oe [root@localhost ~]# mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log) 7.修改密码,密码必须是8位以上包含数字大小写字母 mysql> alter user 'root'@'localhost' identified by '1234.COm';
2.2.2.安装MySQL5.6
1.下载MySQL官方扩展源 [root@localhost ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm 2.安装完mysqlrpm后会在/etc/yum.repos.d中生成两个文件 root@localhost ~]# ls /etc/yum.repos.d/my* /etc/yum.repos.d/mysql-community.repo /etc/yum.repos.d/mysql-community-source.repo 3.安装mysql5.6 把mysql5.6包下载下来,然后方便下次使用(有条件的可以直接yum装) 首先配置yum,开启缓存,不然安装好后就会自动删除 [root@localhost conf.d]# vim /etc/yum.conf keepcache=1 [root@localhost ~]# yum install mysql-community-server --downloaddir=/root/soft/ --downloadonly [root@localhost ~]# ls soft/ mysql-community-client-5.6.47-2.el7.x86_64.rpm mysql-community-libs-5.6.47-2.el7.x86_64.rpm mysql-community-common-5.6.47-2.el7.x86_64.rpm mysql-community-server-5.6.47-2.el7.x86_64.rpm 在使用localinstall安装 [root@localhost soft]# yum -y localinstall *.rpm 或者 [root@localhost soft]# yum -y localinstall mysql-community-server-5.7.29-1.el7.x86_64.rpm 如果网速不好则用rpm安装,安装顺序如下 [root@localhost soft]# rpm -ivh mysql-community-common-5.6.47-2.el7.x86_64.rpm [root@localhost soft]# rpm -ivh mysql-community-libs-5.6.47-2.el7.x86_64.rpm [root@localhost soft]# rpm -ivh mysql-community-client-5.6.47-2.el7.x86_64.rpm [root@localhost soft]# rpm -ivh mysql-community-server-5.6.47-2.el7.x86_64.rpm 4.启动 [root@localhost soft]# systemctl start mysqld [root@localhost soft]# systemctl enable mysqld 5.登录 [root@localhost ~]# mysql 6.修改密码 [root@localhost ~]# mysqladmin -u root password 123 Warning: Using a password on the command line interface can be insecure. //这个提示表示密码太短 如果想改密码可以这样操作 [root@localhost ~]# mysqladmin -u root -p123 password 1234 上条没有没有加-p表示mysql没有密码因为是首次安装 下面这条加了-p表示指定之前的密码 7.其他服务器远程连接mysql 首先在mysql服务器执行: mysql> grant all privileges on *.* to 'root'@'%' identified by '123' with grant option; mysql> flush privileges; 远程主机 mysql -uroot -p123 -h 192.168.81.210
2.3.安装PHP
- 使用第三方扩展源安装php7.1
1.删除之前系统安装的php [root@localhost php]# yum remove php-mysql-5.4 php php-fpm php-common 2.安装扩展源 [root@localhost php]# wget http://mirror.webtatic.com/yum/el7/webtatic-release.rpm [root@localhost php]# yum -y localinstall webtatic-release.rpm 3.安装php7.1 如果https访问不到那么久在安装之前把/etc/yum.repos.d/webtatic.repo,把里面的https改成http,例如:mirrorlist=http://mirror.webtatic.com/yum/el7/SRPMS/mirrorlist 把rpm包下载到指定目录,方便下次使用,共计25个包 首先配置yum,开启缓存,不然安装好后就会自动删除 [root@localhost conf.d]# vim /etc/yum.conf keepcache=1 [root@localhost soft]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb --downloaddir=/root/soft/ --downloadonly [root@localhost soft]# yum -y localinstall *.rpm 4.启动 [root@localhost soft]# systemctl start php-fpm [root@localhost soft]# systemctl enable php-fpm Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service. 5.查看端口,到此完成 [root@localhost soft]# ss -lnptu | grep nginx tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=7375,fd=12),("nginx",pid=7374,fd=12)) [root@localhost soft]# ss -lnptu | grep mysql tcp LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=20862,fd=10)) [root@localhost soft]# ss -lnptu | grep php tcp LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=23602,fd=9),("php-fpm",pid=23601,fd=9),("php-fpm",pid=23600,fd=9),("php-fpm",pid=23599,fd=9),("php-fpm",pid=23598,fd=9),("php-fpm",pid=23595,fd=7)) 没有网络的情况下,把所有的PHP的rpm包拷到服务器,执行php_install.sh即可
3.验证LNMP是否可用
3.1.Nginx解析php页面
- 验证nginx是否能正常解析php动态请求,以及php程序是否正常连接数据库
- 小技巧:location /{}中配置内容可以直接写在server中
1.配置server [root@localhost conf.d]# vim php.conf server { listen 80; server_name phptest.com; root /web/phptest; index index.php index.html; location ~ \.php$ { root /web/phptest; fastcgi_pass 127.0.0.1:9000; //fastcgi调用php-fpm fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //$document_root表示/etc/nginx也就是nginx安装目录 include fastcgi_params; //引入fastcgi脚本,这个include表示上级目录也可以写绝对路径 } } 2.写入php页面 [root@localhost conf.d]# vim /web/phptest/index.php <?php phpinfo(); ?> 3.重载nginx [root@localhost conf.d]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@localhost conf.d]# systemctl reload nginx
3.2.PHP连接MySQL
直接在站点目录下面写一个php文件即可,不需要重载 [root@bogon phptest]# vim mysqltest.php <?php $servername = "localhost"; $username = "root"; $password = "123"; //创建链接 $conn = mysqli_connect($servername, $username, $password); //检测连接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "连接成功" ?>
3.3.扩展方式加主机头访问
- 不写全网站根目录即可
server { listen 80; server_name php.com; location / { root /web; index index.php; } location ~ \.php$ { root /web; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
4.部署WordPress博客站点
4.1.配置WordPress站点
[root@localhost conf.d]# vim wordpress.conf #wordpress server { listen 80; server_name jiangxl.wordpress.com; location / { root /web/wordpress; index index.php index.html; } location ~ \.php$ { root /web/wordpress; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILRNAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } } [root@localhost conf.d]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@localhost conf.d]# systemctl reload nginx
4.2.部署WordPress源码
wget https://cn.wordpress.org/wordpress-4.9.4-zh——CN.tar.gz 由于网站登录失败,因此我从第三方下载了wordpress-5.2.3-zh_CN.zip,上传到/web目录 解包 [root@bogon web]# mkdir /web [root@bogon web]# cd /web [root@bogon web]# unzip wordpress-5.2.3-zh_CN.zip
到此WordPress站点可以访问到安装界面
4.3.配置MySQL
- wordpress会用到后台数据库,因为博客肯定是需要上传文章附件等等,不配置数据库页面显示如下
- 需要手动创建数据库,开始配置mysql
[root@localhost conf.d]# mysql -uroot -p123 mysql> create database wordpress; Query OK, 1 row affected (0.00 sec) mysql> exit
4.4.配置网站属主
- 默认nginx的所属用户时nginx,nginx用户对/web/wordpress没有写入权限,因此会无法生成wp-config.php文件,因此我们需要修改网站属主
- nginx也要修改程序用户,让通过nginx访问页面的用户具有写权限
- 同样php-fpm也要修改程序用户,让通过访问php页面的用户具有写权限
- 小技巧,搞架构记得程序所属用户设置成一样的,开始配置
[root@localhost conf.d]# groupadd -g 888 www [root@localhost conf.d]# useradd -u 888 -g 888 www [root@localhost conf.d]# chown -R www.www /web/wordpress 修改nginx所属用户 [root@localhost conf.d]# sed -ri '/^user/c user www;' ../nginx.conf 重载让日志生效 [root@localhost conf.d]# systemctl reload nginx 修改php-fpm所属用户 www.conf是他的模板文件,主配置文件是php-fpm.conf、php.ini [root@localhost conf.d]# sed -ri '/^user/c user = www' /etc/php-fpm.d/www.conf [root@localhost conf.d]# sed -ri '/^group/c group = www' /etc/php-fpm.d/www.conf 重启让日志生效 [root@localhost conf.d]# systemctl restart php-fpm
4.5.页面安装
4.5.1.开始安装
4.5.2.填写数据库信息
4.5.3.确认安装
- 这一步就生成了wp-config.php文件
4.5.4.配置后台
4.5.5.安装完成
5.部署wecenter知乎系统
5.1.配置wecenter站点
[root@localhost conf.d]# vim wecenter.conf #wecenter server { listen 80; server_name jxl.wecenter.com; root /web/wecenter; index index.php index.html; location ~ \.php$ { root /web/wecenter; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } [root@localhost conf.d]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@localhost conf.d]# systemctl reload nginx
5.2.部署wecenter源码
[root@jxl web]# unzip -d wecenter WeCenter_3-3-4.zip [root@jxl web]# chown -R www:www /web/
5.3.配置数据库
创建wecenter数据库就行 [root@localhost web]# mysql -uroot -p123 mysql> create database wecenter; Query OK, 1 row affected (0.00 sec) mysql> exit Bye
5.4.页面安装
5.4.1.服务器环境检测
6.4.2.配置数据库
6.4.3.添加后台管理员
6.4.4.安装完成
6.4.5.网站首页
6.4.6.登录后台
点击登录按钮