34 使用 LNMP 架构部署动态网站环境

源码包程序

 LNMP 动态网站部署架构

        LNMP 动态网站部署架构是一套由 Linux + Nginx + MySQL + PHP 组成的动态网站系统
解决方案。

1. 准备工作

        在使用源码包安装服务程序之前,首先要让安装主机具备编译程序源码的环境。这需要
具备 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

 安装 LNMP 动态网站部署架构所需的 4 个软件源码包和 1 个用于检查效果的博客系统软件包可以直接在 Linux服务器中使用 wget 命令下载这些源码包文件。为了更好地找到它们,我们统一放到/lnmp 目录下保存 

[root@localhost ~]# mkdir /lnmp
[root@localhost ~]# cd /lnmp
[root@localhost lnmp]# ls
mysql-8.0.18.tar.xz  nginx-1.16.0.tar.gz  php-7.3.5.tar.xz  rpcsvc-proto-1.4.tar.gz  wordpress.tar.xz

         rpcsvc-proto 是一款包含 rcpsvc 协议文件的支持软件包名称,rcpsvc 协议在后续 Nginx 与 MySQL 服务程序的部署过程中都需要被调用到。

        要想通过源码包安装服务程序,就一定要严格遵守上面总结的安装步骤:下载及解压源码包
文件、编译源码包代码、生成二进制安装程序、运行二进制的服务程序安装包。在解压、编译各个软件包源码程序时,都会生成大量的输出信息,

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

2.配置 Nginx 服务 

        Nginx 是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯的一家门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。
        Nginx 服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了 CPU 与内存的占用率,所以使用 Nginx 程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少。此外,Nginx 具备的模块数量与 Apache 具备的模块数量几乎相同,而且现在已经完全支持 proxy、rewrite、mod_fcgi、ssl、vhosts 等常用模块。更重要的是,Nginx 还支持热部署技术,可以 7×24 小时不间断提供服务,还可以在不暂停服务的情况下直接对 Nginx 服务程序进行升级。

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

    需要由不同的系统用户来管理不同的服务程序。新建账户时应使用-M 参数不创建对应的家目录,以及使用-s 参数指定登录后的 Shell 解释器为/sbin/nologin,确保任何人都不能通过这个账号登录主机。

[root@localhost rpcsvc-proto-1.4]# useradd nginx -M -s /sbin/nologin
[root@localhost rpcsvc-proto-1.4]# id nginx
uid=1002(nginx) gid=1002(nginx) groups=1002(nginx)

编译安装 Nginx 网站服务程序

使用 prefix 参数指定服务将被安装到哪个目录,方便后面找到和调用它。

用with-http_ssl_module 参数来开启 Nginx 服务的 SSL 加密模块,以便日后开启 HTTPS 协议功能: 

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

在上述过程中,存在模块没有安装,报错后,自行安装

sudo yum install pcre-devel
sudo yum install openssl-devel

 安装完毕后进入最终配置阶段

        在编译环境中使用 prefix 参数指定了安装路径,Nginx 服务程序配置文件一定在/usr/local/nginx 目录中。
        总共要进行 3 处修改,首先是把第 2 行的注释符(#)删除,然后在后面写上负责运行网站服务程序的账户名称和用户组名称。由 nginx 用户及 nginx 用户组负责管理网站服务。

[root@localhost lnmp]# vim /usr/local/nginx/conf/nginx.conf 
 2 user  nginx nginx;

        修改第 45 行的首页文件名称,在里面添加 index.php 的名字。这个文件也是让用户浏览网站时第一眼看到的文件,也叫首页文件。 

 45             index  index.php index.html index.htm;

         删除第 65~71 行前面的注释符(#)来启用虚拟主机功能,然后将第 69 行后面对
应的网站根目录修改为/usr/local/nginx/html,其中的 fastcgi_script_name 参数用于指代脚本名
称,也就是用户请求的 URL。只有信息填写正确了,才能使 Nginx 服务正确解析用户请求,
否则访问的页面会提示“404 Not Found”的错误。

 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         }

设置环境变量全局使用nginx

        通过编译源码方式安装的服务默认不能被 systemctl 命令所管理,而要使用 Nginx服务本身的管理工具进行操作,相应命令所在的目录是/usr/local/nginx/sbin。由于使用绝对路径的形式输入命令未免会太麻烦,建议将/usr/local/nginx/sbin 路径加入到 PATH 变量中,让Bash 解释器在后续执行命令时自动搜索到它。然后在 source 命令后加载配置文件,让参数立即生效。下次就只需要输入 nginx 命令即可启动网站服务了 

 [root@localhost lnmp]# vim ~/.bash_profile

1 # .bash_profile
  2
  3 # Get the aliases and functions
  4 if [ -f ~/.bashrc ]; then
  5         . ~/.bashrc
  6 fi
  7
  8 # User specific environment and startup programs
  9
 10 PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin
 11
 12 export PATH

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

配置 MySQL 服务

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

        在系统中创建一个名为 mysql 的用户,专门用于负责运行 MySQL 数据库。请记得要把这类账户的 Bash 终端设置成 nologin 解释器,避免黑客通过该用户登录到服务器中,从而提高系统安全性。

[root@localhost lnmp]# useradd mysql -M -s /sbin/nologin

解压 MySQL 安装软件包

        将解压出的程序目录改名并移动到/usr/local 目录下,对其进行初始化操作后便可使用。需要注意的是,以.tar.xz 结尾的压缩包软件,不应用 z 参数进行解压。并重命名为MySQL,再将其移动到/usr/local目录下

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

创建data目录 

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

一个是/usr/local/mysql目录,这是用于保存 MySQL 数据库程序文件的路径。

还有一个是/usr/local/mysql/data 目录,它用于存储数据库的具体内容,每个数据库的内容会被单独存放到一个目录内。

对于存放实际数据库文件的 data 目录,用户需要先手动创建出来:

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

初始化 MySQL 服务程序

        对目录进行授权,保证数据能够被 mysql 系统用户读取。在初始化阶段,应使用 mysqld 命令确认管理 MySQL 数据库服务的用户名称、数据保存目录及编码信息。在信息确认无误后开始进行初始化。在初始化的最后阶段,系统会给用户分配一个初始化的临时密码,一定要保存好。

 将 /usr/local/mysql 目录下的所有文件和子目录的所有权(owner)和所属组(group)都修改为 mysql:mysql,初始化会看到临时密码

[root@localhost lnmp]# cd /usr/local/mysql/
[root@localhost mysql]# mkdir data
[root@localhost mysql]# chown -R mysql:mysql /usr/local/mysql
[root@localhost mysql]# cd bin
[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 
2024-02-03T06:21:06.031854Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18) initializing of server in progress as process 20719
2024-02-03T06:21:08.413206Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: #.j,yqmls1dF

设置环境变量全局使用mysql

MySQL 数据库的二进制可执行命令也单独存放在自身的程序目录/usr/local/mysql/bin 中。若每次在执行命令之前都要先切换到这个目录,要能也加入到 PATH 变量中可就方便

 [root@localhost bin]# vim ~/.bash_profile
  1 # .bash_profile
  2
  3 # Get the aliases and functions
  4 if [ -f ~/.bashrc ]; then
  5         . ~/.bashrc
  6 fi
  7
  8 # User specific environment and startup programs
  9
 10 PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
 11
 12 export PATH
[root@localhost bin]# source ~/.bash_profile

        将启动脚本 mysql.server 放入到/etc/init.d 目录中,让服务器每次重启后都能自动启动数据库,并给予可执行权限。
        libtinfo.so.5 文件是 MySQL 数据库在 8.0 版本后新添加的重要的函数库文件,但默认不存
在,需要将 libtinfo.so.6.1 文件复制过来或者作为链接文件才能正常启动: 

[root@localhost bin]# cd /usr/local/mysql
[root@localhost mysql]# cp -a support-files/mysql.server /etc/init.d/                      [root@localhost mysql]# chmod a+x /etc/init.d/mysql.server
[root@localhost mysql]# ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo  
[root@linuxprobe mysql]# /etc/init.d/mysql.server start
Starting MySQL.Logging to '/usr/local/mysql/data/linuxprobe.com.err'.
. SUCCESS!
[root@linuxprobe mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> alter user 'root'@'localhost' identified by 'mysql';

 需要继续切换到 mysql 数据库中,修改 user 表单的密码值

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_passwordBY'mysql';

 把数据库新建出来:

mysql> create database webdata;

配置 PHP 服务

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

        在编译期间,需要使用 prefix 参数指定安装路径,使用--with-mysqli 等参数开启对数据库的支持模块,为后面的在线安装网站做好准备。

 生成二进制文件并进行安装

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

        将生成的 php 服务配置文件复制到安装目录中(/usr/local/php/),让其生效。需要 php-fpm 的配置文件,在/usr/local/php/etc/目录中也已经提供,需要复制模板即可:

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

 复制一个模板文件到 php-fpm.d 的目录中,用于后续控制网站的连接性能:

[root@localhost etc]# mv php-fpm.d/www.conf.default php-fpm.d/www.conf


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

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

        由于 php 服务程序的配置参数会对 Web 服务的运行环境造成影响,编辑 php.ini 配置文件,
在第 310 行的 disable_functions 参数后面追加上要禁止的功能。

[root@localhost php-7.3.5]# vim /usr/local/php/lib/php.ini
310 disable_functions = passthru,exec,system,chroot,chgrp,chown,she
ll_exec,
proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,s
yslog,readlink,
symlink,popepassthru,stream_socket_server

启动PHP 

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

搭建 WordPress 博客

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

[root@localhost lnmp]# rm -f /usr/local/nginx/html/*
[root@localhost lnmp]# tar xzvf wordpress.tar.gz
[root@localhost lnmp]# mv wordpress/* /usr/local/nginx/html/
[root@localhost lnmp]# chown -Rf nginx : nginx /usr/local/nginx/html/
[root@localhost lnmp]# chmod -Rf 777 /usr/local/nginx/html/

浏览器输入本地IP地址,就可以访问了,按照web操作即可 

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

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

相关文章

Python:流程控制

4.1 顺序结构 在任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下一行行地执行,中间没有任何判断和跳转。 如果Python程序的多行代码之间没有任何流程控制,则程序总是从上往下依次执行,排在前面的代码先执行&#xf…

Failed at the chromedriver@2.27.2 install script.

目录 【错误描述】Failed at the chromedriver2.27.2 install script. npm install报的错误 【解决方法】 删除node_modules文件夹npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedrivernpm install 【未解决】 下载该zip包运行这个&…

RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Matplotlib 绘图实践:从基础到高级技巧【第62篇—python:Matplotlib绘图】

文章目录 Matplotlib绘图模块基础入门大全1. 安装Matplotlib2. 绘制基本图形3. 自定义图形样式4. 多子图布局5. 高级绘图技巧6. 绘制实时动态图7. 图形注释与标记8. 颜色映射与散点图9. 绘制直方图10. 绘制饼图11. 绘制热力图 总结 Matplotlib绘图模块基础入门大全 Matplotlib…

字符串哈希模版(来自TsReaper)

有一个字符串word,让你求出某一段所对应的数值(即映射值),word[L,R]对应的数值。

【LeetCode: 239. 滑动窗口最大值 + 滑动窗口 + 单调队列】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

rhel8静态ip配置

1.先cd进来 2.把默认的dhcp改成static IPADDR192.168.211.22 22随意改,255以下的数字都行,1和255不要用 GATEWAY192.168.211.2和虚拟机默认网关保持一致 重启网络 nmcli c reload和 nmcli c up ens160 ping百度测试--(成功了&#xff0…

dnslog在sql盲注

首先必须保证sql是在windows下 因为需要使用到UNC路径 保证mysql中的secure_file_priv为空 secure_file_priv为null,load_file则不能加载文件。 secure_file_priv为路径,可以读取路径中的文件; secure_file_priv为空,可以读取磁盘…

ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

maven-install-plugin:2.4:install (default-cli) on project ability-dispatch:

IDEA,instal时报错 ,错误 信息如下: Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project ability-dispatch: The packaging for this project did not assign a file to the buil…

javaEE - 24( 20000 字 Servlet 入门 -2 )

一: Servlet API 详解 1.1 HttpServletResponse Servlet 中的 doXXX 方法的目的就是根据请求计算得到相应, 然后把响应的数据设置到HttpServletResponse 对象中. 然后 Tomcat 就会把这个 HttpServletResponse 对象按照 HTTP 协议的格式, 转成一个字符串, 并通过S…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

情人节浪漫礼物指南:精选共享甜蜜时光的情人节礼物推荐

情人节,代表着浪漫和爱意的纪念日,总能激起每个人内心深处的悸动,促使他们渴望与爱侣共度美好时刻。为爱人精心选择一份情人节礼物,不仅是对他们深情的告白,更是将这份爱升华,让它成为两人爱情故事里的宝贵…

C# Winform NLog的使用笔记

一、NLog的介绍 NLog是一个开源的、灵活的、可扩展的日志记录库,用于.NET平台。它提供了强大的日志记录功能,可以帮助开发人员在应用程序中实现高效的日志记录和跟踪。它提供了一种简单且灵活的方式来在应用程序中记录日志信息。NLog支持多种日志目标&am…

计算机设计大赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数:2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题,简简单单的列表,查询MongoDB数据库,测试环境不过几百上千条数据而已,请求耗时居然高达5~6秒: 作为对比,生产环境的请求响应截图如下&…

机器学习中的有监督学习和无监督学习

有监督学习 简单来说,就是人教会计算机学会做一件事。 给算法一个数据集,其中数据集中包含了正确答案,根据这个数据集,可以对额外的数据希望得到一个正确判断(详见下面的例子) 回归问题 例如现在有一个…

【算法】枚举——蓝桥杯、日期统计、特殊日期(位数之和)、2023、特殊日期(倍数)、跑步锻炼

文章目录 蓝桥杯日期统计特殊日期(位数之和)2023特殊日期(倍数)跑步锻炼 蓝桥杯 日期统计 日期统计 如果暴力枚举100个数的八次循环那就是1016次运算,时间复杂度太高了,好在前四次的2023是确定的&#xf…

【实用原创】20个Python自动化脚本,解放双手、事半功倍

在当今的快节奏工作环境中,自动化不再是一种奢侈,而是提高效率和精确性的必需手段。Python,以其易于学习和强大的功能而闻名,成为实现各种自动化任务的理想选择。无论是数据处理、报告生成,还是日常的文件管理&#xf…

如何配置SSH实现无公网ip远程连接访问Deepin操作系统

📑前言 本文主要是配置SSH实现无公网ip远程连接访问Deepin操作系统的文章,如果有什么需要改进的地方还请大佬指出⛺️** 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &…
最新文章