Linux学习笔记--27(使用LNMP架构部署动态网站环境)

LNMP动态网站部署架构是一套由Linux+Nginx+MySQL+PHP组成的动态网站系统解决方案,具有免费、高效、扩展性强且资源消耗低等优良特性。

源码包程序

使用源码包安装服务程序具有两个优势

  • 源码包可移植性非常好,几乎可在任何linux系统中安装使用,而RPM软件包是针对特定系统和架构编写的指令集,必须严格执行环境才能顺利安装。
  • 使用源码包安装服务程序时会有一个编译过程,可以更好地适应安装主机的系统环境,运行效率和优化程度强于RPM软件包安装的服务程序。

使用源码包安装服务程序归纳总结后只需4~5个步骤即可完成
第一步:下载及解压源码包文件。再切换到解压后的目录中。

# tar xzvf FileName.tar.gz
# cd FileDirectory

第二步:编译源码包代码。在正式用源码包安装之前需要进行一系列的检查评估工作。可以根据需要追加–prefix参数,以指定稍后源码包程序的安装路径,对安装过程更加可控。如果系统环境符合安装要求,一般会自动在当前目录下生成一个Makefile安装文件。

# ./configure --prefix=/usr/local/program

第三步:生成二进制安装程序。Makefile文件中会保存系统环境、软件依赖关系及安装规则等内容,可用make命令编译生成出真正可用的二进制可执行文件。

# make

第四步:运行二进制的服务程序安装包。如在源码包编译时用了–prefix参数,服务程序就会被安装到那个目录,如没有用参数定义目录,则一般默认安装到/usr/local/bin目录中。

# make install

第五步:清理源码包临时文件。编译过程中会留下很多临时垃圾文件,可以用make clean命令对临时文件进行彻底的清理。

# make  clean

总结:1、解压;2、编译;3、生成二进制;4、安装;5、清理

LNMP动态网站架构

在使用源码包安装服务程序前,首先要让安装主机具备编译程序源码的环境,他需要具备C语言、C++语言、Perl语言的编译器,及各种常见的编译支持函数库程序。因此要先配置Yum软件仓库。下面的软件包都统统安装上:

# dnf -y install apr* autoconf automake numactl bison bzip2-devel cpp curl-devel fontconfig-devel freetype-devel gcc gcc-c++ gd-devel gettext-devel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel  libpng-devel  libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff* make openssl-devel patch pcre-devel perl php-common php-gd telnet zlib-devel libtirpc-devel gtk* ntpstat na* bison* lrzsz cmake ncurses-devel libzip-devel libxslt-devel gdbm-devel readline-devel gmp-devel

先把虚拟机网络设置成桥接模式:ip是自动获取
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第1张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第2张图片
装LNMP动态网站部署架构所需的4个软件源码包和1个用于检查效果的博客系统软件包,我们统一放到/lnmp目录下保存:

[root@linuxprobe ~]# mkdir /lnmp
[root@linuxprobe ~]# cd /lnmp
[root@linuxprobe lnmp]# wget https://www.linuxprobe.com/Software/rpcsvc-proto-1.4.tar.gz
[root@linuxprobe lnmp]# wget https://www.linuxprobe.com/Software/nginx-1.16.0.tar.gz
[root@linuxprobe lnmp]# wget https://www.linuxprobe.com/Software/mysql-8.0.18.tar.xz
[root@linuxprobe lnmp]# wget https://www.linuxprobe.com/Software/php-7.3.5.tar.gz
[root@linuxprobe lnmp]# wget https://www.linuxprobe.com/Software/wordpress.tar.gz
[root@linuxprobe lnmp]# ls

在这里插入图片描述

rpcsvc-proto是一款包含rcpsvc协议文件的支持软件包名称,rcpsvc协议在后续Nginx与MySQL服务程序的部署过程中都需要被调用到。要想通过源码包安装服务程序,就一定要严格遵守上面总结的安装步骤:下载及解压源码包文件、编译源码包代码、生成二进制安装程序、运行二进制的服务程序安装包

[root@linuxprobe lnmp]# tar xzvf rpcsvc-proto-1.4.tar.gz 
[root@linuxprobe lnmp]# cd rpcsvc-proto-1.4/
[root@linuxprobe rpcsvc-proto-1.4]# ./configure
[root@linuxprobe rpcsvc-proto-1.4]# make 
[root@linuxprobe rpcsvc-proto-1.4]# make install
[root@linuxprobe rpcsvc-proto-1.4]# cd ..
[root@linuxprobe lnmp]#

在这里插入图片描述

配置Nginx服务

Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了CPU与内存的占用率,所以使用Nginx程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少。
第1步:创建用于管理网站服务的系统账户。
使用-M参数不创建对应的家目录,以及使用-s参数指定登录后的Shell解释器为/sbin/nologin。

[root@linuxprobe lnmp]# useradd nginx -M -s /sbin/nologin
[root@linuxprobe lnmp]# id nginx
uid=1001(nginx) gid=1001(nginx) groups=1001(nginx)

在这里插入图片描述
第2步:编译安装Nginx网站服务程序。
需要在编译过程中添加额外的参数,其中较为重要的是使用prefix参数指定服务将被安装到哪个目录,方便后面找到和调用它。其次,考虑到HTTPS协议的使用越来越广泛,所以这里用with-http_ssl_module参数来开启Nginx服务的SSL加密模块,以便日后开启HTTPS协议功能。

[root@linuxprobe lnmp]# tar zxvf nginx-1.16.0.tar.gz
[root@linuxprobe lnmp]# cd nginx-1.16.0/
[root@linuxprobe nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module 
[root@linuxprobe nginx-1.16.0]# make 
[root@linuxprobe nginx-1.16.0]# make install
[root@linuxprobe nginx-1.16.0]# cd ..

Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第3张图片

第3步:安装完毕后进入最终配置阶段。
总共需要改3处:
首先是把第2行的注释符(#)删除,然后在后面写上负责运行网站服务程序的账户名称和用户组名称。这里假设由nginx用户及nginx用户组负责管理网站服务。
其次是修改第45行的首页文件名称,在里面添加index.php的名字。
最后再删除第65~71行前面的注释符(#)来启用虚拟主机功能,然后将第69行后面对应的网站根目录修改为/usr/local/nginx/html,其中的fastcgi_script_name参数用于指代脚本名称,也就是用户请求的URL。只有信息填写正确了,才能使Nginx服务正确解析用户请求,否则访问的页面会提示“404 Not Found”的错误。

[root@linuxprobe lnmp]# vim /usr/local/nginx/conf/nginx.conf 
  1 
  2 user  nginx nginx;
  ......
 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;
 46         }
 ......
 63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64         #
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
 70             include        fastcgi_params;
 71         }

Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第4张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第5张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第6张图片
第4步:通过编译源码方式安装的服务默认不能被systemctl命令所管理,而要使用Nginx服务本身的管理工具进行操作,相应命令所在的目录是/usr/local/nginx/sbin。
建议将/usr/local/nginx/sbin路径加入到PATH变量中,让Bash解释器在后续执行命令时自动搜索到它。
然后在source命令后加载配置文件,让参数立即生效。
下次就只需要输入nginx命令即可启动网站服务了。

root@linuxprobe lnmp]# vim ~/.bash_profile
[root@linuxprobe lnmp]# source ~/.bash_profile
[root@linuxprobe lnmp]# nginx 

Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第7张图片
在浏览器中输入本地ip,查看下即可访问到Nginx网站服务程序的默认界面。Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第8张图片

配置MySQL服务

建立一个名为mysql用户,且bash终端设置为nologin解释器。

[root@linuxprobe lnmp]# useradd mysql -M -s /sbin/nologin
[root@linuxprobe lnmp]# id mysql
uid=1002(mysql) gid=1002(mysql) groups=1002(mysql)
[root@linuxprobe lnmp]# 

第1步:解压MySQL安装软件包。

[root@linuxprobe lnmp]# tar xvf mysql-8.0.18.tar.xz
[root@linuxprobe lnmp]# mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
[root@linuxprobe lnmp]# mv mysql /usr/local

第2步:在生产环境中管理MySQL数据库时,有两个比较常用的目录。
一个是/usr/local/mysql目录,这是用于保存MySQL数据库程序文件的路径。
一个是/usr/local/mysql/data目录,它用于存储数据库的具体内容,每个数据库的内容会被单独存放到一个目录内。对于存放实际数据库文件的data目录,用户需要先手动创建出来。

[root@linuxprobe lnmp]# cd /usr/local/mysql
[root@linuxprobe mysql]# mkdir data

第3步:初始化MySQL服务程序,对目录进行授权,保证数据能够被mysql系统用户读取。
在初始化的最后阶段,系统会给用户分配一个初始化的临时密码为“HLu*h/QBZ8+j”。

[root@linuxprobe mysql]# chown -R mysql:mysql /usr/local/mysql
[root@linuxprobe mysql]# cd bin
[root@linuxprobe bin]# ./mysqld --initialize --user=mysql

在这里插入图片描述

第4步:与Nginx服务相似,MySQL数据库的二进制可执行命令也单独存放在自身的程序目录/usr/local/mysql/bin中。

[root@linuxprobe mysql]# vim ~/.bash_profile 
[root@linuxprobe mysql]# source ~/.bash_profile 
[root@linuxprobe mysql]# 

Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第9张图片
将启动脚本mysql.server放入到/etc/init.d目录中,让服务器每次重启后都能自动启动数据库,并给予可执行权限。
libtinfo.so.5文件是MySQL数据库在8.0版本后新添加的重要的函数库文件,但默认不存在,需要将libtinfo.so.6.1文件复制过来或者作为链接文件才能正常启动:

[root@linuxprobe mysql]# cp -a support-files/mysql.server /etc/init.d/
[root@linuxprobe mysql]# chmod a+x /etc/init.d/mysql.server
[root@linuxprobe mysql]# ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

第5步:执行MySQL数据库服务启动文件,并进行初始化工作。
MySQL自8.0版本起不再允许用户使用临时密码来管理数据库内容,也不能进行远程控制,用户必须修改初始化密码后才能使用MySQL数据库。数据库作为系统重要的组成服务,密码位数不建议少于20位。例如,下面将密码修改 redhat。
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第10张图片
这样还是不行,还需要继续切换到mysql数据库中,修改user表单的密码值。这也是从MySQL数据库8.0版本之后才有的新安全要求。同时建立一个测试库linuxdwon。
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第11张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第12张图片

配置PHP服务

PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言。
第1步:解压php安装包软件并编译安装。
需使用prefix参数指定安装路径,使用–with-mysqli等参数开启对数据库的支持模块,为后面的在线安装网站做好准备。

[root@linuxprobe mysql]# cd /lnmp
[root@linuxprobe lnmp]# tar xvf php-7.3.5.tar.gz
[root@linuxprobe lnmp]# cd php-7.3.5/
[root@linuxprobe php-7.3.5]# ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring --with-gd

[root@linuxprobe php-7.3.5]# make
[root@linuxprobe php-7.3.5]# make install

第2步:将生成的php服务配置文件复制到安装目录中(/usr/local/php/),让其生效。
现在主配置文件有了,接下来还需要php-fpm的配置文件,好在/usr/local/php/etc/目录中也已经提供,只需要复制模板即可。

[root@linuxprobe php-7.3.5]# cp php.ini-development /usr/local/php/lib/php.ini
[root@linuxprobe php-7.3.5]# cd /usr/local/php/etc/
[root@linuxprobe etc]# cp php-fpm.conf.default php-fpm.conf
[root@linuxprobe etc]# 
[root@linuxprobe etc]# cp php-fpm.d/www.conf.default php-fpm.d/www.conf
[root@linuxprobe etc]# 

第3步:把php服务加入到启动项中,使其重启后依然生效。

[root@linuxprobe etc]# cd /lnmp/php-7.3.5/
[root@linuxprobe php-7.3.5]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@linuxprobe php-7.3.5]# chmod 755 /etc/init.d/php-fpm 
[root@linuxprobe php-7.3.5]# 

第4步:由于php服务程序的配置参数会对Web服务的运行环境造成影响,如果默认开启了一些不必要且高危的功能(如允许用户在网页中执行Linux命令),则会降低网站被入侵的难度,甚至会让入侵人员拿到整台Web服务器的管理权限。因此需要编辑php.ini配置文件,在第310行的disable_functions参数后面追加上要禁止的功能。建议大家在此基础上根据自身工作需求酌情删减:

[root@linuxprobe php-7.3.5]# vim /usr/local/php/lib/php.ini
 307 ; This directive allows you to disable certain functions for security reasons.
 308 ; It receives a comma-delimited list of function names.
 309 ; http://php.net/disable-functions
 310 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第13张图片
第5步:LNMP架构源码编译工作就此结束。

[root@linuxprobe php-7.3.5]# /etc/init.d/php-fpm start
Starting php-fpm done

搭建Wordpress博客

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设自己的网站。WordPress具有丰富的插件和模板系统,是当前最受欢迎的网站内容管理系统。

把Nginx服务程序根目录的内容清空后,将WordPress解压后的网站文件复制进去,并对其设置权限。

[root@linuxprobe php-7.3.5]# cd ..
[root@linuxprobe lnmp]# rm -f /usr/local/nginx/html/*
[root@linuxprobe lnmp]# tar xzvf wordpress.tar.gz 
[root@linuxprobe lnmp]# mv wordpress/* /usr/local/nginx/html/

[root@linuxprobe lnmp]# chown -Rf nginx:nginx /usr/local/nginx/html 
[root@linuxprobe lnmp]# chmod -Rf 777 /usr/local/nginx/html

随后输入本机IP地址访问WordPress网站的首页面,该页面提醒了用户稍后需要的安装信息。
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第14张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第15张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第16张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第17张图片
Linux学习笔记--27(使用LNMP架构部署动态网站环境)_第18张图片
OK啦!!!

你可能感兴趣的:(OS,linux,学习,架构)