Linux实验记录:使用LNMP架构部署动态网站环境

news2024/12/28 1:55:24

前言:

本文是一篇关于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.gz
cd FileDirectory
tar -jxvf FileName.tar.bz2
cd 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 /lnmp
cd /lnmp 
wget https://www.linuxprobe.com/Software/rpcsvc-proto-1.4.tar.gz
wget https://www.linuxprobe.com/Software/nginx-1.16.0.tar.gz
wget https://www.linuxprobe.com/Software/mysql-8.0.18.tar.gz
wget https://www.linuxprobe.com/Software/php-7.3.5.tar.gz
wget https://www.linuxprobe.com/Software/wordpress.tar.gz
ls

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

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

需要严格遵守安装步骤:

下载及解压源码包文件

编译源码包文件

生成二进制安装程序

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

tar -xzvf rpcsvc-proto-1.4.tar.gz
cd rpcsvc-proto-1.4/
./configure
make 
make install
cd ..

 配置Nginx服务

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

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

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

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

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

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

useradd nginx -M -s /sbin/nologin
id nginx

 

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

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

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

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

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

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

tar -zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make 
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_profile
nginx

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

 配置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/ mysql
mv mysql /usr/local

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

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

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

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

data目录需手动创建:

cd /usr/local/mysql
mkdir data

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

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

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

chown -R mysql:mysql /usr/local/mysql
cd 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 /lnmp
tar xvf php-7.3.5.tar.gz
cd 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
make
make install

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

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

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

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

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

cd /lnmp/php-7.3.5
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 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.gz
mv wordpress/* /usr/local/nginx/html/

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

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

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 性能分析工具汇总

Linux 性能分析工具汇总 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识…

(done) 两个矩阵 “相似” 是什么意思?

参考视频:https://www.bilibili.com/video/BV1zu411673J/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料:https://baike.baidu.com/item/%E7%9B%B8%E4%BC%BC%E7%9F%A9%E9%98%B5/10369874?frge_a…

离线环境解决IDEA连接数据库报需下载驱动的问题 Download missing driverfiles

去外网电脑上把这个目录下的MySQL ConnectorJ文件夹整体拷贝的内网电脑上就ok了! C:\Users\like12\AppData\Roaming\JetBrains\IntelliJIdea2021.2\jdbc-drivers 参考:IDEA Download missing driver files 下载失败解决方法-CSDN博客

开发一款招聘小程序需要具备哪些功能?

随着时代的发展,找工作的方式也在不断变得简单,去劳务市场、人才市场的方式早就已经过时了,现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道,还能节省招聘的成本,方便求职者进…

7. Qt添加滑动条

前言: 添加一个这样的滑条,双方关联自动修改,也提供代码创建方式 技能: QSpinBox QSlider 方式一 Qt 的图形化编程(用ui文件,非常简单) 1.Spin Box 首先找到显示数字的这个部分。是input widget->sp…

useGeneratedKeys=“true” keyProperty=“id”

useGeneratedKeys“true” keyProperty“id” 这个注解在xml文件的insert方法中,可以用于返回主键值; 并且useGeneratedKeys参数只针对 insert 语句生效,默认为 false;

【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: 无 2.详解思路: 题目描述:输入两个正整数,输出其最大公因数和最小公倍数 一般方法:最大公因数:穷加法;最小公倍数&…

小迪安全29WEB 攻防-通用漏洞SQL 注入增删改查盲注延时布尔报错

#知识点: 1、明确查询方式注入 Payload 2、明确查询方式注入产生功能 3、明确 SQL 盲注延时&布尔&报错 #详细点: 盲注就是在注入过程中,获取的数据不能回显至前端页面。 也就是在代码中无echo将sql结果输出出来 此时&#…

Android---Jetpack Compose学习004

CompositionLocal 通常情况下,在 Compose 中,数据以参数形式向下流经整个界面树传递给每个可组合函数。但是,对于广泛使用的常用数据(如颜色或类型样式),这可能会很麻烦。 为了支持无需将颜色作为显式参数…

stm32学习总结 FMC 驱动LCD

1, 显示器分类(了解) 全彩显示,LCD具有更多的优势,适合在单片机上使用 2, LCD简介(了解) Liquid Crystal Display,即液晶显示器,由:玻璃基板、背…

宝塔面板-安装与卸载

宝塔面板(BT Panel)是一款在互联网上广泛使用的服务器管理软件,它以其简洁的界面和强大的功能受到了许多站长的喜爱。通过宝塔面板,用户可以轻松地管理服务器上的网站、数据库、FTP、邮箱等服务。本文将详细介绍宝塔面板的安装与卸…

嵌入式产品开发流程全解析

(本文为简单介绍,内容来源于网络) 嵌入式产品开发是一个涵盖硬件和软件的综合系统工程,其开发流程可以概括为需求分析、系统设计、软硬件开发与调试、产品验证和批量生产几大阶段。 需求分析阶段是开发流程的基础,主要对产品的硬件资源、软…

【企业动态】复工啦,回顾2023,展望2024!东胜物联与您同启新程

这几天相信小伙伴们都已经陆陆续续回归工作岗位了吧,复工后在CSDN发布的第二篇文章带大家来回顾物联网硬件设备及解决方案商东胜物联的2023年总结以及2024年展望,分享给所有对Dusun感兴趣的新老朋友❤️ 2023年,东胜不仅面对了一些挑战&…

CVE-2024-24565 CrateDB数据库任意文件读取漏洞

目录 前言 简介 ​编辑 环境搭建 漏洞复现 前言 本次介绍的漏洞不同与以往, 本次洞更多是适用于利用数据库提权。 利用数据库的导入导出数据的功能,我们往往可以将内部的一些敏感文件如/etc/passwd导入到数据库进行查看。也可以将数据导入到一些特…

分组统计

目录 分组统计 根据部门编号分组,查询每个部门的编号、人数、平均工资 根据职位分组,统计出每个职位的人数、最低工资与最高工资 如果查询不使用 GROUP BY 子句,那么 SELECT 子句中只允许出现统计函数,其他任何字段不允许出现…

统计图雷达图绘制方法

统计图雷达图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图环形图绘制较难。 还有一种雷达图的绘制也较难,今提供雷达图的绘制方法供参考。 本方法采用C语言的最基本功能: &am…

Leetcode刷题笔记题解(C++):83. 删除排序链表中的重复元素

思路:链表相关的问题建议就是画图去解决,虽然理解起来很容易,但就是写代码写不出来有时候,依次去遍历第二节点如果与前一个节点相等则跳过,不相等则遍历第三个节点 /*** Definition for singly-linked list.* struct …

yolov5-tracking-xxxsort yolov5融合六种跟踪算法(二)--目标识别

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接:https://github.com/zzhmx/yolov5-tracking-xxxsort.git 先按照之前的博客配置好环境: yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)–环境配…

Canvas绘制

Canvas绘制 一、介绍效果图 二、画圆1 写一个页面2 画一个圆(点)3 效果 三 画直线1 写一个页面2 画直线3 效果 四 用直线连接两个点1 写一个页面2 连线3 效果 五 画随机点1 写一个页面2 随机点3 效果 六 画随机点并连线1 写一个页面2 画点连线3 效果 七 …

GEE使用 Sentinel-1 SAR影像 和 Otsu 方法绘制洪水地图

洪水是世界上最常见、破坏性最大的自然灾害之一,造成了巨大的生命和财产损失。此外,随着气候变化的影响,近年来,洪灾变得更加频繁和不可预测。为了最大限度地减少生命和财产损失,必须迅速发现洪水蔓延的情况,并及时采取必要的干预措施。洪水蔓延探测大多使用光学传感器或…