前言:

本文是一篇关于Linux系统初学者的实验记录。

参考书籍:《Linux就该这么学》

实验环境:

VmwareWorkStation 17——虚拟机软件

RedHatEnterpriseLinux[RHEL]8——红帽操作系统

备注:

LNMP动态网站部署架构是一套由:Linux + Nginx + MySOL + PHP 组成的动态网站系统解决方案,具有免费】高效、扩展性强且资源消耗低等优良特性,目前正在被广泛使用,

本文对比了使用源码包安装服务程序与使用RPM软件包安装服务程序的区别,手工编译源码包并安装各个服务册灰姑娘徐,以及使用最受欢迎的WordPress博客系统验证架构环境。

正文:

源码包程序;

在RPM(红帽软件包管理器)技术出现之前,Linux系统运维人员只能通过源码包的方式来安装各种服务程序,这是一件非常繁琐且耗费时间与耐心的事情。而且在安装、升级、卸载程序时还要考虑到与其他程序或函数库的相互依赖关系。

现在很多软件程序只有源码包的形式,如果只会使用dnf/yum命令来安装程序,就要等到第三方组织将这些软件程序编写成RPM源码包的软件程序时,再进行安装。

使用源码包安装的优势:

源码包的可移植性非常好,几乎可以再任何Linux系统中安装使用,而RPM软件包是针对特定系统和架构编写的指令集,必须严格地符合执行环境才能顺利安装。

使用源码包安装服务程序时会有一个编译过程,因此能够更好地适应安装主机的系统环境,运行效率和优化程序都会强于RPM软件包安装的服务程序。(量体裁衣)

一般来讲,在安装软件时,如果能通过软件仓库来安装,就用dnf命令搞定它;反之则去寻找合适的RPM软件包来安装;如果实在没有资源可用,就只能使用源码包来安装了。

(RPM软件包就是把软件的源码包和一个针对特定系统、架构、环境编写的安装规则打包到一起的指令集)

Step1:下载及解压源码包文件。

为了方便在网络中传输,源码包文件通常会在归档后使用gzip或bzip2等格式进行压缩,因此一般会具有.tar.gz或.tar.bz2的后缀。要想使用源码包安装服务程序,必须先把里面的内容解压出来,然后再切换到源码包文件的目录中:

tar -xzvf FileName.tar.gzcd FileDirectory
tar -jxvf FileName.tar.bz2cd FileDirectory

tar命令的常用参数

-z是否同时具有gz属性
-j是否同时具有bz2属性
-J 是否同时具有xz属性
-x解压缩、提取打包的内容
-t查看压缩包内容
-v显示压缩或者打包的内容
-c建立一个压缩,打包文档
-C切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录
-f 使用文件名,在f后面要接压缩后的文件的名字
只要用到tar命令,-f选项是必须要用的,-f 在最右边
-p保留备份数据的原本权限与属性,常用于备份重要的配置文件
-P保留绝对路径

Step2:编译源码包代码

在正式使用源码包安装服务程序之前,还需要使用编译脚本针对当前系统进行一系列的评估工作,包括对源码包文件、软件之间及函数库之间的依赖关系、编译器、汇编器及链接器进行检查。

追加–prefix参数,指定稍后源码包的安装路径,从而对服务程序的安装过程更加可控。

当编译工作结束后,如果系统环境符合安装要求,一般会自动在当前目录下生成一个Makefile安装文件

。/configure --prefix=/usr/local/program

Step3:生成二进制安装程序。

make

刚刚生成的Makefile文件中会保存与系统环境、软件依赖关系和安装规则等相关的内容,接下来便可以使用make命令来根据Makefile文件内容提供的合适规则编译生成真正可供用户安装服务程序的二进制可执行文件了

Step4:运行二进制的服务程序安装包

由于不需要再检查系统环境,也不需要再编译代码,因此运行二进制的服务程序安装包时速度最快的步骤。如果在源码包编译阶段使用了–prefix参数,那么此时服务程序就会被安装到那个目录。

否则,默认路径:/usr/local/bin

Step5:清理源码包临时文件

由于在安装服务程序过程中进行了代码编译的工作,因此在安装后目录中会遗留下很多临时垃圾文件。可以使用make clean命令对临时文件进行彻底清理

make clean

LNMP动态网站部署架构

LNMP:L——Linux、Nginx、MySQL、PHP

WAMP:W——Windows、Apache、MySQL、PHP

使用源码包安装服务程序之前,首先要让安装主机具备编译程序源码的环境。

这需要具备C语言、C++语言、Perl语言的编译器,以及各种常见的编译支持函数库程序。

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

接下来需从外部网络中获取Nginx、MySQL、PHP及WordPress等一系列安装包,因此需要配置虚拟机,将其连接到互联网。

安装LNMP动态网站部署架构所需的4个软件源码包和1个用于检查效果的博客系统软件包可以在参考书籍的配套站点服务器上找到。

mkdir /lnmpcd /lnmp wget https://www.linuxprobe.com/Software/rpcsvc-proto-1.4.tar.gzwget https://www.linuxprobe.com/Software/nginx-1.16.0.tar.gzwget https://www.linuxprobe.com/Software/mysql-8.0.18.tar.gzwget https://www.linuxprobe.com/Software/php-7.3.5.tar.gzwget https://www.linuxprobe.com/Software/wordpress.tar.gzls

rpcsvc-proto 是一款包含rcpsvc协议文件的支持软件包名称。

rcpsvc协议在后续Nginx与MySQL 服务程序的部署过程中都需要被调用到 。

需要严格遵守安装步骤:

下载及解压源码包文件

编译源码包文件

生成二进制安装程序

运行二进制的服务程序安装包

tar -xzvf rpcsvc-proto-1.4.tar.gzcd rpcsvc-proto-1.4/./configuremake make installcd ..

配置Nginx服务

Nginx是一款优秀的用于部署动态网站的轻量级服务程序,最初是为俄罗斯的一家门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。

目前国内诸如新浪、网易、腾讯等门户站点均已使用了此服务。

Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了CPU与内存的占用率,所以使用Nginx程序部署的动态网站不仅稳定、高校,而且消耗的系统资源也很少。

此外,Nginx具备的模块数量与Apache具备的模块数量几乎相同。

Nginx还支持热部署技术,能在不暂停服务的情况下对Nginx服务程序进行升级

Step1:创建用于管理网站服务的系统账户

useradd nginx -M -s /sbin/nologinid nginx

-M参数:不创建对应的家目录

-s参数:指定登陆后的Shell解释器为/sbin/nologin

Step2:编译安装Nginx网站服务程序

为了能够让网站服务支持更多的功能,需要在编译过程中添加额外的参数

prefix参数:指定服务将被安装到哪个目录

with_http_ssl_module参数:开启Nginx服务的SSL加密模块

tar -zxvf nginx-1.16.0.tar.gzcd nginx-1.16.0/./configure --prefix=/usr/local/nginx --with-http_ssl_modulemake make install cd ..

Step3:配置服务

这里进行三处修改:

line 2:删除注释符#,在后面写上负责运行网站服务程序的账户名称用户组名称

line 45:添加index.php的名字,这个文件是用户浏览网站时的首页文件

line 65-71:删除注释符#,启用虚拟主机功能

line 68:对应网站根目录修改为/usr/local/nginx/html再加上参数fastcgi_script_name参数用于指代脚本名称,也就是用户请求的URL。

Step4:通过编译源码方式安装的服务程序不能被systemctk命令管理,而要使用Nginx服务本身的管理工具进行惭怍

相应命令所在的目录:/usr/local/nginx/sbin

由于使用绝对路径的形式输入命令不方便,可以讲/usr/local/nginx/sbin路径加入到PATH变量

然后在source命令后加载配置文件,让参数立即生效。下次只需输入nginx命令就可以直接启动。

 vim ~/.bash_profile

source ~/.bash_profilenginx

这里推测配置文件还未刷新生效,重启一下:

配置MySQL服务:

MySQL数据库当前仍然是生产环境中最常使用的关系型数据库管理系统之一,坐拥极大的市场份额。在使用软件仓库安装服务程序时,系统会自动根据RPM软件包中的指令集完成软件配置等工作。但是选择通过源码包的方式来安装,这一切就需要自己来完成了。

对于MySQL数据库来说,需要在系统中创建一个名为mysql的用户,专门用于负责运行MySQL数据库。这类账户的Bash终端设置成nologin解释器,提高系统安全性。

useradd mysql -M -s /sbin/nologin

Step1:解压SQL安装包。

将解压出的程序目录改名并移动到/usr/local 目录下,对其进行初始化操作后便可使用。

tar -zxvf mysql-9.0.18.tar.gz 

这时出现了一个意外的报错


排错:

使用的是正确的解压方式,却报错:”not in gzip format“

检查一下该文件的属性:

发现这只是一个指向该文件的html页面——没有下载到正确的文件。


下载到正确的文件后,接着原来的步骤,改名,移动。

mv mysql-8.0.18-el8-x86_64/ mysqlmv mysql /usr/local

Step2:创建数据库文件的data目录

在生产环境中管理MySQL数据库时,有两个比较常用的目录:

/usr/local/mysql目录用于保存MySQL数据库程序文件的路径

/usr/local/mysql/data目录用于存储数据库的具体内容

data目录需手动创建:

cd /usr/local/mysqlmkdir data

Step3:初始化MySQL程序,对目录进行授权

使用mysqld命令确认管理MySQL数据库服务的用户名称、数据保存目录及编码信息。

在信息确认无误后开始进行初始化。在初始化的最后阶段,系统会给用户分配一个初始化的临时密码,需保存好。

chown -R mysql:mysql /usr/local/mysqlcd bin./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

Step4:……

Step5:……

完成MySQL 安装后,提前把数据库新建出来,供后续使用。

配置PHP服务

PHP(超文本预处理器)是一种通用的开源脚本语言,发明于1995年,它吸取了C语言、Java语言及Perl语言的很多优点,具有开源、免费、快捷、跨平台性强、效率高等优良特性,是目前Web开发领域最常用的语言之一。

使用源码包方式编译安装PHP语言环境难点在于解决PH的程序包和其他软件的依赖关系。

Step1:解压php安装包软件并编译安装

–prefix指定安装路径,–with-mysql开启数据库的支持模块

cd /lnmptar xvf php-7.3.5.tar.gzcd 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
makemake install

生产二进制文件并进行安装,时间大约为10~20分钟,耐心等待即可:

Step2:将生成的php服务配置文件复制到安装目录中(/usr/local/php/)

有了主配置文件,还需要php-fpm的配置文件,/usr/local/php/etc/目录中提供了模板

cp php.ini-development /usr/local/php/lib/php.inicd /usr/local/php/etc/mv php-fpm.conf.default php-fpm.confmv php-fpm.d/www.conf.default php-fpm.d/www.conf

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

cd /lnmp/php-7.3.5cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpmchmod 755 /etc/init.d/php-fpm

Step4:编辑php.ini配置文件

由于php服务程序的配置参数会对Web服务的运行环境造成影响,如果默认开启了一些不必要且高危的功能,则会降低网站被入侵的难度,甚至会让入侵人员拿到整台服务器的管理权限。

line 301行的disable_functions参数后面追加要禁止的功能:(参考)

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

Step5:启动程序

/etc/init.d/php-fpm start

搭建WordPress博客:

为了检验LNMP动态网站架构环境是否配置妥当,可以在上面部署WordPress博客系统,然后检查效果。如果能够在LNMP动态网站环境中成功安装并使用WordPress网站系统,也就意味着这套架构是可用的。

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

下面搭建WordPress博客。

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

cd ..rm -f /usr/local/nginx/html/*tar xzvf wordpress.tar.gzmv wordpress/* /usr/local/nginx/html/

为了能够让网站文件被Nginx服务程序顺利被读取,应设置目录所有权的身份及可读写的权限。

chown -Rf nginx:nginx /usr/local/nginx/htmlchmod -Rf 777 /usr/local/nginx/html

随后输入本机IP地址访问WordPress网站的首页面:

在这里就可以搭建博客网站页面了。