当前位置: 首页 > news >正文

FastDFS安装并整合Openresty

FastDFS安装并整合Openresty

  • 一、安装环境准备【CentOS7.9】
  • 二、FastDFS--tracker安装
    • 2.1.下载fastdfs
    • 2.2.FastDFS安装环境
    • 2.3.安装FastDFS依赖libevent库
    • 2.4.安装libfastcommon
    • 2.5.安装 libserverframe 网络框架
    • 2.6.tracker编译安装
    • 2.7.安装之后文件目录介绍
    • 2.8.错误处理
    • 2.9.配置FastDFS跟踪器(Tracker)
      • 2.9.1.FastDFS 配置文件详解
      • 2.9.2.备份tracker配置文件并修改
      • 2.9.3.创建tracker基础数据目录
      • 2.9.4.防火墙放行端口
      • 2.9.5.初次成功启动
    • 2.10.启动
  • 三、FastDFS--storage安装
    • 3.1.安装libevent
    • 3.2.安装libfastcommon
    • 3.3.storage编译安装
    • 3.4.配置 FastDFS 存储 (Storage)
      • 3.4.1.备份storage配置文件并修改
      • 3.4.2.创建Storage基础数据目录,对应base_path目录
      • 3.4.3.防火墙放行端口
      • 3.4.4.初次启动
    • 3.5.启动
    • 3.6.查看Storage和Tracker是否在通信
    • 3.7.Storage 目录
  • 四、FastDFS 服务启动、停止、重启设置
    • 4.1.创建文件夹管理脚本
    • 4.2.编辑启动脚本文件 startFastDFS.sh
    • 4.3.编辑停止脚本文件 stopFastDFS.sh
    • 4.4.编辑重启脚本文件 restartFastDFS.sh
    • 4.5.FastDFS安装成系统服务
    • 4.6.fastdfs常用命令
  • 五、上传图片测试:通过fdfs_test程序
    • 5.1.FastDFS安装成功可通过`/usr/bin/fdfs_test`测试上传、下载等操作
    • 5.2.修改/etc/fdfs/client.conf
    • 5.3.上传文件使用格式
    • 5.4.打印如下日志
    • 5.5.下载路径
  • 六、FastDFS 和nginx整合
    • 6.1.nginx代理
    • 6.2.在Storage上安装openresty
      • 6.2.1.下载fastdfs-nginx-module模块
      • 6.2.2.修改config文件将/usr/local/路径改为/usr/
      • 6.2.3.将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
      • 6.2.4.修改`mod_fastdfs.conf`的内容
      • 6.2.5.openresty安装【添加fastdfs-nginx-module模块】
      • 6.2.6.编辑nginx配置文件nginx.conf
    • 6.3.访问测试
      • 6.3.1.访问storage:
      • 6.3.2.访问tracker:
      • 6.3.3.使用域名访问 (推荐):
    • 6.4.测试上传图片
    • 6.5.访问图片预览效果【success】
  • endl

一、安装环境准备【CentOS7.9】

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
libfastcommon-1.0.72.tar.gz
libserverframe-1.2.2.tar.gz
fastdfs-6.11.0.tar.gz
openresty/1.25.3.1
fastdfs-nginx-module-1.24.tar.gz

二、FastDFS–tracker安装

分别在192.168.229.141和192.168.229.142上安装tracker
注:初次安装可只安装一台tracker方便调试

2.1.下载fastdfs

tracker和storage使用相同的安装包,下载地址:https://github.com/happyfish100/FastDFS

在这里插入图片描述

2.2.FastDFS安装环境

FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7.9作为安装环境。

安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc

yum install gcc-c++

2.3.安装FastDFS依赖libevent库

yum -y install libevent

2.4.安装libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

下载地址:https://github.com/happyfish100/libfastcommon
在这里插入图片描述

将libfastcommon-1.0.72.tar.gz拷贝至/usr/local/下

cd /usr/localtar -zxvf libfastcommon-1.0.72.tar.gzcd libfastcommon-1.0.72./make.sh./make.sh installcd /usr/lib

在这里插入图片描述

安装完成之后查看相关文件,默认情况下:
头文件安装在/usr/include/fastcommon目录下
动态库安装在/usr/lib64//usr/lib/目录下

2.5.安装 libserverframe 网络框架

安装包下载地址:https://github.com/happyfish100/libserverframe
在这里插入图片描述

cd /usr/localtar -zxvf libserverframe-1.2.2.tar.gzcd libserverframe-1.2.2./make.sh ./make.sh install

2.6.tracker编译安装

将fastdfs-6.11.0.tar.gz拷贝至/usr/local/下

cd /usr/localtar -zxvf fastdfs-6.11.0.tar.gzcd fastdfs-6.11.0./make.sh./make.sh install

在这里插入图片描述

安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下

cp /usr/local/fastdfs-6.11.0/conf/* /etc/fdfs/

在这里插入图片描述

2.7.安装之后文件目录介绍

安装之后,工具安装在/usr/bin/目录下:fdfs_delete_file:删除文件
fdfs_download_file:下载文件
fdfs_upload_file:上传文件
fdfs_trackerd:启动tracker服务
fdfs_storaged:启动storage服务
fdfs_file_info:用来检查一个文件的信息,参数传递一个FastDFS文件
[root@localhost fastdfs-6.11.0]# ls /usr/bin/fdfs_*
/usr/bin/fdfs_appender_test  	 /usr/bin/fdfs_crc32          /usr/bin/fdfs_file_info            
/usr/bin/fdfs_storaged  		/usr/bin/fdfs_trackerd
/usr/bin/fdfs_appender_test1  	/usr/bin/fdfs_delete_file    /usr/bin/fdfs_monitor              
/usr/bin/fdfs_test      		/usr/bin/fdfs_upload_appender
/usr/bin/fdfs_append_file     	/usr/bin/fdfs_download_file  /usr/bin/fdfs_regenerate_filename  
/usr/bin/fdfs_test1     		/usr/bin/fdfs_upload_file
配置文件默认安装在/etc/fdfs/目录下:
client.conf.sample:客户端默认配置文件
storage.conf.sample:storage服务默认配置文件
storage_ids.conf.sample:
tracker.conf.sample:tracker服务默认配置文件
[root@localhost fastdfs-6.11.0]# ls /etc/fdfs
anti-steal.jpg  client.conf  http.conf  mime.types  storage.conf  storage_ids.conf  tracker.conf

动态库文件分别安装在/usr/lib/目录和/usr/lib64/目录下

在这里插入图片描述

2.8.错误处理

[root@localhost fastdfs-6.11.0]# ./make.sh
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../common -I/usr/local/include
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c  -I../common -I../tracker -I/usr/include/fastcommon
In file included from ../common/fdfs_global.c:21:0:
../common/fdfs_global.h:17:26: 致命错误:sf/sf_global.h:没有那个文件或目录#include "sf/sf_global.h"^
编译中断。
make: *** [../common/fdfs_global.o] 错误 1

在这里插入图片描述

原因:在安装较新版得 fastdfs 时,从github 下载得安装包缺少文件,缺少了 libserverframe 网络框架

解决方法:`安装 libserverframe 网络框架``

安装包下载地址:https://github.com/happyfish100/libserverframe
在这里插入图片描述

cd /usr/localtar -zxvf libserverframe-1.2.2.tar.gzcd libserverframe-1.2.2./make.sh ./make.sh install

安装完成后重新编译 fastdfs

2.9.配置FastDFS跟踪器(Tracker)

2.9.1.FastDFS 配置文件详解

FastDFS 配置文件详解:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1

2.9.2.备份tracker配置文件并修改

cd /etc/fdfs# 备份tracker配置文件
cp tracker.conf tracker.conf.bak# 修改文件
vi tracker.conf
# 配置文件是否不生效,false 为生效
disabled=false# 提供服务的端口
port=22122# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
#base_path = /opt/fastdfs
#base_path=/home/fastdfs/Tracker
base_path = /home/fastdfs# HTTP 服务端口 默认8080 ,建议修改 防止冲突
#http.server_port = 8080
http.server_port = 80

2.9.3.创建tracker基础数据目录

# 创建tracker基础数据目录,即base_path对应的目录
mkdir -p /home/fastdfs

2.9.4.防火墙放行端口

# 检查端口号是否被占用
netstat -apn | grep 22122# 防火墙放行端口(默认的22122)
firewall-cmd --zone=public --add-port=22122/tcp --permanent# 配置立即生效
firewall-cmd --reload# 查询开放端口
firewall-cmd --list-ports

2.9.5.初次成功启动

初次成功启动,会在 /home/fastdfs/ (配置的base_path)下创建 data、logs 两个目录

[root@localhost fdfs]# ls /home/fastdfs/
data  logs
${base_path}
|__data
| |__storage_groups.dat:存储分组信息
| |__storage_servers.dat:存储服务器列表
|__logs
| |__trackerd.log: tracker server 日志文件

2.10.启动

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop# 检查是否启动
ps aux | grep fdfs*

三、FastDFS–storage安装

分别在192.168.229.143、192.168.229.144、192.168.229.145、192.168.229.146上安装storage

注:初次安装可只安装一台storage方便调试。

3.1.安装libevent

同上

3.2.安装libfastcommon

同上

3.3.storage编译安装

同tracker编译安装

3.4.配置 FastDFS 存储 (Storage)

3.4.1.备份storage配置文件并修改

cd /etc/fdfs# 备份storage配置文件
cp storage.conf storage.conf.bakvi storage.conf
# 配置文件是否不生效,false 为生效
disabled=false # 指定此 storage server 所在 组()
group_name = group1# storage server 服务端口
port=23000# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
#base_path = /opt/fastdfs
#base_path=/home/fastdfs/Storage
base_path = /home/fastdfs# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1# 逐一配置 store_path_count 个路径,索引号基于 0。
#store_path0 = /opt/fastdfs
store_path0 = /home/fastdfs/fdfs_storage
#store_path1 = /opt/fastdfs2
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 
# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256#tracker_server = 192.168.209.121:22122
#tracker_server = 192.168.209.122:22122
#配置tracker服务器:IP
tracker_server = 192.168.229.141:22122
#如果有多个则配置多个tracker
#tracker_server = 192.168.229.142:22122# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59# 访问端口 默认80 建议修改 防止冲突
#http.server_port = 8888
#配置http端口
http.server_port = 80

3.4.2.创建Storage基础数据目录,对应base_path目录

# 对应base_path
mkdir -p /home/fastdfs# 这是配置的store_path0路径,有多个要创建多个
mkdir -p /home/fastdfs/fdfs_storage

3.4.3.防火墙放行端口

# 检查端口号是否被占用
netstat -apn | grep 23000# 防火墙放行端口(默认的 23000) 
firewall-cmd --zone=public --add-port=23000/tcp --permanent# 配置立即生效
firewall-cmd --reload# 查询开放端口
firewall-cmd --list-ports

3.4.4.初次启动

启动Storage前确保Tracker是启动的

初次启动成功,会在 /home/fastdfs/fdfs_storage/base(base_path) 目录下创建 data、 logs 两个目录

3.5.启动

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
# 检查是否启动
ps aux | grep fdfs*

3.6.查看Storage和Tracker是否在通信

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

3.7.Storage 目录

同Tracker一样,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息
在 store_path0/data 目录下,创建了N*N个子目录:

[root@localhost fdfs]# ls /home/fastdfs/fdfs_storage/data/
00  07  0E  15  1C  23  2A  31  38  3F  46  4D  54  5B  62  69  70  77  7E  85  8C  93  9A  A1  A8  AF  
B6  BD  C4  CB  D2  D9  E0  E7  EE  F5  FC  01  08  0F  16  1D  24  2B  32  39  40  47  4E  55  5C  63  
6A  71  78  7F  86  8D  94  9B  A2  A9  B0  B7  BE  C5  CC  D3  DA  E1  E8  EF  F6  FD  02  09  10  17  
1E  25  2C  33  3A  41  48  4F  56  5D  64  6B  72  79  80  87  8E  95  9C  A3  AA  B1  B8  BF  C6  CD  
D4  DB  E2  E9  F0  F7  FE  03  0A  11  18  1F  26  2D  34  3B  42  49  50  57  5E  65  6C  73  7A  81  
88  8F  96  9D  A4  AB  B2  B9  C0  C7  CE  D5  DC  E3  EA  F1  F8  FF  04  0B  12  19  20  27  2E  35  
3C  43  4A  51  58  5F  66  6D  74  7B  82  89  90  97  9E  A5  AC  B3  BA  C1  C8  CF  D6  DD  E4  EB  
F2  F9  05  0C  13  1A  21  28  2F  36  3D  44  4B  52  59  60  67  6E  75  7C  83  8A  91  98  9F  A6  
AD  B4  BB  C2  C9  D0  D7  DE  E5  EC  F3  FA  06  0D  14  1B  22  29  30  37  3E  45  4C  53  5A  61  
68  6F  76  7D  84  8B  92  99  A0  A7  AE  B5  BC  C3  CA  D1  D8  DF  E6  ED  F4  FB

四、FastDFS 服务启动、停止、重启设置

4.1.创建文件夹管理脚本

mkdir -p /usr/fdfscd /usr/fdfs

4.2.编辑启动脚本文件 startFastDFS.sh

# 编辑脚本
vi startFastDFS.sh# 给所有人添加执行权限
chmod a+x startFastDFS.sh# 启动脚本
./startFastDFS.sh# 查看是否启动成功
ps aux | grep fdfs*

脚本内容:

#!/bin/bash
# 启动tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start# 启动storage服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf startecho 'FastDFS start success'

在这里插入图片描述

4.3.编辑停止脚本文件 stopFastDFS.sh

# 编辑脚本
vi stopFastDFS.sh# 给所有人添加执行权限
chmod a+x stopFastDFS.sh# 停止脚本
./stopFastDFS.sh# 查看是否停止成功
ps aux | grep fdfs*

脚本内容:

#!/bin/bash
# 停止tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop# 停止storage服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stopecho 'FastDFS stop success'

在这里插入图片描述

4.4.编辑重启脚本文件 restartFastDFS.sh

# 编辑脚本
vi restartFastDFS.sh# 给所有人添加执行权限
chmod a+x restartFastDFS.sh# 重启脚本
./restartFastDFS.sh# 查看是否停止成功
ps aux | grep fdfs*

脚本内容:

#!/bin/bash
# 重启tracker服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart# 重启storage服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restartecho 'FastDFS restart success'

在这里插入图片描述

4.5.FastDFS安装成系统服务

# 创建脚本
vi /usr/lib/systemd/system/fastdfs.service# 重新加载系统服务
systemctl daemon-reload

服务脚本内容

[Unit]
Description=fastdfs - Fast Distributed File System
After=network.target[Service]
Type=forking
ExecStart=/usr/fdfs/startFastDFS.sh
ExecReload=/usr/fdfs/stopFastDFS.sh
ExecStop=/usr/fdfs/stopFastDFS.sh
PrivateTmp=true[Install]
WantedBy=default.target
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式ExecStartpre是检查配置文件
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

4.6.fastdfs常用命令

# 启动服务
systemctl start fastdfs#停止
systemctl stop fastdfs#重启
systemctl restart fastdfs# 查看fastdfs状态
systemctl status fastdfs# 开机启动
systemctl enable fastdfs# 查看fdfs
ps aux | grep fdfs*

在这里插入图片描述

五、上传图片测试:通过fdfs_test程序

5.1.FastDFS安装成功可通过/usr/bin/fdfs_test测试上传、下载等操作

5.2.修改/etc/fdfs/client.conf

vi /etc/fdfs/client.conf

tracker_server根据自己部署虚拟机的情况配置

#Client 的数据和日志目录
#base_path=/home/fastdfs/client
base_path=/home/fastdfs
tracker_server=192.168.229.141:22122
#tracker_server=192.168.229.142:22122

5.3.上传文件使用格式

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件

比如将/etc/fdfs/anti-steal.jpg下的图片上传到FastDFS中:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg

5.4.打印如下日志

[root@localhost fdfs]# vi client.conf 
[root@localhost fdfs]# 
[root@localhost fdfs]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg
This is FastDFS client test program v6.11.0Copyright (C) 2008, Happy Fish / YuQingFastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/ 
for more detail.[2024-02-09 18:33:56] DEBUG - base_path=/home/fastdfs, connect_timeout=5, network_timeout=60, tracker_server_count=1, 
anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, 
use_storage_id=0, connect_first_by=tracker, storage server id count: 0, multi storage ips: 0tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=192.168.229.141, port=23000group_name=group1, ip_addr=192.168.229.141, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
source ip address: 192.168.229.141
file timestamp=2024-02-09 18:33:57
file size=23981
file crc32=3835630198
example file url: http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg
source ip address: 192.168.229.141
file timestamp=2024-02-09 18:33:57
file size=23981
file crc32=3835630198
example file url: http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg

5.5.下载路径

http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg就是文件的下载路径

对应storage服务器上的

/home/fastdfs/fdfs_storage/data/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg文件

由于现在还没有和nginx整合无法使用http下载

六、FastDFS 和nginx整合

6.1.nginx代理

nginx代理storage上的nginx,并进行负载均衡

nginx的安装细节参考nginx文档,这里使用单机nginx,也可以使用两台nginx组成高可用或者采用lvs+nginx访问Storage上的nginx

创建nginx-fdfs.conf配置文件:

#storage群group1组
upstream storage_server_group1{server 192.168.229.143:80 weight=10;server 192.168.229.144:80 weight=10;}
#storage群group2组
upstream storage_server_group2{server 192.168.229.145:80 weight=10;server 192.168.229.146:80 weight=10;}server {listen 80;server_name location;location /group1{proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://storage_server_group1;}location /group2{proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://storage_server_group2;}
}

6.2.在Storage上安装openresty

6.2.1.下载fastdfs-nginx-module模块

下载地址:https://github.com/happyfish100/fastdfs-nginx-module

将fastdfs-nginx-module-1.24.tar.gz传至/openresty/core/moudle/下

cd /openresty/core/moudletar -zxvf fastdfs-nginx-module-1.24.tar.gzmv fastdfs-nginx-module-1.24 fastdfs-nginx-modulecd fastdfs-nginx-module/src

6.2.2.修改config文件将/usr/local/路径改为/usr/

#修改config文件将/usr/local/路径改为/usr/
cd fastdfs-nginx-module/srcvi config

在这里插入图片描述

6.2.3.将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下

#将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/

6.2.4.修改mod_fastdfs.conf的内容

vi /etc/fdfs/mod_fastdfs.conf
# 连接超时时间
connect_timeout=10base_path=/home/fastdfstracker_server=192.168.229.141:22122
#tracker_server=192.168.229.142:22122# StorageServer 默认端口
storage_server_port=23000# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name=true#指定文件存储路径,Storage配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/fastdfs/fdfs_storage
find / -name libfdfsclient.so#将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/

6.2.5.openresty安装【添加fastdfs-nginx-module模块】

openresty安装:https://blog.csdn.net/qq_45740503/article/details/135887895

./configure --add-module=/openresty/core/moudle/fastdfs-nginx-module/srcmake && make installnginx -V

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2.6.编辑nginx配置文件nginx.conf

新建nginx配置文件nginx-fdfs.conf
直接编辑nginx.conf

vi /usr/local/openresty/nginx/conf/nginx.conf
server {listen       80;server_name  192.168.229.141;#在80端口下添加fastdfs-nginx-module模块location ~/group([0-9])/M00 {root /home/fastdfs/fdfs_storage/data;ngx_fastdfs_module;}
}

说明:

server_name指定本机iplocation /group1/M00/:group1为nginx 服务fastdfs的分组名称,
M00是fastdfs自动生成编号,对应store_path0=/home/fastdfs/fdfs_storage,
如果fastdfs定义store_path1,这里就是M01

listen 80端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80相对应。
如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

6.3.访问测试

通过java客户端上传文件,使用浏览器http访问文件,这里访问上传图片测试的文件:

6.3.1.访问storage:

http://192.168.229.143/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg
如果配置了多个ip地址改为192.168.229.144也行,因为同一个分组的storage文件互相同步。

6.3.2.访问tracker:

http://192.168.229.141/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041.jpg
如果配置了多个ip地址改为192.168.229.142也行

6.3.3.使用域名访问 (推荐):

nginx对外由vip提供服务,使用域名访问如下:
比如vip对应的域名为img.test.com:
http://img.test.com/group1/M00/00/00/wKjljWXF_5WALK3dAABdreSfEnY041_big.jpg

6.4.测试上传图片

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/22.png

在这里插入图片描述

6.5.访问图片预览效果【success】

http://192.168.229.141/group1/M00/00/00/wKjljWXGIWKATkMkAAVtZBzi-RU560.png
http://192.168.229.141/group1/M00/00/00/wKjljWXGIWKATkMkAAVtZBzi-RU560_big.png

在这里插入图片描述
在这里插入图片描述

endl

相关文章:

FastDFS安装并整合Openresty

FastDFS安装并整合Openresty 一、安装环境准备【CentOS7.9】二、FastDFS--tracker安装2.1.下载fastdfs2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.安装之后文件目录介绍2.8.错误处理2.9.配…...

93 log4j-slf4j-impl 搭配上 log4j-to-slf4j 导致的 StackOverflow

前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…...

客户端会话技术-Cookie

一、会话技术 1.1 概述 会话:一次会话中包含多次**请求和响应** 一次会话:浏览器第一次给服务器资源发送请求,此时会话建立,直到有一方断开为止 会话的功能:在一次会话的范围内的多次请求间,共享数据 …...

rsa加密登录解决方案

1.问题 账密登录方式中用户输入密码后,把账号、密码通过http传输到后端进行校验,然而密码属于敏感信息,不能以明文传输,否则容易被拦截窃取,因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式,r…...

速盾:海外服务器用了cdn还是卡怎么办

海外服务器使用CDN卡顿问题的解决办法 在如今互联网高速发展的时代,海外服务器成为了许多企业和个人用户的首选,因为它能够提供更高的带宽和更稳定的网络连接。然而,尽管海外服务器在网络性能方面表现出色,但在使用过程中仍然可能…...

[python-opencv] PNG 裁切物体

拿到一组图PNG的图,边缘有点太宽了,需要裁切一下,为了这个需求,简单复习一下基本语法。 1. 读取PNG的4个通道 image cv.imread(image_path, cv.IMREAD_UNCHANGED) 附参数说明: IMREAD_UNCHANGED -1 返…...

机器学习——有监督学习和无监督学习

有监督学习 简单来说,就是人教会计算机学会做一件事。 给算法一个数据集,其中数据集中包含了正确答案,根据这个数据集,可以对额外的数据希望得到一个正确判断(详见下面的例子) 回归问题 例如现在有一个…...

MySQL单主模式部署组复制集群

前言 本篇文章介绍MySQL8.0.27版本的组复制详细搭建过程,教你如何快速搭建一个三节点的单主模式组复制集群。 实际上,MySQL组复制是MySQL的一个插件 group_replication.so,组中的每个成员都需要配置并安装该插件,配置和安装过程…...

【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统

对话系统,Dialogue System,也称为会话代理。是一种模拟人类与人交谈的计算机系统,旨在可以与人类形成连贯通顺的对话,通信方式主要有语音/文本/图片,当然也可以手势/触觉等其他方式 一般我们将对话系统,分…...

【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 GCC 编译优化概述常用优化等级-O1 打开的优化选项-O2 打开的优化选项-O3 打开的优化选项-Os 打开的优化选项优化技术使用优化选项的注意事项GCC 编译优化概述 GCC(GNU Compiler Collection)包含了用于C、C++、Objective-C、Fort…...

《剑指 Offer》专项突破版 - 面试题 38、39 和 40 : 通过三道面试题详解单调栈(C++ 实现)

目录 面试题 38 : 每日温度 面试题 39 : 直方图最大矩形面积 方法一、暴力求解 方法二、递归求解 方法三、单调栈法 面试题 40 : 矩阵中的最大矩形 面试题 38 : 每日温度 题目: 输入一个数组,它的每个数字是某天的温度。请计算每天需要等几天才会…...

动态规划C语言

#include <stdio.h> #include <stdlib.h> //0-1背包问题是一种经典的组合优化问题&#xff0c; //问题描述为&#xff1a;有一个给定容量的背包和一组具有不同价值和重量的物品&#xff0c;如何选择物品放入背包中&#xff0c;以使得背包中物品的总价值最大化&…...

基于微信小程序的校园二手交易平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

K8S系列文章之 [使用 Alpine 搭建 k3s]

官方文档&#xff1a;K3s - 轻量级 Kubernetes | K3s 官方描述&#xff0c;可运行在 systemd 或者 openrc 环境上&#xff0c;那就往精简方向走&#xff0c;使用 alpine 做系统。与 RHEL、Debian 的区别&#xff0c;主要在防火墙侧&#xff1b;其他基础配置需求类似&#xff0…...

计算机视觉 | OpenCV 实现手势虚拟控制亮度和音量

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在当今科技飞速发展的时代&#xff0c;我们身边充斥着各种智能设备&#xff0c;然而&#xff0c;如何更便捷地与这些设备进行交互却是一个不断被探索的课题。本文将主要介绍一个基于 OpenCV 的手势识别项目&#xff0c;通过手势…...

python28-Python的运算符之三目运算符

Python可通过if语句来实现三目运算符的功能&#xff0c;因此可以近似地把这种if语句当成三目运算符。作为三目运算符的f语句的语法格式如下 True_statements if expression else False_statements 三目运算符的规则是:先对逻辑表达式expression求值&#xff0c;如果逻辑表达式…...

高德 API 10009

问题 笔者使用高德地图所提供的API接口&#xff0c;访问接口报错 {"info":"USERKEY_PLAT_NOMATCH","infocode":"10009","status":"0","sec_code_debug":"d41d8cd98f00b204e9800998ecf8427e"…...

Go 语言中如何大小端字节序?int 转 byte 是如何进行的?

嗨&#xff0c;大家好&#xff01;我是波罗学。 本文是系列文章 Go 技巧第十五篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 我们先看这样一个问题&#xff1a;“Go 语言中&#xff0c;将 byte 转换为 int 时是否涉及字节序&#xff08;endianness&#xff09;&#x…...

论文阅读——MP-Former

MP-Former: Mask-Piloted Transformer for Image Segmentation https://arxiv.org/abs/2303.07336 mask2former问题是&#xff1a;相邻层得到的掩码不连续&#xff0c;差别很大 denoising training非常有效地稳定训练时期之间的二分匹配。去噪训练的关键思想是将带噪声的GT坐标…...

JPEG图像的压缩标准(1)

分3个博客详细介绍JPEG图像的压缩标准&#xff0c;包含压缩和解压缩流程&#xff0c;熵编码过程和文件存储格式。 一、JPEG压缩标准概述 JPEG压缩标准由国际标准化组织 (International Organization for Standardization, ISO) 制订&#xff0c;用于静态图像压缩。JPEG标准包…...

数解 transformer 之 self attention transformer 公式整理

句子长度为n&#xff1b;比如2048&#xff0c;或1024&#xff0c;即&#xff0c;一句话最多可以是1024个单词。 1, 位置编码 可知&#xff0c;E是由n个列向量组成的矩阵&#xff0c;每个列向量表示该列号的位置编码向量。 2, 输入向量 加入本句话第一个单词的词嵌入向量是, 第…...

ubuntu22.04@laptop OpenCV Get Started

ubuntu22.04laptop OpenCV Get Started 1. 源由2. 步骤3. 预期&展望4. 参考资料 1. 源由 OpenCV在学校的时候接触过&#xff0c;不过当时专注在物理、研究方面&#xff0c;没有好好的学习下。 这次借后续视频分析刚性需求&#xff0c;对OpenCV做个入门的学习和研读&#…...

【Java】苍穹外卖 Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用用户端-点餐用户使用当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名软件开…...

Ivanti Pulse Connect Secure VPN SSRF(CVE-2023-46805)漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…...

GPT-4:比ChatGPT3.5好得多,但它有多好你知道么?

GPT-4简介 GPT-4是一款由OpenAI开发的人工智能语言模型&#xff0c;它是ChatGPT3.5的升级版。GPT-4拥有更强大的学习能力、更高的生成质量和更广泛的知识覆盖范围&#xff0c;被誉为人工智能技术的重要突破。 GPT-4与ChatGPT3.5的对比 1. 学习能力 GPT-4采用了更多的神经网…...

测试:JMeter如何获取非json格式的响应参数

JMeter如何获取非json格式的响应参数 在 JMeter 中获取非 JSON 格式的响应参数通常涉及使用后置处理器来提取这些参数。以下是一些常见的方法来获取不同类型的响应数据&#xff1a; 正则表达式提取器&#xff1a; 适用于提取文本、HTML、XML 等格式中的特定文本。使用正则表达…...

2024年刘谦魔术大揭秘,其中竟用到了约瑟夫环?

目录 前言 魔术过程 揭秘过程 结尾 前言 不知道昨天春晚时刘谦的魔术大家看了没有&#xff0c;相信大家跟我一样也很疑惑&#xff0c;所以爆肝一天我得出了结论。如果你觉得还不错的话&#xff0c;记得点赞收藏&#xff0c;分享给更多的朋友看。 魔术过程 整个魔术可以分…...

openssl3.2 - update debian12‘s default openssl to openssl3.2

文章目录 openssl3.2 - update debian12s default openssl to openssl3.2概述笔记回到debian12自带的openssl版本从源码编译安装最新版的openssl配置ssl访问END openssl3.2 - update debian12’s default openssl to openssl3.2 概述 在debian12虚拟机中编译了openssl3.2(ope…...

VUE2和VUE3区别对比一览

## Vue3总结 ### 官方文档 * [Vue3](https://v3.cn.vuejs.org/api/options*data.html) * [Vue2](https://vuejs.bootcss.com/api/) ### Vue3相对于Vue2的语法特性#### 1.获取数据 * vue2 javascript export default {data() {return {name: myName,}},mounted() {console.log(t…...

Linux - updatedb 命令

1. 功能 updatedb 命令用来创建或更新slocate命令所必需的数据库文件。updatedb 命令的执行过程较长&#xff0c;因为在执行时它会遍历整个系统的目录树&#xff0c;并将所有的文件信息写入 slocate 数据库文件中。 补充说明&#xff1a;slocate 本身具有一个数据库&#xff…...

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…...

前端JavaScript篇之call() 和 apply() 的区别?

目录 call() 和 apply() 的区别&#xff1f; call() 和 apply() 的区别&#xff1f; 在JavaScript中&#xff0c;call()和apply()都是用来改变函数中this指向的方法&#xff0c;它们的作用是一样的&#xff0c;只是传参的方式不同。 call()方法和apply()方法的第一个参数都是…...

Java设计模式大全:23种常见的设计模式详解(三)

本系列文章简介: 设计模式是在软件开发过程中,经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合,可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在设计和编码过程中的指导,它用于…...

汇编语言程序设计(二)十六位汇编框架、子程序与堆栈

寄存器 如下是16位通用寄存器&#xff0c;存储在cpu硬件中 AX 返回值 AX寄存器分为两部分 AH和AL AH 高8位 存储功能号 AL 低8位 存储返回码 以下是一个AX寄存器应用&#xff1a; mov ax,4c00h 4c给高位AL&#xff0c;00低位AL&#xff0c;16进制要以h结尾 BX CX 计数…...

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value &#xff0c;被关联到对象上。 标签的使用让我们能够表示出对象的特点&#xff0c;比如使用在Pod上&#xff0c;能一眼看出这个Pod是干什么的。也可以用…...

网络请求库axios

一、认识Axios库 为什么选择axios? 功能特点: 在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http请求支持 Promise API拦截请求和响应转换请求和响应数据 补充: axios名称的由来? 个人理解没有具体的翻译. axios: ajax i/o system 二、axios发送请求 1.axios请求…...

程序设计语言的组成

程序设计语言的组成 程序设计语言基本上由数据、运算、控制、传输组成 数据成分 数据是程序操作的对象&#xff0c;具有存储类别、类型、名称、作用域和生存期等属性 从不同角度可将数据进行不同的划分。 数据类型的分类如下&#xff1a; 按程序运行过程中数据的值能否改…...

论文精读的markdown模板——以及用obsidian阅读网页资料做笔记

# The Investigation of S-P Chart Analysis on the Test Evaluations of Equality Axiom Concepts for Sixth Graders Tags: #/unread 本体论&#xff1a; 背景起源和发展 包含要素 # # # 可关联要素 # # # 逻辑 意义&#xff1a; 方法论&#xff1a; 方法论是一…...

LCP 30. 魔塔游戏

LCP 30. 魔塔游戏 难度: 中等 题目: 小扣当前位于魔塔游戏第一层&#xff0c;共有 N 个房间&#xff0c;编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums&#xff0c;其中正数表示道具补血数值&#xff0c;即血量增加对应数值&#xff1b;负数表示怪物造…...

RCE(命令执行)知识点总结最详细

description: 这里是CTF做题时常见的会遇见的RCE的漏洞知识点总结。 如果你觉得写得好并且想看更多web知识的话可以去gitbook.22kaka.fun去看&#xff0c;上面是我写的一本关于web学习的一个gitbook&#xff0c;当然如果你能去我的github为我的这个项目点亮星星我会感激不尽htt…...

[英语学习][27][Word Power Made Easy]的精读与翻译优化

[序言] 译者的这次翻译非常好. 对what与从句的嵌套用法&#xff0c; 进行了精准的翻译. 这次的记录, 也是对我自己的一次翻译经验的提升. 但是唯一遗憾的是"derivation"没有翻译好. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家…...

Jupyter Notebook如何在E盘打开

Jupyter Notebook如何在E盘打开 方法1&#xff1a;方法2&#xff1a; 首先打开Anaconda Powershell Prompt, 可以看到默认是C盘。 可以对应着自己的界面输入&#xff1a; 方法1&#xff1a; (base) PS C:\Users\bella> E: (base) PS E:\> jupyter notebook方法2&#x…...

显示器校准软件:BetterDisplay Pro for Mac v2.0.11激活版下载

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a; BetterDisplay Pro for Mac v2.0.11激活版下载 以下是BetterDisplay Pro的主要…...

【第六天】c++虚函数多态

一、多态的概述 多态按字面的意思就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联&#xff08;父类与子类&#xff09;时&#xff0c;就会用到多态。 C 多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数。 静态多态&…...

CGAL::2D Arrangements-3

3.Arrangement查询 Arrangement里面最重要的查询操作是point-location&#xff0c;给定一个点&#xff0c;查找到包含这个点的Arrangement。通常情况下&#xff0c;point-location查询得到的结果是Arrangement的一个face&#xff0c;退化情况下会是一个edge&#xff0c;查一个…...

机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…...

Redis 使用 RDB 持久化方式的过程

定时触发&#xff1a; RDB 持久化是通过设置一个定时触发的机制来进行的。管理员可以配置 Redis 在经过一定时间间隔或执行了一定数量的写操作后触发 RDB 持久化。这个配置通常在 Redis 的配置文件中进行&#xff0c;可以通过 save 或 save 900 1 这样的配置项来设定。 save 90…...

仰暮计划|“我非常感谢党的领导,作为一名普通百姓,我也愿意为国家的发展继续贡献微薄的力量”

她出生于1945年&#xff0c;现居河南省平顶山市宝丰县城关镇东街社区&#xff0c;是一位和蔼可亲的老人。 孙奶奶回忆&#xff0c;在学生时期&#xff0c;是点蜡烛照明的&#xff0c;打瞌睡或者离作业本近的时候&#xff0c;就会烧到头发&#xff0c;当时的作业量不大&#xff…...

【思科ssh】思科模拟器配置ssh登录

配置路由器的名称为R1 配置路由器的域名为aaa.com 使用rsa来加密传输数据&#xff0c;密钥位数为2048 配置登录用户名为cj&#xff0c;密码为123456 只允许ssh登录&#xff0c;不能以其他方式登录 本地验证...

python创建pdf文件

目录 一&#xff1a;使用reportlab库 二&#xff1a;使用使pdf库 在Python中生成PDF文件可以使用多种库&#xff0c;其中最常用的是reportlab和fpdf。以下是使用这两个库生成PDF文件的示例代码&#xff1a; 一&#xff1a;使用reportlab库 1&#xff1a;写入文字信息 from r…...