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

前言:

本文是一篇关于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网站的首页面:

 

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C 嵌入式系统设计模式 08:硬件代理模式

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述访问硬件的设计模式之一&…

Python 数据可视化之密度散点图 Density Scatter Plot

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 密度散点图(Density Scatter Plot),也称为密度点图或核密度估计散点图,是一种数据可视化技术,主要用于展示大量数据点在二维平面上的分布情况…

解决MobaXterm网络错误连接超时问题

报错页面: 报错原因: ①网络断开了 ②网络端口,端口号改变 解决办法: ①重新连接网络按R ②固定端口号 第一步:编辑------>虚拟机网络编辑器(我的Linux在虚拟机里) 第二步:用…

MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)

MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型,实现了包括增量预训练、有监督微…

单调栈总结以及Leetcode案例解读与复盘

单调栈总结以及Leetcode案例解读与复盘 一、单调栈是什么? 单调栈(monotonous stack)是指栈的内部从栈底到栈顶满足单调性的栈结构。 二、如何维护单调性 新元素入栈时,会与栈顶元素进行比较,使得栈始终保持单调性…

Redis-内存管理

Redis是基于内存存储的,非关系型,键值对数据库。因此,对Redis来说,内存空间的管理至关重要。那Redis是如何内存管理的呢? 一、最大内存限制 Redis 提供了 maxmemory 参数允许用户设置 Redis 可以使用的最大内存大小。…

2023年12月CCF-GESP编程能力等级认证C++编程五级真题解析

一、单选题(每题 2 分,共 30 分) 第1题 下面C++代码用于求斐波那契数列,该数列第1、2项为1,以后各项均是前两项之和。下面有关说法错误的是( )。 A. fiboA( ) 用递归方式, fiboB() 循环方式 B. fiboA( ) 更加符合斐波那契数列的数学定义,直观易于理解,而 fiboB() 需…

Android TV遥控器探索,Android 桌面应用程序

Android TV 的遥控功能是通过红外遥控器或蓝牙遥控器来实现的。下面分别介绍这两种遥控器的工作原理: 红外遥控器: 红外遥控器是最常见的 Android TV 遥控器类型之一。 红外遥控器通过发送红外信号来控制电视或机顶盒。每个按键都有一个特定的红外编码&…

基于springboot+vue的课程答疑系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【算法 - 动态规划】最长回文子序列

上篇文章中,我们学习一个新的模型: 样本对应模型,该模型的套路就是:以结尾位置为出发点,思考两个样本的结尾都会产生哪些可能性 。 而前篇文章中的 纸牌博弈问题 属于 [L , R]上范围尝试模型。该模型给定一个范围&…

【洛谷 P8780】[蓝桥杯 2022 省 B] 刷题统计 题解(二分查找+数学)

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a a 道题目,周六和周日每天做 b b b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n n n 题? 输入格式 输入一…

Android14 InputManager-InputReader的处理

IMS启动时会调用InputReader.start()方法 InputReader.cpp status_t InputReader::start() {if (mThread) {return ALREADY_EXISTS;}mThread std::make_unique<InputThread>("InputReader", [this]() { loopOnce(); }, [this]() { mEventHub->wake(); });…

Nignx的搭建与核心配置

目录 一、Nginx是什么&#xff1f; 1、Nginx概述 2、Nginx模块与作用 3、Nginx三大作用&#xff1a;反向代理&#xff0c;负载均衡&#xff0c;动静分离 nginx七层负载均衡调度算法&#xff08;六种&#xff09; 1、轮询&#xff08;默认调度算法&#xff09; 2、加权轮…

雨量水位在线监测站

TH-SW2随着科技的不断进步&#xff0c;雨量水位在线监测站在防汛、水资源管理、环境保护等领域发挥着越来越重要的作用。传统的雨量水位监测方法往往存在精度不高、实时性不强等问题&#xff0c;而雷达式测量技术的出现&#xff0c;则为这一领域带来了革命性的变化。 一、雨量水…

【踩坑专栏】主机ping虚拟机失败

我出现的问题finalshell连接超时&#xff0c;ping了一下发现ping都ping不通&#xff0c;于是发现问题所在。 最开始我是把虚拟机的网络设置改为桥接模式&#xff0c;问题解决了&#xff0c;但是这种模式的问题就是每次开机&#xff0c;ip都会改变&#xff0c;因此非常麻烦&…

零到大师:嵌入式Linux学习书单分享

大家好&#xff0c;我是知微&#xff01; 上一篇推荐的书单嵌入式软件必读10本书_单片机篇&#xff0c;收到反响很好。再推荐一篇嵌入式Linux相关的书单。 《鸟哥的Linux私房菜》 鸟哥的Linux系列适合零基础小伙伴&#xff0c;从电脑基础到文件系统、shell脚本等等&#xff…

【PX4学习笔记】04.QGC地面站的使用

目录 文章目录 目录PX4代码烧入PX4固件代码的烧入方式1PX4固件代码的烧入方式2 QGC地面站的基础使用连接地面站的方式查看关键的硬件信息 QGC地面站的Application Settings模块Application Settings模块-常规界面单位其他设置数据持久化飞机中的数传日志飞行视图计划视图自动连…

Unity Shader ASE基础效果思路与代码(一):遮罩、硬边溶解、光边溶解、UV扰动

Unity Shader ASE基础效果思路与代码(一)&#xff1a;遮罩、硬边溶解、光边溶解、UV扰动 文章目录 Unity Shader ASE基础效果思路与代码(一)&#xff1a;遮罩、硬边溶解、光边溶解、UV扰动遮罩效果硬边溶解光边溶解UV扰动 遮罩效果 效果展示&#xff1a; 思路与代码&#xff1…

SQL注入:堆叠注入-强网杯[随便注]

目录 什么是堆叠注入&#xff1f; 强网杯-随便注 rename && alter绕过 prepare绕过 Handle绕过 靶机&#xff1a;BUUCTF在线评测 什么是堆叠注入&#xff1f; 在一些场景中&#xff0c;应用程序支持一次执行多条SQL语句&#xff0c;我们称为堆叠查询&#xff0c;…

HTML5-CSS3

一、HTML5的新特性 HTML5 的新增特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是 **IE9 以上版本的浏览器**才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性…