目录
[1、导入Discuz! X3.5 论坛系统的官方安装包压缩文件](#1、导入Discuz! X3.5 论坛系统的官方安装包压缩文件)
一、概述
NFS是Network File System的缩写,默认监听2049端口号。它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录 挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;NFS一般用来存储共享视频,图片等静态数据。
NFS分为服务端和客户端(C/S架构)。服务端提供共享目录或文件,客户端对服务端共享的目录或文件挂载后,就可以读取到服务端提供的文件或目录,在客户端看来就像访问本地一样。
RPC,远程过程调用协议。可以通过网络从远程主机程序上请求服务,而不需要了解底层网络技术。最重要的功能是远程连接、端口注册。使用UDP的111端口监听客户请求。
NFS挂载原理

NFS工作原理
NFS服务端和客户端之间通过随机选择端口来传输数据,NFS服务端利用RPC协议与客户端进行沟通决定使用的随机端口,然后利用这个端口来传输数据,使用的随机端口通常小于1024。RPC协议用来统一管理NFS的随机端口,其使用的端口默认为111。
RPC与NFS通讯过程
-
首先服务器端启动RPC服务,并开启111端口
-
服务器端启动NFS服务,并向RPC注册端口信息
-
客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
-
服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
-
客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
二、NFS服务安装与启停
NFS服务安装
[root@nginx1 ~]# yum install -y nfs-utils
NFS服务启停
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl stop nfs
[root@localhost ~]# systemctl enable --now nfs
三、NFS服务配置文件
[root@localhost ~]# cat /etc/nfs.conf
# 这是一个NFS服务器的配置文件
# This is a general configuration for the NFS daemons and tools
#[general]
# pipefs-directory=/var/lib/nfs/rpc_pipefs # 设置RPC管道文件系统的目录
#[exportfs]
# debug=0 # 设置导出时的调试级别为0
#[gssd]
# verbosity=0 # 设置GSSAPI的日志级别为0
# rpc-verbosity=0 # 设置RPC日志级别为0
# use-memcache=0 # 是否使用内存缓存,这里设置为0,不使用
# use-machine-creds=1 # 是否使用机器凭证,这里设置为1,使用
# avoid-dns=1 # 是否避免DNS查找,这里设置为1,避免
# limit-to-legacy-enctypes=0 # 是否限制使用旧的对等体类型,这里设置为0,不限制
# context-timeout=0 # 设置上下文超时时间为0,即无超时时间
# rpc-timeout=5 # 设置RPC超时时间为5秒
# keytab-file=/etc/krb5.keytab # 指定Kerberos的keytab文件路径
# cred-cache-directory= # 凭证缓存目录为空,可能这个配置项被注释掉了或者不存在
# preferred-realm= # 首选领域为空,可能是默认的领域值
#[lockd]
# port=0 # 锁管理器监听的端口为0,可能未配置或默认值
# udp-port=0 # UDP端口为0,可能未配置或默认值
#[mountd]
# debug=0 # 挂载时的调试级别为0
# manage-gids=n # 是否管理组ID,这里设置为n,不管理
# descriptors=0 # 描述符数量为0,可能未配置或默认值
#[nfsdcltrack]
# debug=0 # NFS数据流跟踪的调试级别为0
# storagedir=/var/lib/nfs/nfsdcltrack # 数据存储目录为空,可能这个配置项被注释掉了或者不存在
#[nfsd]
# debug=0 # NFS服务的调试级别为0
# threads=8 # 并发线程数为8,可以提供更高的性能
# host= # 主机的IP地址或域名,这里为空,可能是默认值或未配置
#[statd]
# debug=0 # 设置statd服务的调试级别为0,即不进行调试
# port=0 # 设置statd服务的监听端口为0,可能表示默认值或未配置
# outgoing-port=0 # 设置statd服务发送数据的端口为0,可能表示默认值或未配置
# name= # 设置statd服务的名称为空,可能表示默认值或未配置
# state-directory-path=/var/lib/nfs/statd # 设置statd服务的状态目录路径为/var/lib/nfs/statd
# ha-callout= # 设置高可用调用为空,可能表示未配置
# no-notify=0 # 设置是否禁用通知为0,即不禁用通知
#[sm-notify]
# debug=0 # 设置sm-notify服务的调试级别为0,即不进行调试
# force=0 # 设置是否强制发送通知为0,即不强制发送
# retry-time=900 # 设置发送通知请求的延迟时间为900秒
# outgoing-port= # 设置发送数据的端口为空,可能表示默认值或未配置
# outgoing-addr= # 设置发送数据的地址为空,可能表示默认值或未配置
# lift-grace=y # 设置是否解除宽限期为y,即解除宽限期
四、NFS文件共享配置文件
[root@localhost ~]# cat /etc/exports
###默认是空的
配置参数说明
参数 | 作用 |
---|---|
ro | 只读 |
rw | 读写 |
root_squash | 当以root身份访问时,映射为NFS服务端的匿名用户 |
no_root_squash | 当以root身份访问时,映射为NFS服务端的root用户 |
all_squash | 无论使用什么账户访问,均映射为NFS服务端的匿名用户 |
sync | 同时将数据写入内存和硬盘中,保证不丢失数据 |
async | 先将数据写入内存,然后写入硬盘中,可能会造成数据丢失 |
五、命令解析
命令字 | 选项 | 作用 |
---|---|---|
exportfs | -d | 开启调试模式。有效的调试类型包括:all, auth, call, general 和 parse。在/etc/nfs.conf的[exportfs]部分中设置debug=也可以开启调试模式。 |
-a | 导出或取消导出所有目录。 | |
-o | 指定一个与exports(5)文件中的导出选项列表相同的选项列表。 | |
-i | 忽略/etc/exports文件和/etc/exports.d目录下的文件,仅使用命令行中给出的默认选项和选项。 | |
-r | 重导出所有目录,将/var/lib/nfs/etab与/etc/exports和/etc/exports.d下的文件同步。该选项会删除来自/var/lib/nfs/etab中已从/etc/exports或/etc/exports.d下的文件的删除条目,并删除内核导出表中已不再有效的条目。 | |
-u | 取消导出一个或多个目录。 | |
-f | 如果/proc/fs/nfsd或/proc/fs/nfs被挂载,则将内核的导出表中的所有内容清除。活跃客户端的新的内核导出表条目是由rpc.mountd在它们下次发出NFS挂载请求时添加的。 | |
-v | 显示详细信息。在导出或取消导出时,显示正在进行的事情。在显示当前导出列表时,还会显示导出选项列表。 | |
-s | 显示适合/etc/exports的当前导出列表 | |
shoumount | showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ] | |
-a | 列出客户端主机名或IP地址以及以主机目录格式表示的挂载目录。 | |
-d | 仅列出由客户端挂载的目录。 | |
-e | 显示NFS服务器的导出列表。(常用) | |
-h | 提供简短的帮助摘要。 | |
-v | 报告程序的当前版本号。 |
六、客户端访问
#####查看nfs服务器192.168.115.128的共享目录
[root@localhost ~]# showmount -e 192.168.115.128
七、客户端挂载
####手动挂载##
[root@localhost ~]# mount 192.168.115.128:/nfsdir /mnt
###自动挂载,建议启动挂载NFS文件系统的主机前,先去查看NFS服务器是否能够正常提供服务!!##
[root@localhost ~]# vim /etc/fstab
192.168.115.128:/nfsdir /mnt nfs4 defaults 0 0
##重载systemd
[root@localhost ~]# systemctl daemon-reload
###测试挂载####
[root@localhost ~]# mount -a
####查看挂载###
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 7.6M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 116G 1.9G 114G 2% /
/dev/sda1 xfs 497M 131M 367M 27% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
192.168.115.111:/nfsdir nfs4 116G 1.9G 114G 2% /mnt
实战案例
部署NFS文件存储及discuz论坛应用
NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储)
文件系统级别的存储,本身就是一个做好的文件系统,通过nfs接口在用户空间输出后,客户端基于内核模块与远程主机进行网络通信,把它转为好像本地文件系统一样来使用,这种存储服务是没办法对它再一次格式化创建文件系统块的
操作前准备
准备三台OpenEuler虚拟机(ip分别为192.168.58.180、192.168.58.182、192.168.58.183)
从官方网站下载Discuz! X3.5 论坛系统的官方安装包压缩文件
一、挂载nfs共享目录
1、部署nfs服务器
####192.168.58.180
##安装nfs-utils、mysql-server服务
[root@bogon ~]# yum install -y nfs-utils mysql-server
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# systemctl start nfs
##修改主机名
[root@bogon ~]# hostnamectl set-hostname nfs-server
[root@bogon ~]# bash
Welcome to 6.6.0-79.0.0.84.oe2403sp1.x86_64
System information as of time: 2025年 07月 09日 星期三 21:57:34 CST
System load: 0.06
Memory used: 7.8%
Swap used: 0%
Usage On: 5%
IP address: 192.168.58.180
Users online: 1
##修改配置文件,设置192.168.58.0/24网段能访问的目录位置
[root@nfs-server ~]# vim /etc/exports
/home/data 192.168.58.0/24(rw,sync,no_root_squash)
##创建共享目录
[root@nfs-server ~]# mkdir /home/data
##开启动态管理共享目录
[root@nfs-server ~]# exportfs -arv
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.58.0/24:/home/data".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
exporting 192.168.58.0/24:/home/data
[root@nfs-server ~]# cd /home/data/
##创建一个PHP网站页面
[root@nfs-server data]# vim index.html
<?php
phpinfo();
?>
[root@nfs-server data]# mv index.html index.php
2、部署nfs客户端
####192.168.58.182
##安装 nfs-utils、mysql-server
[root@bogon ~]# yum install -y nfs-utils mysql-server
[root@bogon ~]# systemctl stop firewalld
##查看nfs服务器192.168.58.180的共享目录
[root@bogon ~]# showmount -e 192.168.58.180
Export list for 192.168.58.180:
/home/data 192.168.58.0/24
##手动挂载
[root@bogon ~]# mount 192.168.58.180:/home/data /mnt/
[root@bogon ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 69G 3.1G 62G 5% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
efivarfs 256K 51K 201K 21% /sys/firmware/efi/efivars
tmpfs 675M 9.1M 666M 2% /run
tmpfs 1.7G 0 1.7G 0% /tmp
/dev/nvme0n1p2 974M 248M 659M 28% /boot
/dev/nvme0n1p1 599M 6.1M 593M 2% /boot/efi
/dev/mapper/openeuler-home 119G 40K 113G 1% /home
192.168.58.180:/home/data 119G 0 113G 0% /mnt
##在本机/mnt/目录下可以查看到nfs服务器的共享目录内容
##安装nginx服务,实现网站服务
[root@bogon ~]# yum install -y nginx
##重新挂载在nginx服务的目录下手动挂载
[root@bogon ~]# umount /mnt/
[root@bogon ~]# mount 192.168.58.180:/home/data /usr/share/nginx/html/
[root@bogon ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 69G 3.1G 62G 5% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
efivarfs 256K 51K 201K 21% /sys/firmware/efi/efivars
tmpfs 675M 9.1M 666M 2% /run
tmpfs 1.7G 0 1.7G 0% /tmp
/dev/nvme0n1p2 974M 248M 659M 28% /boot
/dev/nvme0n1p1 599M 6.1M 593M 2% /boot/efi
/dev/mapper/openeuler-home 119G 40K 113G 1% /home
192.168.58.180:/home/data 119G 0 113G 0% /usr/share/nginx/html
[root@bogon ~]# systemctl start nginx
##修改主机名
[root@bogon ~]# hostnamectl set-hostname lnmp-web1
[root@bogon ~]# bash
Welcome to 6.6.0-79.0.0.84.oe2403sp1.x86_64
System information as of time: 2025年 07月 09日 星期三 22:05:24 CST
System load: 0.01
Memory used: 7.2%
Swap used: 0%
Usage On: 5%
IP address: 192.168.58.182
Users online: 1
##修改mysql数据库配置文件
[root@lnmp-web1 ~]# vim /etc/my.cnf
##在最后加上
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 密码验证方式
default_authentication_plugin=mysql_native_password
##安装php、php-mysqlnd、php-fpm
[root@lnmp-web1 ~]# yum install -y php php-mysqlnd php-fpm
[root@lnmp-web1 ~]# systemctl start php-fpm
[root@lnmp-web1 ~]# systemctl restart nginx
[root@lnmp-web1 php-fpm]# systemctl start mysqld
3、部署nfs客户端
####192.168.58.183
##安装 nfs-utils、mysql-server
[root@bogon ~]# yum install -y nfs-utils mysql-server
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# yum install -y nginx
##查看nfs服务器192.168.58.180的共享目录
[root@bogon ~]# showmount -e 192.168.58.180
Export list for 192.168.58.180:
/home/data 192.168.58.0/24
##手动挂载
[root@bogon ~]# mount 192.168.58.180:/home/data /usr/share/nginx/html/
[root@bogon ~]# df -h
文件系统 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root 69G 3.1G 62G 5% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
efivarfs 256K 51K 201K 21% /sys/firmware/efi/efivars
tmpfs 675M 9.1M 666M 2% /run
tmpfs 1.7G 0 1.7G 0% /tmp
/dev/nvme0n1p2 974M 248M 659M 28% /boot
/dev/nvme0n1p1 599M 6.1M 593M 2% /boot/efi
/dev/mapper/openeuler-home 119G 40K 113G 1% /home
192.168.58.180:/home/data 119G 0 113G 0% /usr/share/nginx/html
[root@bogon ~]# systemctl start nginx
##修改主机名
[root@bogon ~]# hostnamectl set-hostname lnmp-web2
[root@bogon ~]# bash
Welcome to 6.6.0-79.0.0.84.oe2403sp1.x86_64
System information as of time: 2025年 07月 09日 星期三 22:08:45 CST
System load: 0.00
Memory used: 7.2%
Swap used: 0%
Usage On: 5%
IP address: 192.168.58.183
Users online: 1
##修改mysql数据库配置文件
[root@lnmp-web2 ~]# vim /etc/my.cnf
##在最后加上
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 密码验证方式
default_authentication_plugin=mysql_native_password
##安装php、php-mysqlnd、php-fpm
[root@lnmp-web2 ~]# yum install -y php php-mysqlnd php-fpm
[root@lnmp-web2 ~]# systemctl start php-fpm
[root@lnmp-web2 ~]# systemctl restart nginx
[root@lnmp-web2 ~]# systemctl start mysqld
4、测试结果
访问192.168.58.182和192.168.58.183显示

5、挂载nfs共享目录访问本地数据库
配置网页访问本地数据库文件
####192.168.58.180
##编辑新的网页文件
[root@nfs-server data]# vim /home/data/mysql_conn.php
<?php
$link = mysqli_connect('localhost','root','');
if ($link) {
echo "connect successful";
}
else{
echo "connect faile";
}
mysqli_close($link);
?>
6、测试结果
访问192.168.58.182/mysql_conn.php和192.168.58.183/mysql_conn.php显示

二、配置网页discuz论坛应用
1、导入Discuz! X3.5 论坛系统的官方安装包压缩文件
####192.168.58.180
##导入Discuz_X3.5_SC_UTF8_20240520.zip压缩包
[root@nfs-server ~]# cd /home/data
[root@nfs-server data]# ls
index.php mysql_conn.php
[root@nfs-server data]# yum install -y lrzsz
[root@nfs-server data]# rz
rz waiting to receive.**[root@nfs-server data]# ls
Discuz_X3.5_SC_UTF8_20240520.zip index.php mysql_conn.php
##压缩包解压
[root@nfs-server data]# unzip Discuz_X3.5_SC_UTF8_20240520.zip
[root@nfs-server data]# ls
Discuz_X3.5_SC_UTF8_20240520.zip index.php LICENSE mysql_conn.php qqqun.png readme readme.html upload utility.html
[root@nfs-server data]# cd upload
[root@nfs-server upload]# ls
admin.php archiver crossdomain.xml forum.php index.php misc.php robots.txt static uc_server
api config data group.php install plugin.php search.php template
api.php connect.php favicon.ico home.php member.php portal.php source uc_client
##更改文件属主
[root@nfs-server upload]# chown apache -R ./
[root@nfs-server upload]# ls -l
总计 108
-rw-r--r-- 1 apache root 2869 2024年 5月20日 admin.php
drwxr-xr-x 10 apache root 4096 2024年 5月20日 api
-rw-r--r-- 1 apache root 727 2024年 5月20日 api.php
drwxr-xr-x 2 apache root 4096 2024年 5月20日 archiver
drwxr-xr-x 2 apache root 4096 2024年 5月20日 config
-rw-r--r-- 1 apache root 1040 2024年 5月20日 connect.php
-rw-r--r-- 1 apache root 106 2024年 5月20日 crossdomain.xml
drwxr-xr-x 12 apache root 4096 2024年 5月20日 data
-rw-r--r-- 1 apache root 5558 2024年 5月20日 favicon.ico
-rw-r--r-- 1 apache root 2357 2024年 5月20日 forum.php
-rw-r--r-- 1 apache root 906 2024年 5月20日 group.php
-rw-r--r-- 1 apache root 1325 2024年 5月20日 home.php
-rw-r--r-- 1 apache root 6920 2024年 5月20日 index.php
drwxr-xr-x 5 apache root 4096 2024年 5月20日 install
-rw-r--r-- 1 apache root 998 2024年 5月20日 member.php
-rw-r--r-- 1 apache root 2410 2024年 5月20日 misc.php
-rw-r--r-- 1 apache root 1790 2024年 5月20日 plugin.php
-rw-r--r-- 1 apache root 1086 2024年 5月20日 portal.php
-rw-r--r-- 1 apache root 639 2024年 5月20日 robots.txt
-rw-r--r-- 1 apache root 1755 2024年 5月20日 search.php
drwxr-xr-x 10 apache root 4096 2024年 5月20日 source
drwxr-xr-x 7 apache root 4096 2024年 5月20日 static
drwxr-xr-x 3 apache root 4096 2024年 5月20日 template
drwxr-xr-x 8 apache root 4096 2024年 5月20日 uc_client
drwxr-xr-x 13 apache root 4096 2024年 5月20日 uc_server
2、进入数据库创建用户及赋予权限
####192.168.58.182
[root@lnmp-web1 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.42 Source distribution
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
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> create user ultrax@127.0.0.1 identified by '123.com';
Query OK, 0 rows affected (0.04 sec)
mysql> grant all on ultrax.* to ultrax@127.0.0.1;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
####192.168.58.183
[root@lnmp-web2 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.42 Source distribution
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
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> create user ultrax@127.0.0.1 identified by '123.com';
Query OK, 0 rows affected (0.03 sec)
mysql> grant all on ultrax.* to ultrax@127.0.0.1;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
3、网站访问图形化安装
网站访问192.168.58.183/upload
1、同意

2、取消

3、下一步

4、下一步

5、创建数据库

6、完成论坛安装

网站访问192.168.58.182/upload,访问失败,把192.168.58.183创建的库文件拷给192.168.58.182
####192.168.58.183
[root@lnmp-web2 ~]# mysqldump --databases ultrax > ultrax.sql
[root@lnmp-web2 ~]# scp ultrax.sql 192.168.58.182:/root
The authenticity of host '192.168.58.182 (192.168.58.182)' can't be established.
ED25519 key fingerprint is SHA256:MLxF58+VVC/Hxl5/cFvqToS1pVkPMVDruVAYkzCSOc4.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.58.182' (ED25519) to the list of known hosts.
Authorized users only. All activities may be monitored and reported.
root@192.168.58.182's password:
ultrax.sql 100% 2224KB 15.3MB/s 00:00
####192.168.58.182
[root@lnmp-web1 ~]# ls
anaconda-ks.cfg ultrax.sql
[root@lnmp-web1 ~]# mysql < ultrax.sql
网站再次访问192.168.58.182/upload,访问成功
查看服务器生成了两个文件
####192.168.58.180
##网页安装后生成两个新文件
[root@nfs-server upload]# cd config
[root@nfs-server config]# ls
config_global_default.php config_ucenter_default.php index.htm
config_global.php config_ucenter.php