实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)
轻量级分布式文件系统FastDFS——实现用户头像上传/压缩屏幕适配
一、需求分析
1.1 业务场景:
用户上传的头像图片大小不一、手机和PC等设备显示尺寸也存在差异,因此需要能根据http请求指定的尺寸参数对图片进行动态压缩,以达到屏幕适配的作用。
1.2 功能需求:
搭建FastDFS图片服务器,通过http请求访问服务器中图片时,显示动态缩略图。
具体要求如下:
- 1.在Linux系统中安装FastDFS服务器
- 2.可以使用FastDFS自带的工具将文件上传到FastDFS
- 3.通过http访问某个图片时,FastDFS通过GraphicsMagick工具生成缩略图,将动态缩略图响应输出
1.3 实现思路:
1.GraphicsMagick,安装完成之后测试是否支持png、jpg,以及验证gm是否可用2.安装LuaJIT、lua-nginx-module和ngx_devel_kit3.安装Nginx,安装完成后测试lua环境是否支持,比如输出hello world4.在Nginx中配置lua脚本,在lua脚本中使用gm命令完成图片压缩
二、环境版本介绍
2.1 软件版本
环境&软件 | 版本 |
---|---|
虚拟机&VMware Workstation | 15 Pro |
服务器&CentOS | CentOS-7-x86_64-DVD-1810.iso |
GraphicsMagick | 1.3.21 |
LuaJIT | 2.0.4 |
lua-nginx-module | 0.8.10 |
GraphicsMagick | 1.3.18 |
ngx_devel_kit | 0.2.18 |
Nginx | 1.15.6 |
LuaJIT | 2.0.2 |
远程文件传输&WinSCP、Xftp | 5 |
远程连接&Xshell | 5 |
2.2 软件下载地址:
- 操作系统:centos7下载地址 提取码:5555
- MySQL数据库:mysql5.7下载地址 提取码:5555
- Xshell:xshell5下载地址 提取码:5555
三、环境搭建——FastDFS 安装
具体安装步骤可以参考:github FastDFS安装参考
3.1 安装编译环境
保证目前主机可以上网状态:
安装必要的编译环境:yum install git gcc gcc-c++ make automake vim wget libevent -y
3.2 安装libfastcommon 基础库
mkdir /usr/local/fastdfs
cd /usr/local/fastdfs
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install
下载libfastcommon 基础库:
编译并安装libfastcommon 基础库:
3.3 安装FastDFS
在FastDFS目录中下载FastDFS:
cd /usr/local/fastdfswget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
解压缩安装包:
tar -zxvf V5.11.tar.gz
进入fastdfs目录并安装:
cd fastdfs-5.11
./make.sh && ./make.sh install
查看在etc目录下生成的配置文件
参考系统提供的配置文件,生成fastdfs配置文件:
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.confcp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.confcp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
拷贝fastdfs目录下的配置文件到/etc/fdfs目录中
cp /usr/local/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs
cp /usr/local/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs
vim /etc/fdfs/tracker.conf
修改配置文件:tracker.conf
port=22122 访问端口
base_path=/home/fastdfs 数据存储路径
修改配置文件:tracker.conf
vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000
base_path=/home/fastdfs # 数据和日志文件存储根目录
store_path0=/home/fastdfs # 第一个存储目录
tracker_server=192.168.80.222:22122 修改成自己的主机端口
#http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
http.server_port=8888
3.4 启动
mkdir /home/fastdfs -p 创建数据存储目录
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 启动追踪器
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 启动存储器
netstat -ntlp 查看所有运行的端口
3.5 测试上传(使用fdfs提供的客户端)
vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/fastdfs
#tracker服务器IP和端口
tracker_server=192.168.80.222:22122
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png执行上传命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png存储路径:group1/M00/00/00/wKhQ3l9xVwCAFk-SAABmHOi0QSA283.jpg
3.6 下载借助nginx来实现(安装fastdfs-nginx-module)
下载:
cd /usr/local/fastdfs/
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
解压
tar -xvf V1.20.tar.gz
cd fastdfs-nginx-module-1.20/src
修改配置文件:config
vim config
修改第6 行 和 15 行 修改成
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.211.136:22122 追踪服务器地址
url_have_group_name=true 上面上传文件时是带着组名称的,因此这里设置成true
store_path0=/home/fastdfs
3.7 安装nginx(将磁盘路径变为http可以访问的路径)
nginx启动默认需要的目录,下载并解压nginx:
mkdir -p /var/temp/nginx/client cd /usr/local/fastdfs/
wget http://nginx.org/download/nginx-1.15.6.tar.gz
tar -zxvf nginx-1.15.6.tar.gz
安装nginx需要的依赖库:
cd nginx-1.15.6/
yum -y install pcre-devel openssl openssl-devel
添加fastdfs-nginx-module模块,使nginx和nginx-module进行关联:
./configure --add-module=/usr/local/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]/ { # 匹配请求带有group组名的请求ngx_fastdfs_module;}
}
启动nginx
/usr/local/nginx/sbin/nginx
3.8 测试下载
关闭防火墙
systemctl stop firewalld
通过http下载图片
http://192.168.80.222:8888/group1/M00/00/00/wKhQ3l9xVwCAFk-SAABmHOi0QSA283.jpg
四、环境搭建——GraphicsMagick安装
下载:LuaJIT-2.0.2.tar.gz 提取码:x5ha
下载:v0.8.6.tar 提取码:8odz
下载:ngx_devel_kit-0.2.18.tar 提取码:9ey5
下载:nginx-1.4.2.tar 提取码:r7ia
4.1 Nginx-Lua-FastDFS-GraphicsMagick
我们通常使用FastDFS来当作图片服务器,客户端通过Nginx请求图片。某些情况下,客户端对请求的图片有尺寸要求:
如 http://ip:port/group1/M00/00/00/asdasd42342ascascasc.jpg_100x200.jpg
这时我们可以使用GraphicsMagick工具动态的修改图片以满足客户端的需求。
这里使用lua脚本,调用GraphicsMagick的gm命令动态处理图片。
4.2 整体思路:
- 1、首先服务器需要有lua环境
- 2、Nginx扩展支持lua,可调用lua脚本
- 3、lua脚本中定义gm命令及参数
4.3 下载安装lua环境
下载LuaJIT:
tar -zxvf LuaJIT-2.0.2.tar.gz
安装LuaJIT:
cd LuaJIT-2.0.2make && make install
4.4 配置lua环境变量
export LUAJIT_LIB=/usr/local/libexport LUAJIT_INC=/usr/local/include/luajit-2.0
4.5 预先安装png,jpeg支持包
4.6 安装GraphicsMagick
wget http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/1.3/GraphicsMagick-1.3.21.tar.gz
tar -zxvf GraphicsMagick-1.3.21.tar.gz
./configure --prefix=/data/local/GraphicsMagick --enable-shared
make && make install
查看GraphicsMagick 支持的文件类型:
若PNG、JPEG等不支持,可以在编译GraphicsMagick的时候,使用 --with-png=yes/data/local/GraphicsMagick/bin/gm -version
4.7 准备模块包
tar zxvf ngx_devel_kit-0.2.18.tar.gztar zxvf v0.8.6.tar.gz
4.8 nginx安装模块包(注意:版本兼容问题)
删除原来的nginx1.15.6版本,版本不兼容
rm -rf /usr/local/nginx/ rm -rf /var/temp/nginx/
解压缩新的nginx1.4.2
tar -zxvf nginx-1.4.2.tar.gz (注意:重新安装nginx1.4.2)
添加模块:
./configure --add-module=/usr/local/fastdfs/lua-nginx-module-0.8.6 --add-module=/usr/local/fastdfs/ngx_devel_kit-0.2.18 --add-module=/usr/local/fastdfs/fastdfs-nginx-module-1.20/src
安装:
make && make install
4.9 测试nginx扩展lua是否正常:
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
location /test {default_type text/html;content_by_lua 'ngx.say("hello dabing")ngx.log(ngx.ERR,"err err")';
}
如果启动nginx,报错
/usr/local/nginx/sbin/nginx报错:/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决:
find / -name libluajit-5.1.so.2ln -s /usr/local/lib/libluajit-5.1.so.2 /usr/lib64/libluajit-5.1.so.2
再次启动nginx,并测试nginx扩展lua是否正常:若返回hello dabing即说明正常
/usr/local/nginx/sbin/nginx
4.10 上传lua脚本:lua脚本ImageResizer.lua
链接:lua脚本ImageResizer.lua 提取码:rwti
查看上传的lua脚本:ImageResizer.lua
4.11 修改nginx配置:vim /usr/local/nginx/conf/nginx.conf
配置两个server并重新设置端口 8888和80
8888端口:访问正常大小的图片
80端口:访问缩略图,使用lua脚本,调用GraphicsMagick的gm命令动态处理图片
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 8888;server_name localhost;location ~/group[0-9]/ {ngx_fastdfs_module;}}
#-------------------------------------------------------------------------------------server {listen 80;server_name localhost;location /test {default_type text/html;content_by_lua 'ngx.say("hello dabing")ngx.log(ngx.ERR,"err err")';} location /group1/M00 {alias /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 conf/lua/ImageResizer.lua;}}location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443;# server_name localhost;# ssl on;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_timeout 5m;# ssl_protocols SSLv2 SSLv3 TLSv1;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
压缩请求的核心配置:用户请求80端口时,并且携带图片压缩尺寸,则使用lua脚本,调用GraphicsMagick的gm命令动态处理图片
设置/home/fastdfs/data目录的访问权限:
在nginx的/usr/local/nginx/conf目录下创建lua目录:上图配置文件的配置相对应
将lua脚本ImageResizer.lua 复制到lua目录中:
4.12 缩略图测试
/usr/local/nginx/sbin/nginx 启动nginx
mkdir /home/fastdfs -p 创建数据存储目录
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 启动追踪器
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 启动存储器
netstat -ntlp 查看所有运行的端口执行上传命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/ceshi.png
存储路径:group1/M00/00/00/wKhQ3l9xyOOAGtSnAANcn_hj_QM889.png
访问正常大小的图片:
访问缩小的图片:100×100
访问缩小的图片:900×900
实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)相关推荐
- 轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级)
轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级) 实验室所在的课题组以研究云计算为主,但所有的研究都是在基于理论的凭空想像,缺少分布式环境的平台的实践,云计算神马的都是浮云了.因此,我 ...
- Linux中安装FastDFS轻量级分布式文件系统
先来介绍一下什么是FastDFS FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特 ...
- 分布式文件系统FastDFS架构剖析
文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX ...
- (转)淘淘商城系列——分布式文件系统FastDFS
http://blog.csdn.net/yerenyuan_pku/article/details/72801777 商品添加的实现,包括商品的类目选择,即商品属于哪个分类?还包括图片上传,对于图片 ...
- fastdfs原理_搭建分布式文件系统FastDFS集群
本文摘选abcdocker运维博客 abcdocker运维博客 – 专注DevOps自动化运维,传播优秀it运维技术文章i4t.com 在生产环境中往往数据存储量比较大,因此会大部分会选择分布式存储 ...
- 网站文件系统发展分布式文件系统fastDFS
网站文件系统发展 1.单机时代的图片服务器架构 初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件 ...
- 分布式文件系统FastDFS详解-附带视频教程
目录 1.FastDFS教程 2.FastDFS安装 安装FastDFS FastDFS配置文件详解 FastDFS启动 3.FastDFS重启与FastDFS关闭 FastDFS关闭 4.FastD ...
- 分布式文件系统FastDFS的搭建
FastDFS分布式文件系统说明 FastDFS 是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线 ...
- 分布式文件系统----FastDFS
FastDFS 1.分布式文件系统 1.1 FastDFS简介 1.2 FastDFS整体架构 1.3 FastDFS的存储策略 1.4 FastDFS的上传过程 1.5 FastDFS的文件同步 1 ...
最新文章
- Android采用Application总结一下
- swift_004(Storyboard进行界面跳转及传值)
- Xamarin图表开发基础教程(6)OxyPlot框架
- c printf 缓冲区分析
- Spring DI依赖注入讲解
- android 面试题(一)
- android 短信注册,Android注冊短信验证码功能
- python send 案例_python使用rabbitmq实例三,交换机
- 年度总结 是不公平和智障的产物
- sqoop-import 并行抽数及数据倾斜解决
- 容灾服务器作用,存储容灾服务
- db2字符串定位_DB2/Oracle/SQL server判断某个字符串或单个字符在源字符串中出现的位置...
- DevOps 小组运维管理手册
- 【linux浅谈017】gbd调试常用指令
- 网赚渠道,付费项目和免费项目,你会选择哪种网赚方式
- [译]OOSE第7章:Analysis 分析 7.3 The analysis model 分析模型 7.4 Summary
- 苹果iPhone5 16G长沙九方现货售8199元
- 使用LDAP Directory的好处
- 帕金《宏观经济学》第8版课后习题答案
- wine葡萄酒数据集KNNSVM分类实验