使用LNMP搭建discuz平台

时间:2023-02-10 15:57:00

discuz官方网站: ​​https://discuz.dismall.com/​

1. Nginx安装和配置

#安装依赖包
[root@Nginx ~]# yum -y install gcc pcre pcre-devel openssl-devel

#下载Nginx源码包,并解压
[root@Nginx ~]# wget -c http://nginx.org/download/nginx-1.22.1.tar.gz -P /usr/src
[root@Nginx ~]# cd /usr/src/
[root@Nginx src]# tar -xf nginx-1.22.1.tar.gz
[root@Nginx src]# cd nginx-1.22.1/

#修改版本号
[root@Nginx ~]# vim /usr/src/nginx-1.22.1/src/core/nginx.h

#新建所需www用户
[root@Nginx ~]#useradd -r -M www -s /sbin/nologin

#预编译
#1检测安装环境,产生Makefile编译引导文件
[root@Nginx nginx-1.22.1]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

#编译
#1通过make编译工具,读Makefile文件
#2将源文件编译成二进制文件
[root@Nginx nginx-1.22.1]#make

#安装
将编译产生的二进制文件安装或拷贝到指定目录
[root@Nginx nginx-1.22.1]#make install
#所以/usr/local/nginx/sbin下的nginx 和/usr/src/nginx-1.22.1/objs下的nginx是同一个文件!

#启动服务
[root@Nginx ~]# /usr/local/nginx/sbin/nginx
#验证服务
[root@Nginx ~]# ps -ef |grep nginx
[root@Nginx ~]# netstat -nltp |grep nginx

2. 安装PHP 7.X

#卸载PHP旧版本;
yum remove php* -y

#安装PHP 7.x源;
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

#安装PHP7.2相关软件包;
yum install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml -y

#查看PHP版本信息;
php -v

3. Nginx和PHP整合

​[root@Nginx ~]# systemctl start php-fpm​

​[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf​

location ~ \.php$ {

#root html; nginx文件目录,这里是相对路径,也可以改成下面的绝对路径

root /usr/local/nginx/html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}


#创建PHP测试页面

vim /usr/local/nginx/html/index.php

<?php

phpinfo();

?>


4. Mysql 8.0 的Yum安装和配置

#检查有无残留版本

rpm -qa |grep mysql

rpm -qa |grep mariadb

如果有,删除

rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps


#查看有无mysql相关的文件

find / -name mysql

如果有,删除

#下载RPM包,用于安装mysql yum源

​wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm​

​wget https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm​

rpm -ivh mysql80-community-release-el7-7.noarch.rpm​


#为避免报错,可以提前把yum源里的gpgcheck关闭

vim /etc/yum.repos.d/mysql-community.repo


#安装mysql

yum -y install mysql-community-server


#获取MySQL 8.0 初始密码

systemctl start mysqld

grep "password" /var/log/mysqld.log

2022-12-14T03:22:41.805036Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Uw)7KsfsS6MS


#修改Mysql初始密码

alter user root@localhost identified with mysql_native_password by 'AAaa@1234';

#默认root用户不能远程登录,需要更新密码信息

update mysql.user set host='%' where user="root";

flush privileges;

为下一步配置discuz做准备:

​mysql> create user discuz@'%' identified with mysql_native_password by 'Discuz@1234';​

​mysql> grant all on discuz.* to discuz@'%';​

5. Discuz 文件部署

官方网站:​​https://discuz.dismall.com/​


#下载后为zip压缩文件,使用 rz -e 上传

​ unzip Discuz_X3.5_SC_UTF8_20221231.zip​


#将解压出的upload下的文件移动到nginx发布目录

​[root@Nginx-Php ~]# mv upload/* /usr/local/nginx/html/​


得到如下界面,按步骤配置即可。

使用LNMP搭建discuz平台

使用LNMP搭建discuz平台

排错:

#查看 data 目录和config目录权限及属主

​ll /usr/local/nginx/html​

使用LNMP搭建discuz平台


#查看php程序属主

使用LNMP搭建discuz平台


#所以,修改 data 目录和config目录的属主即可(o+w授权不安全)。

​[root@Nginx-Php ~]# cd /usr/local/nginx/html/​

​[root@Nginx-Php html]# chown -R apache:apache data/ config/ uc_client/ uc_server/​


使用LNMP搭建discuz平台

6. Mysql 主从配置

Master配置

步骤1:修改配置文件

[root@Master ~]# vim /etc/my.cnf

在 [mysqld] 下增加下面两行:

server-id=1

log-bin=mysql-bin

步骤2:重启mysqld服务

[root@Master ~]# systemctl restart mysqld


步骤3:配置同步账号

create user 'tongbu'@'%' identified with mysql_native_password by 'AAAaaa@1234';

grant replication slave on *.* to 'tongbu'@'%';

步骤4:查看Mater状态及最新的Position

mysql> show master status;

Slave配置

步骤1:修改Slave配置文件

[root@Slave ~]# vim /etc/my.cnf

在 [mysqld] 下增加下面一行:

server-id = 2

步骤2:重启mysqld服务

步骤3:Slave指定Master IP、用户名、密码、bin-log文件名及position

mysql> change master to master_host='192.168.160.22',master_user='tongbu',master_password='AAAaaa@1234',master_log_file='mysql-bi.000001',master_log_pos=157;


步骤4:启动slave

mysql> start slave;


步骤5:查看slave状态

mysql> show slave status \G;

当以下状态均为Yes时表示主从同步状态正常。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

备份Mater数据,还原到Slave

​[root@Master ~]# mysqldump -uroot -pAAaa@1234 --all-databases >all.sql​

​[root@Master ~]# scp all.sql 192.168.160.23:/tmp​

​[root@Slave ~]# mysql -uroot -pAAaa@1234 </tmp/all.sql ​



7. Nginx 负载均衡php-fpm多实例

如果有多个php-fpm实例做负载均衡,需要修改Nginx配置

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

#在server块外面添加upstream

#discuz-SLB为自定义的模块名称

upstream discuz-SLB {

server 192.168.160.21:9000;

server 192.168.160.31:9000;

}


#修改fastcgi配置

location ~ \.php$ {

root /usr/local/nginx/html;

fastcgi_pass discuz-SLB; #引用之前自定义的模块名称

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;


#重启Nginx

[root@Nginx ~]# /usr/local/nginx/sbin/nginx -s reload

#修改两台php-fpm服务器的配置

注意:另外一台php-fpm服务器上也要有/usr/local/nginx/html 发布目录,且内有网站文件和对应权限。

  1. 将listen的IP从127.0.0.1改成0.0.0.0

[root@Nginx ~]# vim /etc/php-fpm.d/www.conf

#listen = 127.0.0.1:9000

listen = 0.0.0.0:9000


  1. 在listen.allowed_clients里添加web服务器的地址

#listen.allowed_clients = 127.0.0.1

listen.allowed_clients = 127.0.0.1,192.168.160.21

  1. 重启php-fpm服务

[root@Nginx ~]# systemctl restart php-fpm


upstream discuz-SLB {
server 192.168.160.21:9000;
server 192.168.160.31:9000;
}


location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass discuz-SLB;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}