拉勾课程速推指南-阶段四 模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台(1)

【原创】拉勾课程速推指南-阶段四 模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台(1)

文章内容输出来源:拉勾教育Java高薪训练营

学习心得

【拉勾课程速推指南】学习心得

课程介绍

第四阶段 大型分布式存储系统架构进阶

模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台

本模块对分布式文件系统FastDFS集群架构与原理剖析,使用FastDFS+Nginx搭建高吞吐文件服务器,并对阿里云OSS云存储平台系统讲解。

作业内容

作业一:

搭建FastDFS图片服务器,通过http请求可以访问服务器中图片的动态压缩图。具体要求如下:

在Linux系统中安装FastDFS服务器

可以使用FastDFS自带的工具将文件上传到FastDFS,并可以通过http 访问到对应的图片

可以使用GraphicsMagick工具生成缩略图,通过http访问某个图片时,显示其对应的动态压缩图

作业要求:

提供Linux下的安装步骤文档

课程目录及观看建议

2倍速模式:课程时间2小时,作业时间5小时

*** 必看 ** 建议看 * 可不看

  • 任务一:轻量级分布式文件系统FastDFS
  1. FastDFS课程介绍(05:55)
  2. FastDFS基础回顾(16:06)*
  3. FastDFS环境搭建和测试(26:21)***
  4. FastDFS和Nginx结合(21:54)***
  5. Java访问FastDFS(32:53)
  6. FastDFS架构详解(12:19)
  7. FastDFS设计理念(09:35)
  8. 文件上传和下载功能原理(19:22)
  9. 文件同步、删除等功能原理(14:15)
  10. FastDFS集群搭建和测试(33:52)
  11. FastDFS配置和优化(25:55)
  12. SpringBoot访问FastDFS集群(40:08)
  13. FastDFS互联网应用实战方案(12:36)***

作业说明

软件版本

FastDFS 5.11
Nginx 1.15.6
fastdfs-nginx-module 1.20
ngx_devel_kit 0.3.0
lua-nginx-module 0.10.9rc7
LuaJIT 2.0.4
GraphicsMagick 1.3.35

注意事项

  1. FastDFS和GraphicsMagick安装流程见参考资料1、2

  2. 相关软件版本问题,尤其是 lua-nginx-module 0.10.9rc7,否则会出现各种问题。详情见参考资料3。

  3. 动态压缩需要配置nginx路由。详情见参考资料4。

作业实现步骤

FastDFS的安装

  1. 安装编译环境
yum install git gcc gcc-c++ make automake vim wget libevent -y
  1. 安装libfastcommon基础库
mkdir /root/fastdfs
cd /root/fastdfs
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install
  1. 安装FastDFS
cd /root/fastdfs
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar -zxvf V5.11.tar.gz
cd fastdfs-5.11
./make.sh && ./make.sh install

准备配置文件

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs
cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs

设置配置文件

vim /etc/fdfs/tracker.conf

port=22122

base_path=/home/fastdfs

vim /etc/fdfs/storage.conf

port=23000

# 保存数据和日志文件的根目录

base_path=/home/fastdfs

# 第一个存储目录

store_path0=/home/fastdfs

tracker_server=192.168.0.101:22122

# 需要和nginx中保持一致

http.server_port=8888

  1. 启动
mkdir /home/fastdfs -p
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
# 查看运行端口
yum install net-tools
netstat -ntlp
  1. 测试上传
vim /etc/fdfs/client.conf

base_path=/home/fastdfs

tarcker_server=192.168.0.101:22122

上传测试图片

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/pic.png

如果返回 group1/M00/00/00/xxx.png,则表示成功。

  1. 安装fastdfs-nginx-module
cd /root/fastdfs
wget https://github.com/happyfinsh100/fastdfs-nginx-module/archive/V1.20.tar.gz
tar -xvf V1.20.tar.gz
cd fastdfs-nginx-module-1.20/src
vim config

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf

tracker_server=192.168.0.101:22122

url_have_group_name=true

store_path0=/home/fastdfs

mkdir -p /var/temp/nginx/client
  1. 安装nginx
cd /root/fastdfs
wget http://nginx.org/download/nginx-1.15.6.tar.gz
tar -zxvf nginx-1.15.6.tar.gz
cd nginx-1.15.6/
yum -y install pcre-devel openssl openssl-devel
./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
make && make install
/usr/local/nginx/sbin/nginx -V
vim /usr/local/nginx/conf/nginx.conf

server {

​ listen 8888;

​ server_name localhost;

​ location ~/group[0-9]/ {

​ ngx_fastdfs_module;

​ }

}

启动

/usr/local/nginx/sbin/nginx
  1. 测试下载

先关闭防火墙

systemctl stop firewalld.service

然后浏览器输入 http://192.168.0.101:8888/group1/M00/00/00/xxx.png

输入图片说明

GraphicsMagick的安装

需要使用lua脚本调用GraphicsMagick的接口动态生成压缩图片

  1. 安装lua
cd /root/fastdfs
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -zxvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make && make install
  1. nginx的lua模块
cd /root/fastdfs
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -zxvf v0.3.0.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -zxvf v0.10.9rc7.tar.gz
  1. 设置环境变量
vim /etc/profile

export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0

source /etc/profile
  1. 设置nginx编译参数,并安装
cd /root/fastdfs/nginx-1.15.6
./configure --prefix=/usr/local/nginx 
    --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src 
    --add-module=/root/fastdfs/lua-nginx-module-0.10.9rc7 
    --add-module=/root/fastdfs/ngx_devel_kit-0.3.0
make && make install
  1. 测试
vim /usr/local/nginx/conf/nginx.conf

location /lua {

​ default_type “text/plain”;

​ content_by_lua “ngx.say("hello, lua")”;

}

  1. 生成相应模块的软连接,并测试配置是否正确,然后重启nignx
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx

浏览器访问 http://192.168.0.101:8888/lua,或者命令行使用 curl http://192.168.0.101:8888/lua,显示 hello,lua

  1. 下载GraphicsMagick的lib,支持JPEG、PNG
cd /root/fastdfs
wget http://www.imagemagick.org/download/delegates/jpegsrc.v9b.tar.gz
tar -zxvf jpegsrc.v9b.tar.gz
cd jpeg-9b
./configure
make && make install

cd /root/fastdfs
wget http://www.imagemagick.org/download/delegates/libpng-1.6.31.tar.gz
tar -zxvf libpng-1.6.31.tar.gz
cd libpng-1.6.31
./configure
make && make install
  1. 安装GraphicsMagick

下载安装包,然后上传到虚拟机

http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/

cd /root/fastdfs
tar -zxvf GraphicsMagick-1.3.35.tar.gz
cd GraphicsMagick-1.3.35
./configure --prefix=/usr/local/GraphicsMagick --enable-shared
make && make install
/usr/local/GraphicsMagick/bin/gm version
  1. 添加so路径
vim /etc/ld.so.conf

/usr/local/lib

/sbin/ldconfig -v
  1. 确认安装是否成功,是否支持JPEG、PNG
/usr/local/GraphicsMagick/bin/gm version
  1. 设置全局命令
vim /etc/profile

export PATH=$PATH:/usr/local/GraphicsMagick/bin

source /etc/profile
  1. 测试gm命令
gm convert -resize 100x100^ -gravity Center -crop 100x100+0+0 /root/fastdfs/pic.png /root/fastdfs/pic_100x100.png

查看生成后的pic_100x100.png

  1. 配置动态压缩

创建lua脚本

vim /usr/local/nginx/lua/ImageResizer.lua

local command = "/usr/local/GraphicsMagick/bin/gm convert -auto-orient -strip " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " +profile "*" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext;

os.execute(command);

ngx.exec(ngx.var.request_uri);

配置nginx

location /group1/M00 {
    root /home/fastdfs/data;

    if ($uri ~* ^/group1/M00(.+.(jpg|jpeg|gif|png))_(d+)x(d+).(jpg|jpeg|gif|png)) {
        add_header X-Powered-By "Lua GraphicsMagick";
        add_header file-path $request_filename;
        #lua_code_cache on;
        set $request_filepath /home/fastdfs/data$1;
        set $width $3;
        set $height $4;
        set $ext $5;
    }

    if (!-f $request_filename) {
        content_by_lua_file lua/ImageResizer.lua;
    }
}

重启nignx

/usr/local/nginx/sbin/nginx -s reload
  1. 使用浏览器测试动态压缩

访问原图

输入图片说明

动态压缩成100×100

输入图片说明

参考资料

如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放

nginx-lua-fastdfs-GraphicsMagick安装

nginx 中添加 lua 模块,支持lua脚本以及遇到的坑

Nginx+Lua+GraphicsMagick实现图片自动裁剪/缩放、以及定时清理生成的缩略图

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 拉勾课程速推指南-阶段四 模块四 轻量级分布式文件系统FastDFS、阿里云OSS云存储平台(1)