「学习笔记」CentOS 8 安装和配置 NFS 服务器

网络文件系统(NFS)是一个分布式文件系统协议,它允许你通过网络共享远程文件夹。

NFS 协议默认是不加密的,不提供用户身份鉴别。服务端通过限定客户端的 IP 地址和端口来限制访问。

  • NFS 特点:
    • 基于TCP/IP协议,服务于linux之间资源共享
    • 将远程主机上共享资源挂载到本地目录,使得像使用本地文件一样方便。

1. 建立 NFS 服务器

1.1 安装 NFS 服务端(CentOS8中默认安装了nfs-utils软件包)
  1. 用rpm检查是否有nfs-utils的包已安装:
[root@localhost ~]# rpm -qa | grep nfs-utils
nfs-utils-2.3.3-31.el8.x86_64
  1. 如果没有安装 执行如下命令安装:
[root@localhost ~]# dnf install nfs-utils
  1. 启用并启动 NFS 服务:
[root@localhost ~]# systemctl enable --now nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
  1. 默认情况下,在 CentOS8 上,NFS3 和 NFS4 都可以用,NFS2 被禁用。想要验证,运行下面的cat命令:
[root@localhost ~]# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

NFS 服务器配置选项在/etc/nfsmount.conf/etc/nfs.conf文件中。默认的设置足够满足我们的要求。

「工程实践」Spring Boot 整合 FastDFS

1. 在maven项目pom.xml中添加依赖

<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.27.2</version>
</dependency>

2. 在application.yml中添加配置

#FDFS配置
fdfs:
  so-timeout: 5000 #上传的超时时间
  connect-timeout: 2000 #连接超时时间
  thumb-image:             #缩略图生成参数
    width: 150
    height: 150
  tracker-list:            #TrackerList参数,支持多个
  - 192.168.2.100:22122

3. 编写FastDFS工具类

@Component
public class FastDfsUtil {

    private static ThumbImageConfig thumbImageConfig;
    private static FastFileStorageClient fastFileStorageClient;
    private static FdfsWebServer fdfsWebServer;

    public FastDfsUtil(ThumbImageConfig thumbImageConfig, FastFileStorageClient fastFileStorageClient, FdfsWebServer fdfsWebServer) {
        FastDfsUtil.thumbImageConfig = thumbImageConfig;
        FastDfsUtil.fastFileStorageClient = fastFileStorageClient;
        FastDfsUtil.fdfsWebServer = fdfsWebServer;
    }

    /**
     * @param multipartFile 文件对象
     * @return 返回文件地址
     * @author qbanxiaoli
     * @description 上传文件
     */
    @SneakyThrows
    public static String uploadFile(MultipartFile multipartFile) {
        StorePath storePath = fastFileStorageClient.uploadFile(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);
        return storePath.getFullPath();
    }
    
    // 其他代码...
}

4. 编写测试Controller

@Slf4j
@RestController
public class FileController {
    /**
     * 上传图片并保存
     * @param file
     * @param request
     * @return
     * @throws IOException
     */
    @PostMapping("/upload")
    public Map<String, Object> uploadFile(MultipartFile[] file, HttpServletRequest request) throws IOException {
        Map<String, Object> map = new HashMap<String, Object>();
        if (file != null && file.length > 0) {
            String saveFile = null;
            for (int i = 0; i < file.length; i++) {
                MultipartFile partFile = file[i];
                // 保存文件
                saveFile = FastDfsUtil.uploadFile(partFile);;
                saveFile = "http://192.168.2.100/" + saveFile;
            }
            map.put("data", saveFile);
            map.put("msg", "上传成功");
            log.info(">>>>>>>>>>>>>>>>图片上传成功:" + saveFile);
        } else {
            map.put("msg", "上传失败");
            log.info(">>>>>>>>>>>>>>>>图片上传失败");
        }
        return map;
    }
}

5. 编写前端页面代码

<body>
    <div>
        图片上传:
        <input type="file" name="file" value="" id="input-file" accept="image/png,image/jpeg,image/gif,image/jpg">
    </div>
    <div>
        图片回显:
        <img id="upload-file" src="" alt="" width="300">
    </div>
<script charset="utf-8" type="text/javascript" src="/lib/jquery-3.5.1.min.js"></script>
<script charset="utf-8" type="text/javascript">
$('#input-file').on("change", function() {
    var file = this.files[0];
    var formData = new FormData();
    formData.append('file', file);
    
    // 开始上传
    fileUpload("/upload", formData);

    // 测试读取图片(本地显示)
    var fileReader = new FileReader();
    fileReader.readAsDataURL(file);
    fileReader.onloadend = function(fEvent){
        var src = fEvent.target.result;
        console.log(src);
        $("#upload-file").attr("src", src);
    }
});

function fileUpload(url, formData){
    $.ajax({
        url: url,
        type: 'POST',
        cache: false,
        data: formData,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (res) {
            console.log(res);
        },
        error: function (xhr, type, errorThrown) {
            console.log("照片上传失败")
        }
    });
}
</script>

6. 浏览器访问页面测试

/articles/2020/spring_boot_fastdfs/up-83d0d727e478c0a4832f661f79076b4128d.webp

「学习笔记」Centos8 安装 FastDFS 6.06

FastDFS是一款开源的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。

FastDFS为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性。FastDFS可以看做是基于文件的key value存储系统,key为文件ID,value为文件内容,因此称作分布式文件存储服务更为合适。

  • FastDFS特点如下:
    1. 分组存储,简单灵活;
    2. 对等结构,不存在单点;
    3. 文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server或meta server;
    4. 大、中、小文件均可以很好支持,可以存储海量小文件;
    5. 一台storage支持多块磁盘,支持单盘数据恢复;
    6. 提供了nginx扩展模块,可以和nginx无缝衔接;
    7. 支持多线程方式上传和下载文件,支持断点续传;
    8. 存储服务器上可以保存文件附加属性。

【官方GitHub地址】

1. 准备安装文件

  • 安装文件:fastdfs,libfastcommon,fastdfs-nginx-module
  • 文件存放位置:/usr/local/src
cd /usr/local/src
wget -c "https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz" -O fastdfs-6.06.tar.gz
wget -c "https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz" -O libfastcommon-1.0.43.tar.gz
wget -c "https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz" -O fastdfs-nginx-module-1.22.tar.gz
wget -c http://nginx.org/download/nginx-1.18.0.tar.gz

2. 编译安装

准备编译环境

「学习笔记」Centos8安装部署Node+MongDB+YApi(接口管理)

YApi:权限管理、Mock服务、可视化接口管理、数据导入(支持postman),其依赖NodeJS+MongDB。

1. 安装NodeJS

  1. 下载NodeJS稳定版14.15.1
[root@localhost ~]# mkdir -p /local/node-server
[root@localhost ~]# cd /local/node-server
[root@localhost node-server]# wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
  1. 解压下载好的node包到安装目录下
[root@localhost node-server]# tar xvf node-v14.15.1-linux-x64.tar.xz
  1. node -v查看版本号
[root@localhost node-server]# node -v
bash: node: 未找到命令...
[root@localhost node-server]# /local/node-server/node-v14.15.1-linux-x64/bin/node -v
v14.15.1
  1. 创建软链接,就可以全局使用node和npm命令
[root@localhost node-server]# ln -s /local/node-server/node-v14.15.1-linux-x64/bin/node /usr/local/bin/node
[root@localhost node-server]# ln -s /local/node-server/node-v14.15.1-linux-x64/bin/npm /usr/local/bin/npm
[root@localhost node-server]# node -v
v14.15.1
[root@localhost node-server]# npm -v
6.14.8

2. 安装MongDB

  1. 创建yum源文件
[root@localhost ~]# vim /etc/yum.repos.d/mongodb-org-4.2.repo
# 输入如下内容
[mongodb-org-4.2]  
name=MongoDB Repository  
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/  
gpgcheck=1  
enabled=1  
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
  1. 安装mongodb
[root@localhost ~]# yum -y install mongodb-org
  1. 查看安装目录
[root@localhost ~]# whereis mongod
mongod: /usr/bin/mongod /etc/mongod.conf /usr/share/man/man1/mongod.1
  1. 编辑配置文件/etc/mongod.conf(根据自己需要进行修改bindip地址,可监听127.0.0.1或内网地址。如果需要绑定多个ip )
[root@localhost ~]# vim /etc/mongod.conf
bindIp: 127.0.0.1,192.168.2.101
  1. 启动Mongodb
# 启动mongodb
systemctl start mongod.service

# 停止mongodb
systemctl stop mongod.service

# 查询 mongodb 状态:
systemctl status mongod.service

# 设置为开机启动
systemctl enable mongod.service

如果在不同服务器下访问或者修改端口需要配置防火墙或者阿里云服务器安全组件 默认为27017 如修改可在/etc/mongod.conf下修改端口, 到此安装完成。

「学习笔记」Linux - Shell脚本部署Java应用

Shell脚本部署Java应用

1. 根据PID获取进程信息

#!/bin/bash
#
# Function: 根据用户输入的PID,过滤出该PID所有的信息
#

read -p "请输入要查询的PID: " P
n=`ps -aux| awk '$2~/^'$P'$/{print $11}'|wc -l`
if [ $n -eq 0 ];then
 echo "该PID不存在!"
 exit
fi
echo "--------------------------------"
echo "进程PID: $P"
echo "进程命令:`ps -aux| awk '$2~/^'$P'$/{print $11}'`"
echo "进程所属用户: `ps -aux| awk '$2~/^'$P'$/{print $1}'`"
echo "CPU占用率:`ps -aux| awk '$2~/^'$P'$/{print $3}'`%"
echo "内存占用率:`ps -aux| awk '$2~/^'$P'$/{print $4}'`%"
echo "进程开始运行的时刻:`ps -aux| awk '$2~/^'$P'$/{print $9}'`"
echo "进程运行的时间:`ps -aux| awk '$2~/^'$P'$/{print $10}'`"
echo "进程状态:`ps -aux| awk '$2~/^'$P'$/{print $8}'`"
echo "进程虚拟内存:`ps -aux| awk '$2~/^'$P'$/{print $5}'`"
echo "进程共享内存:`ps -aux| awk '$2~/^'$P'$/{print $6}'`"
echo "--------------------------------"

若执行出现权限不够,为shell文件增加执行权限:chmod +x test.sh

0%