Linux LNMP(Linux NGINX MySQL PHP)

news/2024/5/17 4:45:59/文章来源:https://blog.csdn.net/qq_62344659/article/details/130990200

NGINX处理静态页面性能出色,但是动态页面几乎没有处理能力,比Apache还差

所以涉及动态页面的场合一般由PHP Python Java(后缀php,py,jsp)等处理

静态页面请求        客户端 -> nginx
动态页面请求        客户端 -> nginx --fastcgi转发--> php-fpm -> php -> mysql

静态页面请求

由NGINX直接接收并处理

动态页面请求过程

location判断用户请求的URL路径 若是后缀php(动态页面)

通过fastcgi接口将动态页面请求交给PHP服务的php-fpm进程,再转由php解析器处理,数据库读写数据,返回页面。




【安装 Nginx 服务】

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

1、安装依赖包

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2、创建运行用户

useradd -M -s /sbin/nologin nginx

3、编译安装

 解压软件包

cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

 配置软件

cd nginx-1.22.0/./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

编译安装

make -j8
make install

4、优化路径 以便shell中调用

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务

vim /lib/systemd/system/nginx.service[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

增加权限 

chmod 754 /lib/systemd/system/nginx.service

 即可使用systemctl控制

systemctl start nginx.service
systemctl enable nginx.service





【安装 MySQL 服务】

1、安装Mysql环境依赖包

yum -y install \
ncurses \
ncurses-devel \
bison \
cmakeyum install -y openssl openssl-devel#可能会缺这个包,版本问题

2、创建运行用户

useradd -M -s /sbin/nologin mysql

3、编译安装

 解压软件包

cd /opt
tar zxvf mysql-boost-5.7.41.tar.gz

 配置软件 

cd /opt/mysql-5.7.41/cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \   #注意,此处相对路径,因为boost部署目录就在软件包目录,从/usr/local/boost改为boost。一定要弄对路径不然编译安装会报错
-DWITH_SYSTEMD=1····························································cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

 编译安装

make -j8
make install

4、修改mysql 配置文件

vim /etc/my.cnf[client]
port = 3306
socket=/usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

5、更改mysql安装目录和配置文件的属主属组

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

6、设置路径环境变量

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile

7、初始化数据库

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

8、添加mysqld系统服务,设置路径环境变量

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld

9、修改mysql 的登录密码

mysqladmin -u root -p password "abc123"

10、授权远程登录

mysql -u root -p
mysql -u root -pabc123





【安装配置 PHP 解析环境】

1、安装环境依赖包

yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

2、编译安装

 解压软件包 

cd /opt
tar jxvf php-7.1.10.tar.bz2

配置软件 

cd php-7.1.10./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

编译安装 

make -j8
make install

3、路径优化

ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/

4、调整PHP配置文件

php有三个配置文件

php.ini            主配置文件  
php-fpm.conf    进程服务配置文件 
www.conf        扩展配置文件

调整主配置文件cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.inivim /usr/local/php/lib/php.ini--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai
php -m
#验证安装的模块
调整进程服务配置文件cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.confvim /usr/local/php/etc/php-fpm.conf--17行--去掉";"注释
pid = run/php-fpm.pid
调整扩展配置文件cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.confvim /usr/local/php/etc/php-fpm.d/www.conf23 24 属主属组
user = nginx #也可以创建一个单独的php用户
group = nginx36 监听地址
listen = 192.168.80.101:9000 (修改为PHP服务器地址 分布式部署用得到)62 客户机地址(对于目前PHP服务器来说客户机是NGINX服务器,写NGINX服务器地址)
listen.allowed_clients = 192.168.80.101

 5、启动php-fpm

PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。

原始的启动方法。这里不用。按下一步直接复制service文件,以便systemctl管理

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000

 

复制service文件,以便systemctl管理

cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service
systemctl enable php-fpm.service

6、配置 Nginx 支持 PHP 解析

vim /usr/local/nginx/conf/nginx.conf45添加index.php
index  index.html index.htm index.php;--65行--取消注释,修改
location ~ \.php$ {root           html;fastcgi_pass   192.168.80.101:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;    #将 /scripts 修改为nginx的工作目录#fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  #$document_root 代表当前请求在root指令中指定的值include        fastcgi_params;
}
systemctl restart nginx.service

7、验证PHP 测试页

vim /usr/local/nginx/html/index.php<?php
phpinfo();
?>

由于刚刚配置的默认网页为 index.html  index.htm  index.php

给index.html改名,以让nginx顺序访问到index.php 

[root@xue php-fpm.d]# cd /usr/local/nginx/html/
[root@xue html]# ls
50x.html  index.html  index.php[root@xue html]# rename index index2 index.html
[root@xue html]# ls
50x.html  index2.html  index.php

浏览器访问测试

        http://192.168.80.101/index.php

如果错误查看日志
cd /usr/local/nginx/logs/cat access.log
cat error.log

8、验证数据库工作是否正常

授权数据库用户权限

mysql -u root -p #登录CREATE DATABASE bbs; 
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; #创建bbsuser %在任意主机登录密码admin123
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123'; #创建bbsuser localhost在本主机登录密码admin123
flush privileges; #刷新权限``````````````````````````````````````````````````mysql -u root -pabc123CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

使用用户^密码读取数据库,写入php页面测试 

vim /usr/local/nginx/html/index.php
#替换原来的测试页内容<?php
$link=mysqli_connect('192.168.80.101','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

浏览器访问测试

        http://192.168.80.101/index.php




----------------fpm参数优化-------------------

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
根据服务器的内存与服务负载,调整FPM模块参数

编辑 php-fpm.conf 文件,设置pid路径,方便管理

设置pid路径,默认在安装目录中的var/run/php-fpm.pid,开启后可以通过pid文件快速获得服务的PID号管理进程,精确获取进程pid

    例如

        ExecReload=/bin/kill -s HUP $pid
        ExecStop=/bin/kill -s QUIT $pid

vim /usr/local/php/etc/php-fpm.confpid = run/php-fpm.pid

编辑www.conf文件,设置PHP进程配置

vim /usr/local/php/etc/php-fpm.d/www.conf--96行--
pm = dynamic                #fpm进程启动方式,动态的
--107行--
pm.max_children=20          #fpm进程启动的最大进程数
--112行--
pm.start_servers = 5        #动态方式下启动时默认开启的进程数,在最小和最大之间
--117行--
pm.min_spare_servers = 2    #动态方式下最小空闲进程数
--122行--
pm.max_spare_servers = 8    #动态方式下最大空闲进程数

重启php-fpm 

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`            #重启php-fpm
netstat -anpt | grep 9000
ps -elf | grep php-fpm





【部署 Discuz!社区论坛 Web 应用】

1.将 Discuz!安装包移动到相应位置

cd /opt
unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis
cd /opt/dis/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/

2.调整论坛目录的权限

由于PHP NGINX都设置的是nginx用户运行,需要按提示将下列文件夹全是加权限,或是属主改为nginx

cd /usr/local/nginx/html/bbs/
chown -R nginx ./config/
chown -R nginx ./data/
chown -R nginx ./uc_client/
chown -R nginx ./uc_server/
或
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/

3.论坛页面访问

        http://192.168.80.101/bbs/install/index.php

----------------------------------------------------------------------------------------------------------
数据库服务器:localhost     ###本地架设就用localhost,如何不是在在本机上就要填写IP地址和端口号
数据库名字:bbs
数据库用户名:bbsuser
数据库密码:admin123
管理员账号:admin
管理员密码:admin123
----------------------------------------------------------------------------------------------------------

访问论坛页面

        http://192.168.80.101/bbs/index.php
        http://192.168.80.101/bbs/admin.php




【安装wordpress-4.9.4】

解压软件包,移动文件到相应目录

cd /opt
tar xf wordpress-4.9.4-zh_CN.tar.gzcp -r wordpress /usr/local/nginx/html/
cd !$   #跳转到/usr/local/nginx/html/

 查看文件,发现属主为root。但是php,nginx都是由nginx用户运行的,使用要更改权限

ll
总用量 20
-rw-r--r--.  1 root root  497 6月   1 18:21 50x.html
drwxr-xr-x. 13 root root 4096 6月   1 20:03 bbs
-rw-r--r--.  1 root root  615 6月   1 18:21 index2.html
-rw-r--r--.  1 root root  127 6月   1 20:02 index.php
drwxr-xr-x.  5 root root 4096 6月   1 20:20 wordpress

更改全部文件属主为nginx

chown -R nginx wordpress/
#全部更改属主为nginx

 设置数据库

登录数据库 创建数据库 给wordpressadmin用户设置密码admin123  刷新权限

mysql -u root -pabc123show databases;
CREATE DATABASE wordpress;
GRANT all ON wordpress.* TO 'wordpressadmin'@'%' IDENTIFIED BY 'admin123';
GRANT all ON wordpress.* TO 'wordpressadmin'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;

浏览器访问网站 

http://192.168.80.101/wordpress

 

 

 

 

 

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

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

相关文章

《水经注地图服务》下载与安装步骤

概述 《水经注地图服务》&#xff08;WeServer&#xff09;是一款可快速发布全国乃至全球海量卫星影像的地图发布服务产品&#xff0c;该产品完全遵循OGC相关协议标准&#xff0c;是一个基于若干项目成功经验总结的产品。它可以轻松发布100TB级海量卫星影像&#xff0c;从而使…

chatgpt赋能python:Python几次方介绍

Python几次方介绍 Python是一种通用编程语言&#xff0c;具有快速开发和易于阅读的优点。Python具有各种强大的功能&#xff0c;包括能够计算数值的能力。本文将介绍Python几次方的相关知识。 Python几次方的语法 要在Python中进行几次方运算&#xff0c;可以使用双星号&…

亚马逊云科技与涂鸦智能持续赋能开发者,推动全行业的数智化创新

近几年&#xff0c;智能产品已渗透至人们生活的方方面面&#xff0c;IoT技术市场规模也随之获得较快增长&#xff0c;据IoT Analytics的数据&#xff0c;2023年IoT市场规模将增长19%&#xff0c;或成为经济波动周期的一大黑马赛道&#xff0c;但下游应用场景与需求的高度碎片化…

chatgpt赋能python:Python利用数据可视化出图,为SEO拓展新思路

Python利用数据可视化出图&#xff0c;为SEO拓展新思路 数据可视化出图在SEO领域中是非常重要的&#xff0c;它不仅能丰富网站内容&#xff0c;还能提高用户体验。而Python语言在数据处理和可视化方面具有很大的优势&#xff0c;让我们一起来看看如何利用Python出图来拓展SEO应…

使用chartgtp写Android代码

<LinearLayout android:layout_width"match_parent" android:layout_height"match_parent" android:orientation"horizontal"> <TextView android:id"id/姓名" …

第三章 JVM内存概述

附录&#xff1a;精选面试题 Q&#xff1a;为什么虚拟机必须保证一个类的Clinit( )方法在多线程的情况下被同步加锁 &#xff1f; A: 因为虚拟机在加载完一个类之后直接把这个类放到本地内存的方法区&#xff08;也叫原空间&#xff09;中了&#xff0c;当其他程序再来调这个类…

线程池的工作原则揭秘:如何合理管理线程数量?

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。在多线程编程中&#xff0c;线程池是一种非常实用的工具&#xff0c;可以帮助我们更好地管理线程&#xff0c;提高程序的性能和稳定性。今天&#xff0c;我将详细介绍线程池的概念、使用方法以及常用参数&…

VUE3中实现游戏摇杆效果

github地址 GitHub - yoannmoinet/nipplejs: A virtual joystick for touch capable interfaces. 演示地址 Nipplejs by yoannmoinet 1.安装nipple npm install nipplejs --save 下面是完整的VUE代码 <el-row> <el-col :span"5"><div id"jo…

15、Redis数据库

1、数据库相关知识简介 1、数据库分类 关系型数据库&#xff1a;Oracle,MySQL,SqlServer,DB2NoSql数据库&#xff1a;NoSQL最常见的解释是“non-relational”&#xff0c; “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念&#xff0c;泛指非关系型的数据库&#xff0c;…

Conditional, Ternary 运算符的使用

1. Conditional 条件运算符的使用 1.1 实现 /// 条件语句 struct ConditionalBootcamp: View {State var showCircle: Bool falseState var showRectangle: Bool falseState var isLoading: Bool falsevar body: some View {//conditionalView1conditionalView2}/// 方式二…

Qt6.5.1+WebRTC学习笔记(八)开发环境搭建(win10+vs2019)

一、准备 1.操作系统win10 64位 2.合理的上网方式&#xff0c;需要正常访问google,最好有20G以上流量 3.安装VS2019&#xff0c;笔者使用的是社区版&#xff0c;并选中C相关&#xff0c;笔者设置如下 注意&#xff0c;win10的sdk需要是10.0.20348.1&#xff0c;其他版本可能…

rt-thread汇总

finish和msh的区别&#xff1f; 这个问题我一直没搞懂&#xff0c;可能得看一下源码才能搞清楚了吧 通过Qemu运行RT-Thread 在windows上通过QEMU快速上手RT-thread smart RT-thread启动流程 rt-thread启动流程 Kconfig语法 Kconfig语法 关于终端的一些问题 终端的管脚配置…

NIO之Selector解读

目录 Selector 简介 为什么会出现Selector Selector 和 Channel 关系 可选择通道(SelectableChannel) Channel 注册到 Selector 选择键(SelectionKey) Selector 的使用方法 Selector 的创建 注册 Channel 到 Selector 轮询查询就绪操作 停止选择的方法 Selector 简…

11. 数据结构之二叉树

前言 上一节&#xff0c;简单概述了树这种数据结构&#xff0c;以及树结构向下&#xff0c;具有某些一些特征的树&#xff0c;比如二叉树&#xff0c;B树&#xff0c;B树&#xff0c;堆等。其中&#xff0c;二叉树是一个很重要的模块。也是在一些技术面试中&#xff0c;可能会…

【LeetCode】268. 丢失的数字

268. 丢失的数字&#xff08;简单&#xff09; 思路 其实这道题和 136.只出现一次的数字类似。我们可以将 nums 的所有数字和 [0, n] 组合&#xff0c;丢失的数字只会在 [0,n] 出现一次&#xff0c;其余数字都会出现两次&#xff0c;我们将它们两两异或&#xff0c;由于相同的…

自动驾驶赛道回暖?传统Tier1加速入场,真正赢家正在浮出水面

自动驾驶赛道&#xff0c;在经历过去三年的持续降温之后&#xff0c;正在迎来新一轮上升势头。整合、并购、协作&#xff0c;正在成为新一轮产业周期的关键词。 本周&#xff0c;滴滴自动驾驶与法雷奥签署战略合作及投资意向书&#xff0c;法雷奥将对滴滴自动驾驶进行战略投资…

技术帖——飞凌嵌入式RK3588开发板推理模型转换及测试

RKNN&#xff08;Rockchip Neural Network&#xff09;是一种用于嵌入式设备的深度学习推理框架&#xff0c;它提供了一个端到端的解决方案&#xff0c;用于将训练好的深度学习模型转换为在嵌入式设备上运行的可执行文件。使用RKNN框架可以在嵌入式设备上高效地运行深度学习模型…

【Python C扩展】零基础也能轻松掌握的学习路线与参考资料

Python C扩展是将Python语言与C语言相结合&#xff0c;最大限度地利用C语言的高性能和Python语言的灵活性&#xff0c;使Python程序获得更高的运行效率。Python C扩展的学习路线涵盖了C语言基础、Python语言、Python C API等多个方面。下面将详细介绍Python C扩展的学习路线&am…

一起学SF框架系列4.6-模块context-AbstractApplicationContext

org.springframework.context.ApplicationContext接口表示Spring IoC容器&#xff0c;负责实例化、配置和组装bean。容器通过读取配置元数据来获取关于实例化、配置和组装哪些对象的指令。配置元数据以XML、Java注释或Java代码表示。它允许您表达组成应用程序的对象以及这些对象…

Linux中查看端口被哪个进程占用、进程调用的配置文件、目录等

1.查看被占用的端口的进程&#xff0c;netstat/ss -antulp | grep :端口号 2.通过上面的命令就可以列出&#xff0c;这个端口被哪些应用程序所占用&#xff0c;然后找到对应的进程PID 3.根据PID查询进程。如果想详细查看这个进程&#xff0c;PID具体是哪一个进程&#xff0c;可…