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网站的首页面:

 

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

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

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

相关文章

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核,为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要,特别是在面对大规模数据处理和高…

Go语言进阶篇——泛型

前言 在开始今天有关泛型的介绍之前,我们先来看一个简单的例子,如果我们要设计两个int类型变量相加的函数,我们可以这样设计: func Sum (a, b int) int {return a b }如果变量要求是float类型或者是其他类型,我们要面对一个问题…

高防服务器是怎样进行防御的?

随着互联网的发展,网络攻击和恶意流量也日益增多,高防服务器作为企业网络安全的重要保障,越来越受到关注。那么,高防服务器是怎样进行防御的呢? 高防服务器主要是指具备防御DDoS攻击、CC攻击、7x24小时实时防御网站入…

【Flink集群RPC通讯机制(二)】创建AkkaRpcService、启动RPC服务、实现相互通信

文章目录 零. RpcService服务概述1. AkkaRpcService的创建和初始化2.通过AkkaRpcService初始化RpcServer3. ResourceManager中RPC服务的启动4. 实现相互通讯能力 零. RpcService服务概述 RpcService负责创建和启动Flink集群环境中RpcEndpoint组件的RpcServer,且Rpc…

32单片机基础:OLED调试工具的使用

下面会介绍OLED显示屏的驱动函数模块,先学会如何使用,至于OLED屏幕的原理和代码编写, 我们之后会再写一篇。 现在我们就是用OLED当一个调试的显示屏,方便我们调试程序。 为什么要调试呢,是为了方便我们看现象&#…

嵌入式学习之Linux入门篇——使用VMware创建Unbuntu虚拟机

目录 主机硬件要求 VMware 安装 安装Unbuntu 18.04.6 LTS 新建虚拟机 进入Unbuntu安装环节 主机硬件要求 内存最少16G 硬盘最好分出一个单独的盘,而且最少预留200G,可以使用移动固态操作系统win7/10/11 VMware 安装 版本:VMware Works…

CQT新里程碑:SOC 2 数据安全认证通过,加强其人工智能支持

Covalent Network(CQT)发展新里程碑:SOC 2 数据安全认证通过,进一步加强了其人工智能支持 Covalent Network(CQT)现已完成并通过了严格的 Service Organization Control(SOC) 2 Type II 的合规性…

vivo 基于 StarRocks 构建实时大数据分析平台,为业务搭建数据桥梁

在大数据时代,数据分析和处理能力对于企业的决策和发展至关重要。 vivo 作为一家全球移动互联网智能终端公司,需要基于移动终端的制造、物流、销售等各个方面的数据进行分析以满足业务决策。 而随着公司数字化服务的演进,业务诉求和技术架构有…

ELK Stack 日志平台搭建

前言 最近在折腾 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。 专门实操了一波,这玩意看起来简单,但是里面的流程步骤还是很多的,而且遇到了很多坑。在此记录和总结下。 本文亮点:…

如何添加或编辑自定义WordPress侧边栏

WordPress侧边栏是许多WordPress网站上的固定装置。它为您的内容提供了一个垂直空间,您可以在其中帮助读者导航、增加电子邮件列表或社交关注、展示广告等。 因为它是许多WordPress网站不可或缺的一部分,所以我们认为侧边栏值得拥有自己的大型指南。在这…

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目,被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目,GPT-SoVITS 对硬件配置的要求相对较低,一般只需 6GB 显存以上的 GPU 即可…

物体检测-系列教程8:YOLOV5 项目配置

1、项目配置 yolo的v1、v2、v3、v4这4个都有一篇对应的论文,而v5在算法上没有太大的改变,主要是对v4做了一个更好的工程化实现 1.1 环境配置 深度学习环境安装请参考:PyTorch 深度学习 开发环境搭建 全教程 要求torch版本>1.6&#xf…

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的,如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示: HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …

#gStore-weekly | gStore最新版1.2之新增内置高级函数详解(一)

gStore1.2版本新增了七个高级函数,我们第2期将继续介绍的高级函数为:整体/局部集聚系数(clusterCoeff)、鲁汶算法(louvain)、K跳计数(kHopCount)/K跳邻居(kHopNeighbor&a…

React之拖动组件的设计(一)

春节终结束了,忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果: 这是一个简单的组件设计,如果用原生的js设计就很简单,但在React中有些事件必须要多考虑一些。这是一个系列的文章,…

Linux CAfile 文件下的/ca-bundle.crt怎么生成的

在配置Linux Nginx SSL证书后,通过服务器访问域名时发现,服务器返回的CA证书是:/etc/pki/tls/certs/ca-bundle.crt 正式我在使用Spring Native安装了Docker自动生成的,而且开启了Docker的自启动,如果你和我一样&#x…

10MARL深度强化学习 Value Decomposition in Common-Reward Games

文章目录 前言1、价值分解的研究现状2、Individual-Global-Max Property3、Linear and Monotonic Value Decomposition3.1线性值分解3.2 单调值分解 前言 中心化价值函数能够缓解一些多智能体强化学习当中的问题,如非平稳性、局部可观测、信用分配与均衡选择等问题…

从零开始学习Netty - 学习笔记 - NIO基础 - 文件编程:FileChannel,Path,Files

3.文件编程 3.1.FileChannel FileChannel只能工作在非阻塞模式下面,不能和selector一起使用 获取 不能直接打开FIleChannel,必须通过FileInputSream,或者FileOutputSetream ,或者RandomAccessFile来获取FileChannel 通过FileIn…

互联网高科技公司领导AI工业化,MatrixGo加速人工智能落地

作者:吴宁川 AI(人工智能)工业化与AI工程化正在引领人工智能的大趋势。AI工程化主要从企业CIO角度,着眼于在企业生产环境中规模化落地AI应用的工程化举措;而AI工业化则从AI供应商的角度,着眼于以规模化方式…

Rust ?运算符 Rust读写txt文件

一、Rust ?运算符 ?运算符:传播错误的一种快捷方式。 如果Result是Ok:Ok中的值就是表达式的结果,然后继续执行程序。 如果Result是Err:Err就是整个函数的返回值,就像使用了return &#xff…