LNMP搭建及论坛搭建

news2024/11/17 3:53:48

一、LNMP

LNMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,
能够提供动态Web站点服务及其应用开发环境。LNMP是一个缩写词,具体包括Linux操作系统、nginx网站服务器、MySQL数据库服务器、PHP(或Perl、Python)网页编程语言。


  1. L:(平台)Linux,作为LNMP架构的基础,提供用于支撑Web站点的操作系统,
    能够与其他三个组件提供更好的稳定性,兼容性(NMP组件也支持Windows、UNIX等平台)。
  2. N:(前台)nginx,nginx网站服务,提供前端的静态页面服务。同时具有代理,转发作用。转发后端请求,转发PHP;nginx没有处理动态资源的功能,但是有可以支持转发动态请求的模块。
  3. M:(后台)MySQL,MySQL关系型数据库,保存用户的账号和密码
  4. P:(中间连接)PHP,动态页面的编程语言,负责解释动态网页文件,和nginx以及数据库协同

 二、LNMP搭建

关闭防火墙和安全机制

1. 安装 Nginx 服务

1.1 安装依赖环境

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

1.2 创建运行用户

useradd -M -s /sbin/nologin nginx

1.3 解源码包

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

 1.4 进入安装包,配置安装路径

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

 1.5 编译安装

make -j 4 && make install  #-j 4 给4核,加快速度

1.6 优化路径 

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

1.7  添加 Nginx 系统服务

vim /lib/systemd/system/nginx.service
[Unit]  #这个部分定义了服务单元的元数据
Description=nginx  #描述该服务单元的信息,描述为"nginx"
After=network.target  #定义服务单元所依赖的其他单元,这里表示服务需要在网络加载完成之后启动
[Service]  #这个部分定义了服务的运行配置
Type=forking  #指定服务的类型,这里是forking,表示服务是一个后台进程(通常是fork出子进程)
PIDFile=/usr/local/nginx/logs/nginx.pid #指定保存主进程ID的文件路径,Nginx将会把主进程ID写入这个文件,以便Systemd可以追踪和管理进程
ExecStart=/usr/local/nginx/sbin/nginx  #指定启动服务的命令。这里是启动Nginx的命令/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID  #指定重新加载配置的命令。当执行此命令时,Systemd将发送HUP信号给主进程,Nginx将重新加载配置文件
ExecStop=/bin/kill -s QUIT $MAINPID  #指定停止服务的命令。当执行此命令时,Systemd将发送QUIT信号给主进程,Nginx将优雅地停止服务
PrivateTmp=true  #将此项设置为true,表示为服务提供独立的临时目录
[Install]  #这个部分定义了服务的安装配置
WantedBy=multi-user.target  #指定服务所属的目标(target),这里是multi-user.target,表示服务在多用户模式下启动

 1.8 给Nginx系统服务文件设置权限

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

 1.9 启动nginx服务

systemctl start nginx.service

验证:

2.安装 MySQL 服务

2.1  安装Mysql环境依赖包

yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

2.2 创建运行用户

useradd -M -s /sbin/nologin  mysql

2.3 解源码包

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

2.4 进入安装包配置安装路径

cd /opt/mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \  #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \ #指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8  \ #指定默认使用的字符集编码,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \  #指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \  #安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ #指定数据库文件的存储路径
-DWITH_BOOST=boost \ #指定boost的路径,
-DWITH_SYSTEMD=1 #生成便于systemctl管理的文件

2.5 编译安装

make -j 4 && make install

2.6 修改mysql配置文件

vim /etc/my.cnf
[client]
port = 3306 #客户端连接MySQL服务器使用的端口号,默认为3306。
socket=/usr/local/mysql/mysql.sock #客户端连接MySQL服务器使用的Unix socket文件路径,默认为/tmp/mysql.sock。在该配置文件中指定的路径是/usr/local/mysql/mysql.sock

[mysqld]
user = mysql #MySQL服务器运行时的用户名,一般设置为mysql
basedir=/usr/local/mysql #MySQL安装目录的路径
datadir=/usr/local/mysql/data #存放MySQL数据文件的路径
port = 3306 #MySQL服务器监听的端口号,默认为3306
character-set-server=utf8 #MySQL服务器使用的默认字符集,这里设置为UTF-8编码(utf8)
pid-file = /usr/local/mysql/mysqld.pid #保存MySQL服务器进程ID的文件路径,默认为/var/run/mysqld/mysqld.pid。在该配置文件中指定的路径是/usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock #MySQL服务器监听的Unix socket文件路径,默认为/tmp/mysql.sock。在该配置文件中指定的路径是/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0 #MySQL服务器绑定的IP地址,默认为127.0.0.1,这里设置为0.0.0.0表示允许任何IP地址访问MySQL服务器
skip-name-resolve #禁用DNS反向解析,可以提高性能,尤其是在有大量连接时
max_connections=2048 #MySQL服务器支持的最大并发连接数,默认为151,这里设置为2048
default-storage-engine=INNODB #设置默认的存储引擎为InnoDB
max_allowed_packet=16M #设置MySQL服务器接收的最大数据包大小,默认为4MB,这里设置为16MB
server-id = 1 #设置MySQL服务器的唯一ID,在主从复制设置中使用

sql_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

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

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

 2.8 设置路径环境变量

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

source /etc/profile

2.9 初始化数据库

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

 2.10 添加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

2.11 修改mysql 的登录密码

mysqladmin -u root -p password "123456"

 2.12 授权远程登录

mysql -u root -p
show databases;

grant all privileges on *.* to 'root'@'%' identified by '123456';        (有分号)
#授予root用户可以在所有终端远程登录,使用的密码是123456,并对所有数据库和所有表有操作权限

flush privileges; #刷新权限

2.13  连接数据库

 

 

3.安装配置 PHP 解析环境

3.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

3.2 解源码包

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

3.3 进入安装包,配置安装路径

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

3.4 编译安装

make -j 4 && make install

3.5 路径优化

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

 3.6 调整主配置文件

cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini	
vim /usr/local/php/lib/php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai

php -m                     #验证安装的模块

3.7  调整进程服务配置文件

cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid

 3.8  调整扩展配置文件

cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

3.9 启动php-fpm

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

netstat -anpt | grep 9000   #查看php服务端信息是否正确

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

3.10 配置 Nginx 支持 PHP 解析

vim /usr/local/nginx/conf/nginx.conf
--65行--取消注释,修改
location ~ \.php$ {
	root           html;
	fastcgi_pass   127.0.0.1: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;
}

3.11  验证PHP 测试页

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

浏览器访问
http://192.168.247.30/index.php
3.12 验证数据库工作是否正常

mysql -u root -p
create database bbs;
show databases; #查看是否创建成功
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
#GRANT: 这是授权语句的关键字,用于授予特定的权限给指定用户。
#all: 表示授予所有权限,包括SELECT、INSERT、UPDATE、DELETE、CREATE、DROP等。
#bbs.*: 这是指定数据库和表的位置,其中bbs表示数据库名,*表示所有表。
#因此,这个语句授予bbsuser用户在bbs数据库的所有表上的所有权限。
#'bbsuser'@'%': 这是授予权限的用户和主机的标识。'bbsuser'是用户名,'%'表示任何主机。
#所以,bbsuser用户可以从任何主机连接并拥有授予的权限。
#IDENTIFIED BY 'admin123': 这是设置bbsuser用户的密码为admin123,这样用户在连接时需要提供相应的密码。

GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
#这条语句与第一条类似,但是主机部分不同。'bbsuser'@'localhost'表示用户bbsuser只能从本地主机(即MySQL服务器所在的主机)连接,并拥有相同的权限。
#bbsuser用户被授予在bbs数据库的全部权限,允许从任何主机和本地主机连接MySQL服务器,并且密码为admin123.

flush privileges;

3.13 替换原来的测试页内容

vim /usr/local/nginx/html/index.php      		#替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.247.10','bbsuser','admin123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>
#使用mysqli_connect()函数连接到MySQL数据库服务器。

#'192.168.247.10':表示MySQL服务器的IP地址。
#'bbsuser':表示要连接的MySQL用户。
#'admin123':表示MySQL用户的密码。
#如果连接成功,即$link不为空,就输出<h1>Success!!</h1>,显示"Success!!"这个标题。
#如果连接失败,即$link为空,就输出Fail!!,显示"Fail!!"这个信息。

浏览器访问
http://192.168.247.30/index.php

 三、部署 Discuz!社区论坛 Web 应用

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/

#调整论坛目录的权限:
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/

论坛页面访问
http://192.168.247.10/bbs/install/index.php

 

 

 

 

 

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

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

相关文章

实用,3分钟免费生成中小学新生录取查询系统

在新学期开始之际&#xff0c;作为招生负责人&#xff0c;您是否已经做好准备来迎接新学年的招生工作呢&#xff1f;录取新生所需的任务包括成绩信息的录入、招生要求的核对以及新生录取信息的查询公布&#xff0c;这些繁重的工作给负责招生的老师带来了巨大的压力和挑战。 为…

Dockerfile构建LNMP镜像

建立工作目录 [rootlocalhost ~]# mkdir lnmp [rootlocalhost ~]# cd lnmp/ 编写Dockerfile文件 [rootlocalhost lnmp]# vim Dockerfile [rootlocalhost lnmp]# ll 总用量 4 -rw-r--r--. 1 root root 774 8月 3 14:54 Dockerfile [rootlocalhost lnmp]# vim Dockerfile #基础…

2023年华数杯A题

A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热材料 A 纤维…

软件为什么要进行性能压力测试?

软件为什么要进行性能压力测试&#xff1f;随着软件应用的不断增多和复杂度的提高&#xff0c;软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应&#xff0c;给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行&#xff0…

spring-bean的生命周期和怎么配置spring-bean的后置处理器

&#x1f600;前言 本章是spring基于XML 配置bean系类中第6篇讲解spring-bean的生命周期和怎么配置spring-bean的后置处理器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家…

Storm学习之使用官方Docker镜像快速搭建Storm运行环境

文章目录 0.前言搭建完的效果 1.教程1.1.docker 安装 zookeeper1.2. 安装 storm nimbus1.3.docker 安装 supervisor1.4.docker 安装 storm-ui1.5.查看已经启动的容器1.6.提交topology到 storm集群 2.总结3.参考文档 0.前言 Apache Storm 官方也出了Docker 镜像 https://hub.do…

Python3 高级教程 | Python3 CGI编程(二)

目录 一、什么是CGI 二、网页浏览 三、CGI架构图 四、Web服务器支持及配置 五、第一个CGI程序 六、HTTP头部 七、CGI环境变量 八、GET和POST方法 &#xff08;一&#xff09;使用GET方法传输数据 &#xff08;二&#xff09;简单的url实例&#xff1a;GET方法 &#x…

CSPM国标项目管理认证未来值得期待吗?

一、CSPM认证背景信息 CSPM是由全国项目管理标准化技术委员会&#xff08;SAC/TC343&#xff09;和中国国际人才交流基金会&#xff08;原外专局&#xff09;联合发起的项目管理专业认证。 首先&#xff0c;让我们了解下这两个国字号单位的来历。全国项目管理标准化技术委员会…

教你如何轻松做一个生鲜蔬果小程序商城

在现代社会中&#xff0c;生活节奏加快&#xff0c;人们对生鲜蔬果的需求也越来越高。为了方便用户购买生鲜蔬果&#xff0c;无需开发的生鲜蔬果配送小程序应运而生。今天&#xff0c;我们将向大家介绍如何在三分钟内搭建这样一个小程序。 首先&#xff0c;我们需要登录乔拓云平…

React 之 Redux - 状态管理

一、前言 1. 纯函数 函数式编程中有一个非常重要的概念叫纯函数&#xff0c;JavaScript符合函数式编程的范式&#xff0c;所以也有纯函数的概念 确定的输入&#xff0c;一定会产生确定的输出 函数在执行过程中&#xff0c;不能产生副作用 2. 副作用 表示在执行一个函数时&a…

轻松批量文件改名!一键翻译重命名文件夹/文件,省时高效!」

繁忙的数字时代&#xff0c;我们经常需要处理大量的文件和文件夹。而手动逐个更改文件名不仅费时费力&#xff0c;还容易出错。因此&#xff0c;我们为您带来了一款强大的工具——批量文件改名软件&#xff01;现在&#xff0c;您可以一键翻译重命名文件夹和文件&#xff0c;轻…

【设计模式——学习笔记】23种设计模式——访问者模式Visitor(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入要求传统方案 介绍基本介绍应用场景登场角色尚硅谷版本《图解设计模式》版本 案例实现案例一实现拓展 案例二(个人感觉这个案例较好)实现分析拓展一拓展二拓展三 总结额外知识双重分发 文章说明 案例引入 要求 测评系统需求&#xff1a;将观众分为男人和女人…

MySQL数据库——多表操作

文章目录 前言多表关系一对一关系一对多/多对一关系多对多关系 外键约束创建外键约束插入数据删除带有外键约束的表的数据删除外键约束 多表联合查询数据准备交叉连接查询内连接查询外连接查询左外连接查询右外连接查询满外连接查询 子查询子查询关键字ALL 关键字ANY 和 SOME 关…

2023年华数杯数学建模A题思路代码分析 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热…

详解Spring Bean的生命周期

详解Spring Bean的生命周期 Spring Bean的生命周期包括以下阶段&#xff1a; 1. 实例化Bean 对于BeanFactory容器&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚未初始化的依赖时&#xff0c;容器就会调用createBean进…

剑指Offer 05.替换空格

剑指Offer 05.替换空格 目录 剑指Offer 05.替换空格05.替换空格题目代码&#xff08;容易想到的&#xff09;利用库函数的方法题解&#xff08;时间复杂度更低&#xff09;面试&#xff1a;为什么java中String类型是不可变的 05.替换空格 题目 官网题目地址 代码&#xff08;…

【Python小笔记】零碎同步

1.多字段连接&#xff0c;连接字段名不一致–left_on\right_on对应列示后可匹配 import pandas as pd df_A1pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name0) df_A2pd.read_excel(E:\Mercy\data\mytest\A.xlsx,sheet_name1)df_Adf_A1.merge(rightdf_A2,howleft,left_o…

P1775 石子合并(弱化版)(内附封面)

石子合并&#xff08;弱化版&#xff09; 题目描述 设有 N ( N ≤ 300 ) N(N \le 300) N(N≤300) 堆石子排成一排&#xff0c;其编号为 1 , 2 , 3 , ⋯ , N 1,2,3,\cdots,N 1,2,3,⋯,N。每堆石子有一定的质量 m i ( m i ≤ 1000 ) m_i\ (m_i \le 1000) mi​ (mi​≤1000)。…

信号执行流程

信号执行是一种用户态与内核态和来回切换&#xff0c;进程不会一接收到信号&#xff0c;就立刻执行&#xff0c;而是在合适的时候执行信号&#xff0c;&#xff08;手头有重要的事情等等再说。 一般来说都是在从内核态返回用户态的时候检测是否有可执行的信号&#xff08;可执…

超详细|ChatGPT辅助论文降重教程100%降至13%

本文讲述使用ChatGPT对论文进行辅助降重&#xff0c;鼓励大家解放大脑&#xff0c;多思考核心论点 祝看到本教程的小伙伴们都完成论文&#xff0c;顺利毕业。 可以加QQ群交流&#xff0c;一群&#xff1a; 123589938 第一章 ChatGPT指令 1.1 同义词替换 对比分析&#xff0c;…