文档说明

此文档为拉钩Java高薪训练营2期课程学习过程,完成作业的文档。顺便说一句拉钩的课程,整个课程,体系非常全,价格上也是所有培训课程中最便宜的。如果希望构建一个整体的技术视野,非常推荐。

作业要求

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

  • 在Linux系统中安装FastDFS服务器
  • 可以使用FastDFS自带的工具将文件上传到FastDFS,并可以通过http 访问到对应的图片
  • 可以使用GraphicsMagick工具生成缩略图,通过http访问某个图片时,显示其对应的动态压缩图

作业要求:

  • 提供Linux下的安装步骤文档

——————————————————————————————————
1、提供资料:说明文档,验证及讲解视频。
2、讲解内容包含:题目分析、实现思路、环境介绍。
—————————————————————————————————-

环境说明

  • Linux : Centos7
  • FastDFS : 5.11
  • nginx:1.15.6 【在整合 Lua 的时候出了问题,直接使用 OpenResty 1.15.8.1】
  • GraphicsMagick:1.3.35

    FastDFS环境搭建

    安装编译环境

    1. yum install git gcc gcc-c++ make automake vim wget libevent -y

    安装libfastcommon 基础库

    1. mkdir /root/fastdfs
    2. cd /root/fastdfs
    3. git clone https://github.com/happyfish100/libfastcommon.git --depth 1
    4. cd libfastcommon/
    5. ./make.sh && ./make.sh install

    安装FastDFS

    安装

    1. cd /root/fastdfs
    2. wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
    3. tar -zxvf V5.11.tar.gz
    4. cd fastdfs-5.11
    5. ./make.sh && ./make.sh install

    准备配置文件

    1. #配置文件准备
    2. cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    3. cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    4. cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    5. cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs
    6. cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs

    tracker.conf

    1. vim /etc/fdfs/tracker.conf
    2. # 添加如下内容
    3. port=22122
    4. base_path=/home/fastdfs

    storage.conf

    1. vim /etc/fdfs/storage.conf
    2. #需要修改的内容如下
    3. port=23000
    4. base_path=/home/fastdfs # 数据和日志文件存储根目录
    5. store_path0=/home/fastdfs # 第一个存储目录
    6. tracker_server=192.168.158.17:22122
    7. # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
    8. http.server_port=8888

    启动

    1. mkdir /home/fastdfs -p
    2. /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
    3. /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
    4. 查看所有运行的端口
    5. netstat -ntlp
    image.png

    测试上传

    1. vim /etc/fdfs/client.conf
    2. #需要修改的内容如下
    3. base_path=/home/fastdfs
    4. #tracker服务器IP和端口
    5. tracker_server=192.168.158.17:22122
    6. #保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png
    7. /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.jpg
    image.png

    安装fastdfs-nginx-module

    ```shell cd /root/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

vim config ngx_module_incs=”/usr/include/fastdfs/ /usr/include/fastcommon/“ CORE_INCS=”$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/“

  1. > 踩坑提醒:上面路径配置不正确,导致 nginx 编译安装出错。
  2. ```shell
  3. cp mod_fastdfs.conf /etc/fdfs/
  1. vim /etc/fdfs/mod_fastdfs.conf
  2. #需要修改的内容如下
  3. tracker_server=192.168.158.27:22122
  4. url_have_group_name=true
  5. store_path0=/home/fastdfs
  1. mkdir -p /var/temp/nginx/client

安装OpenResty

  1. cd /root/fastdfs
  2. wget https://openresty.org/download/openresty-1.15.8.1.tar.gz
  3. tar -zxvf openresty-1.15.8.1.tar.gz
  4. cd openresty-1.15.8.1/
  1. yum -y install pcre-devel openssl openssl-devel
  2. # 添加fastdfs-nginx-module模块
  3. ./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
  1. # 编译安装
  2. gmake && gmake install
  3. # 查看模块是否安装上
  4. /usr/local/openresty/nginx/sbin/nginx -V

image.png

  • vim /usr/local/openresty/nginx/conf/nginx.conf

    1. #添加如下配置
    2. server {
    3. listen 8888;
    4. server_name localhost;
    5. location ~/group[0-9]/ {
    6. ngx_fastdfs_module;
    7. }
    8. }
  • 启动 nginx

    1. /usr/local/openresty/nginx/sbin/nginx

    测试下载

    1. # 关闭防火墙
    2. systemctl stop firewalld
    3. # http://192.168.158.17:8888/group1/M00/00/00/xxx.png
    4. http://192.168.158.17:8888/group1/M00/00/00/wKieEV79S3aATt9sAAAk4hm_n_w520.jpg

GraphicsMagick

安装

安装依赖

  1. yum install -y libjpeg-devel libjpeg
  2. yum install -y libpng-devel libpng
  3. yum install -y giflib-devel giflib

安装 GraphicsMagick

  1. cd /root/fastdfs
  2. wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.35.tar.gz
  3. tar -zxvf GraphicsMagick-1.3.35.tar.gz
  4. cd GraphicsMagick-1.3.35/
  5. ./configure
  6. make
  7. make install

使用

  1. [root@localhost GraphicsMagick-1.3.35]# gm
  2. GraphicsMagick 1.3.35 2020-02-23 Q8 http://www.GraphicsMagick.org/
  3. Copyright (C) 2002-2020 GraphicsMagick Group.
  4. Additional copyrights and licenses apply to this software.
  5. See http://www.GraphicsMagick.org/www/Copyright.html for details.
  6. Usage: gm command [options ...]
  7. Where commands include:
  8. animate - animate a sequence of images
  9. batch - issue multiple commands in interactive or batch mode
  10. benchmark - benchmark one of the other commands
  11. compare - compare two images
  12. composite - composite images together
  13. conjure - execute a Magick Scripting Language (MSL) XML script
  14. convert - convert an image or sequence of images
  15. display - display an image on a workstation running X
  16. help - obtain usage message for named command
  17. identify - describe an image or image sequence
  18. import - capture an application or X server screen
  19. mogrify - transform an image or sequence of images
  20. montage - create a composite image (in a grid) from separate images
  21. time - time one of the other commands
  22. version - obtain release version

查看图片信息

  1. # 查看图片信息
  2. gm indentify 1.jpg

image.png

缩放图片

  1. gm convert 1.jpg -resize 100x100 2.jpg

image.png

FastDFS、OpenResty、GraphicsMagick整合

  1. cd /root/fastdfs
  2. git clone https://github.com/hpxl/nginx-lua-fastdfs-GraphicsMagick.git
  3. cd nginx-lua-fastdfs-GraphicsMagick
  4. cp -r lua/ /usr/local/openresty/nginx/
  5. cp lua/restyfastdfs.lua /usr/local/openresty/lualib/
  1. cd /usr/local/openresty/nginx/lua/
  2. vim fastdfs.lua
  3. # 修改 46 行 tracker 地址
  4. fdfs:set_tracker("192.168.158.17", 22122)

vim /usr/local/openresty/nginx/conf/nginx.conf,参考 nginx-lua-fastdfs-GraphicsMagick 中的 nginx.conf 配置 nginx

  1. # 添加 server8888 下面添加如下内容
  2. location ~/group[0-9]/th/ {
  3. alias /data/images;
  4. #set $image_root "/usr/local/openresty/nginx/proxy_tmp/images";
  5. # 注意对应自己的 fastdfs 存储路径,并服务权限
  6. set $image_root "/home/fastdfs/data";
  7. if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") {
  8. set $image_dir "$image_root/$3/$4/";
  9. set $image_name "$5";
  10. set $file "$image_dir$image_name";
  11. }
  12. if (!-f $file) {
  13. # 关闭lua代码缓存,方便调试lua脚本
  14. #lua_code_cache off;
  15. content_by_lua_file "lua/fastdfs.lua";
  16. }
  17. ngx_fastdfs_module;
  18. }
# 验证配置文件是否正确
/usr/local/openresty/nginx/sbin/nginx -t
# 重新加载配置文件
/usr/local/openresty/nginx/sbin/nginx -s reload

测试

# 请求原图
http://192.168.158.17:8888/group1/M00/00/00/wKieEV79S3aATt9sAAAk4hm_n_w520.jpg
# 请求缩略图,注意中间是字母 x ,后面需要带有文件后缀名
http://192.168.158.17:8888/group1/M00/00/00/wKieEV79S3aATt9sAAAk4hm_n_w520.jpg_80x80.jpg