分布式部署LNMP,搭建discuz论坛

LNMP 是一种常见的服务器环境配置,用于运行 Web 应用程序。它由 Linux、Nginx、MySQL(或 MariaDB)、PHP 组成。

一、安装数据库

数据库主机(192.168.50.101)安装mysql服务

  1. 将安装mysql 所需软件包传到/opt目录下
  2. 安装环境依赖包
  3. 配置软件模块
  4. 编译及安装
  5. 创建mysql用户
  6. 修改mysql 配置文件
  7. 更改mysql安装目录和配置文件的属主属组
  8. 设置路径环境变量
  9. 初始化数据库
  10. 添加mysqld系统服务
  11. 修改mysql 的登录密码
  12. 授权远程登录
bash 复制代码
--------编译安装mysqld 服务--------
1.将安装mysql 所需软件包传到/opt目录下
mysql-5.7.17.tar.gz
boost_1_59_0.tar.gz		#支持c++的运行库
2.安装环境依赖包
yum -y install \
gcc \
gcc-c++ \
ncurses \				#字符终端下图形互动功能的动态库
ncurses-devel \			#ncurses开发包
bison \					#语法分析器
cmake					#mysql需要用cmake编译安装
----------------------------------------------------------------------------------------------------
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake openssl-devel
3.配置软件模块
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz

cd /opt
mv boost_1_59_0 /usr/local/boost		#重命名
cd /opt/mysql-5.7.17/
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_EXTRA_CHARSETS=all \						#指定支持其他字符集编码
-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=/usr/local/boost \          #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1								#生成便于systemctl管理的文件

存储引擎选项:
MYISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。
静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1
可用的存储引擎值有:ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)
----------------------------------------------------------------------------------------------------
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 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧
4.编译及安装
make && make install

5.创建mysql用户
useradd -M -s /sbin/nologin  mysql

6.修改mysql 配置文件
vim /etc/my.cnf								#删除原配置项,再重新添加下面内容
[client]									#客户端设置
port = 3306
socket = /usr/local/mysql/mysql.sock			

[mysql]										#服务端设置
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash									#开启自动补全功能

[mysqld]									#服务全局设置
user = mysql       							#设置管理用户
basedir=/usr/local/mysql					#指定数据库的安装目录
datadir=/usr/local/mysql/data				#指定数据库文件的存储路径
port = 3306									#指定端口
character-set-server=utf8					#设置服务器字符集编码格式为utf8
pid-file = /usr/local/mysql/mysqld.pid		#指定pid 进程文件路径
socket=/usr/local/mysql/mysql.sock			#指定数据库连接文件
bind-address = 0.0.0.0						#设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开
skip-name-resolve							#禁止域名解析,包括主机名,所以授权的时候要使用 IP 地址
max_connections=4096						#设置mysql的最大连接数
default-storage-engine=INNODB				#指定默认存储引擎
max_allowed_packet=32M						#设置在网络传输中一次消息传输量的最大值。系统默认值为 1MB,最大值是 1GB,必须设置 1024 的倍数。
server-id = 1								#指定服务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

----------------------------------------------------------------------------------------------------
sql_mode常用值如下:
NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

STRICT_TRANS_TABLES
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_AUTO_CREATE_USER
禁止GRANT创建密码为空的用户

NO_AUTO_VALUE_ON_ZERO
mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错

NO_ZERO_IN_DATE
不允许日期和月份为零

NO_ZERO_DATE
mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告

ERROR_FOR_DIVISION_BY_ZERO
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL

PIPES_AS_CONCAT
将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
----------------------------------------------------------------------------------------------------------
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[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=4096
default-storage-engine=INNODB
max_allowed_packet=32M
server-id = 1

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

7.更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

8.设置路径环境变量
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	
source /etc/profile

9.初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \				#生成初始化密码为空
--user=mysql \                      #指定管理用户
--basedir=/usr/local/mysql \        #指定数据库的安装目录
--datadir=/usr/local/mysql/data		#指定数据库文件的存储路径
----------------------------------------------------------------------------------------------------------
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

10.添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/		#用于systemctl服务管理
systemctl daemon-reload         #刷新识别     
systemctl start mysqld.service  #开启服务
systemctl enable mysqld         #开机自启动
netstat -anpt | grep 3306       #查看端口
11.修改mysql 的登录密码
mysqladmin -u root password "123" 	#给root账号设置密码为123,原始密码为空
12.授权远程登录
mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by '123';
#授予root用户可以在所有终端远程登录,使用的密码是123,并对所有数据库和所有表有操作权限

show databases;			#查看当前已有的数据库

二、安装nginx服务

在nginx服务器主机(192.168.50.102)安装nginx服务

bash 复制代码
【安装 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.24.0.tar.gz -C /opt/

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

make && make install

4、优化路径
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 start nginx.service
systemctl enable nginx.service

三、安装php服务

在php主机(192.168.50.103)安装php服务

bash 复制代码
【编译安装 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 gcc gcc-c++ make pcre-devel 
 
2、编译安装
cd /opt
tar xf php-7.1.10.tar.bz2
 
cd php-7.1.10
./configure \
--prefix=/usr/local/php \  #指定将 PHP 程序的安装路径
--with-mysql-sock=/usr/local/mysql/mysql.sock \  ##指定mysql 数据库连接文件的存储路径
--with-mysqli \  #添加 MySQL 扩展支持 #mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定
--with-zlib \  #支持zlib功能,提供数据压缩
--with-curl \  #开启curl扩展功能,实现HTTP的Get下载和Post请求的方法
--with-gd \  #激活gd 库的支持
--with-jpeg-dir \  #激活jpeg 的支持
--with-png-dir \  #激活png 的支持
--with-freetype-dir \  
--with-openssl \
--enable-fpm \
--enable-mbstring \  #启用多字节字符串功能,以便支持中文等代码
--enable-xml \  #支持xml文件,开启扩展性标记语言模块
--enable-session \  #会话
--enable-ftp \  #文本传输协议
--enable-pdo \  #函数库
--enable-tokenizer \  #令牌解释器##通过token做安全认证
--enable-zip  #ZIP压缩格式
 
make && 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.ini	
vim /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.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
 
#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
 
5、启动php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000
 
#PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。
 
##安装包中自带php-fpm.service文件,将其交给systemd进行管理
cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service

四、设置nfs共享目录

php主机(192.168.50.103)通过nfs实现对数据库、nginx主机的资源共享

  1. 先检查各个主机检查是否安装nfs相关软件,并启动服务
bash 复制代码
[root@localhost ~]# rpm -q rpcbind 
rpcbind-0.2.0-47.el7.x86_64
[root@localhost ~]# rpm -q nfs-utils 
nfs-utils-1.3.0-0.61.el7.x86_64
[root@localhost ~]# systemctl enable --now nfs 
#如果rpcbind没启动,需先启动rpcbind,再启动nfs
  1. 数据库服务器设置nfs
bash 复制代码
[root@localhost ~]# vi /etc/exports
/usr/local/mysql 192.168.50.0/24(rw,sync,no_root_squash)

[root@localhost ~]# exportfs -a
[root@localhost ~]# exportfs -v
/usr/local/mysql
		192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
[root@localhost ~]# 
  1. nginx服务器设置nfs
bash 复制代码
[root@localhost html]# vi /etc/exports
/usr/local/nginx/html 192.168.50.0/24(rw,sync,no_root_squash)

[root@localhost html]# exportfs -a
[root@localhost html]# exportfs -v
/usr/local/nginx/html
		192.168.50.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
[root@localhost html]# 
  1. php服务器把其他主机的共享目录挂载到本机
bash 复制代码
[root@localhost ~]# showmount -e 192.168.50.101
Export list for 192.168.50.101:
/usr/local/mysql 192.168.50.0/24
[root@localhost ~]# showmount -e 192.168.50.102
Export list for 192.168.50.102:
/usr/local/nginx/html 192.168.50.0/24
[root@localhost ~]# mkdir -p /usr/local/mysql /usr/local/nginx/html
[root@localhost ~]# mount 192.168.50.101:/usr/local/mysql/ /usr/local/mysql/
[root@localhost ~]# mount 192.168.50.102:/usr/local/nginx/html/ /usr/local/nginx/html/
[root@localhost ~]# df
文件系统                                1K-块     已用     可用 已用% 挂载点
/dev/mapper/centos-root              49250820  5383268 43867552   11% /
devtmpfs                               480884        0   480884    0% /dev
tmpfs                                  497944        0   497944    0% /dev/shm
tmpfs                                  497944    14956   482988    4% /run
tmpfs                                  497944        0   497944    0% /sys/fs/cgroup
/dev/sda1                             1038336   169476   868860   17% /boot
tmpfs                                   99592       40    99552    1% /run/user/0
/dev/sr0                              4480476  4480476        0  100% /run/media/root/CentOS 7 x86_64
192.168.50.101:/usr/local/mysql      45062912 12084736 32978176   27% /usr/local/mysql
192.168.50.102:/usr/local/nginx/html 49250944  5478784 43772160   12% /usr/local/nginx/html
[root@localhost ~]# 

五、修改nginx服务的配置文件

vi /usr/local/nginx/conf/nginx.conf

bash 复制代码
#45行添加index.php 
#65-72行取消注释
#69行下面添加访问脚本路径

六、修改php服务的配置文件

bash 复制代码
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# id nginx
uid=1001(nginx) gid=1001(nginx) 组=1001(nginx)
[root@localhost ~]# cd /usr/local/php/etc/php-fpm.d/
[root@localhost php-fpm.d]# vi www.conf
shell 复制代码
#23,24行设置nginx为用户和组
#36行设置php地址为监听地址
#62行取消注释设置允许nginx的客户端连接到 PHP-FPM

七、测试php动态处理能力

bash 复制代码
[root@localhost ~]# vi /usr/local/nginx/html/index.php 
<?php
phpinfo();
?>
#浏览器访问 192.168.50.102/index.php

八、测试php调用数据库的能力

bash 复制代码
[root@localhost ~]# vi /usr/local/nginx/html/mysql.php 
<?php
$link=mysqli_connect('192.168.50.101','root','123');
if($link) echo "<h1>成功</h1>";
else echo "<h1>失败</h1>"
?>

九、完成discuz论坛部署

准备站点文件,解压,修改文件权限

bash 复制代码
[root@localhost opt]# ls
dir_SC_UTF8  Discuz_X3.4_SC_UTF8.zip  php-7.1.10  php-7.1.10.tar.bz2  说明.htm
[root@localhost opt]# cd dir_SC_UTF8/
[root@localhost dir_SC_UTF8]# ls
readme  upload  utility
[root@localhost dir_SC_UTF8]# chown -R nginx. /usr/local/nginx/html/bbs/
[root@localhost dir_SC_UTF8]# 

数据库创建并设置权限

mysql 复制代码
[root@localhost mysql]#mysql -uroot -p"123"
 
mysql> create database bbs;
 
mysql> grant all on bbs.* to 'admin'@'%' identified by 'admin123';
 
mysql> grant all on bbs.* to 'admin'@'localhost' identified by 'admin123';
 
mysql> flush privileges;
 
mysql> quit;

浏览器访问,进行安装

相关推荐
闲云一鹤7 小时前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
chlk12311 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑11 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件12 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
BingoGo14 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack14 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
深紫色的三北六号21 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql