搭建Nginx+FastDFS(集群)+Lua+GraphicsMagick搭建类似淘宝的图片服务器基于Linux Centos7

我的博客同步:http://www.deepinblog.com/%e6%96%87%e4%bb%b6%e6%9c%8d%e5%8a%a1%e5%99%a8/142/

系统环境:Linux Centos7(3台)

1. 安装编译环境

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

2.安装ibfastcommon基础库

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

3.安装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
修改tracker.conf
vim /etc/fdfs/tracker.conf 
#需要修改的内容如下 
port=22122 
base_path=/home/fastdfs
修改storage.conf
vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000
base_path=/home/fastdfs # 数据和日志文件存储根目录 
store_path0=/home/fastdfs # 第一个存储目录 
tracker_server=192.168.211.136:22122
# http访问文件的端口(默认8888,看情况修改,和nginx中保持一致) 
http.server_port=8888

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

5.测试上传

编辑client.conf
vim /etc/fdfs/client.conf 
#需要修改的内容如下 
base_path=/home/fastdfs
#tracker服务器IP和端口
tracker_server=192.168.211.136:22122
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png 
#执行上传 /root/fastdfs/1.png 为您本机上的图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png 
#返回的图片
group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png

6.安装fastdfs-nginx-module

file

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
修改第5行 和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/

#编辑mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf 
#需要修改的内容如下 
tracker_server=192.168.211.136:22122 
url_have_group_name=true 
store_path0=/home/fastdfs
mkdir -p /var/temp/nginx/client #创建nginx临时目录,防止报错

7.安装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
# 添加fastdfs-nginx-module模块
./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;
}

#启动nginx
/usr/local/nginx/sbin/nginx

8.测试下载

关闭防火墙
systemctl stop firewalld 或者 iptables
#使用浏览器访问
http://192.168.211.136:8888/group1/M00/00/00/xxx.png http://192.168.211.136:8888/group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611.png

9.fastdfs集群安装

3台Centos7

10.211.55.710.211.55.810.211.55.10
trackertrackertracker
storage(group1)storage(group2)
nginxnginxnginx

按照之前的单机方式先进行安装

9.1. 配置tracker集群 三台相同

vi /etc/fdfs/tracker.conf
store_lookup=0 # 0是轮询,1是指定组,2是剩余存储空间多的group优先

9.2 配置storage集群

vi /etc/fdfs/storage.conf
tracker_server=192.168.211.130:22122 
tracker_server=192.168.211.136:22122 
tracker_server=192.168.211.135:22122
group_name=group1 #注意组名 10.211.55.10 配置是 group2 
port=23000 #storage 的端口号,同一个组的 storage 端口号必须相同
#重启所有tracker storage
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

9.3 查看storage的日志查看tracker集群信息

cat /home/fastdfs/logs/storaged.log

访问FastDFS时 可以把Tracker 理解成对等的,但实际底层多个Tracker时在运行过程中会选择其中一个 作为Leader,由该Leader执行一些唯一性的操作。在早期版本中Tracker-Leader有两个作用,分别 是:为新加入的Storage分配一个源Storage;为开启合并存储的Group选择Trunk-Server。但是在最新 的版本中实际上只有第二个作用,也就是选择Trunk-Server。

查看之后 如果连接不上 注意防火墙

systemctl stop firewalld

9.4 查看存储集群信息

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

9.5测试上传

vim /etc/fdfs/client.conf 
tracker_server=192.168.211.130:22122 
tracker_server=192.168.211.136:22122 
tracker_server=192.168.211.135:22122

#重复调用该上传脚本,发现会一会上传到group1 一会上传到group2上面
#这是因为在tracker.conf中我们配置的store_lookup=0 # 0是轮询
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/1.png
#查询上传的图片,在相同的group下面是可以查看到的
#如果这里通过nginx去访问图片,你会发现不同组的图片也是可以相互访问的
find / -name *.png

10.使用nginx和FastDFS集群结合

在每台机器上按照上面单机的步骤安装nginx

vi /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.211.130:22122 
tracker_server=192.168.211.136:22122 
tracker_server=192.168.211.135:22122 
group_name=group1 #注意组名 如果是group2 则一定要改
#添加如下配置 
vim /usr/local/nginx/conf/nginx.conf
server {
	listen 8888; 
	server_name localhost; 
	location ~/group[0-9]/ {
    ngx_fastdfs_module;
}
启动各个nginx/usr/local/nginx/sbin/nginx

11.测试文件服务器

http://10.211.55.7/group1/M00/00/00/wKjIZVyLMi6AH08jAADtXa53YW0605.png

http://10.211.55.8/group1/M00/00/00/wKjIZVyLMi6AH08jAADtXa53YW0605.png

Ok,至此我们FastDFS集群+Nginx文件服务器已经安装完毕,接下来我们安装

Nginx+FastDFS+Lua+GraphicsMagick搭建类似淘宝的图片服务器

**12.Nginx+FastDFS+Lua+GraphicsMagick搭建类似淘宝的图片服务器 **

12.1 依赖包下载

本人已整理好FastDFS整合Nginx+FastDFS+Lua+GraphicsMagick所需要的依赖包,包含:
ngx_devel_kit
lua-nginx-module-0.10.9rc7
fastdfs-nginx-module-master
LuaJIT-2.0.4
lua-5.3.1
GraphicsMagick-1.3.18
autoSize.lua 定高或定宽模式裁切图片处理lua脚本
cropSize.lua 固定高宽模式裁切图片处理lua脚本
下载地址:
链接: https://pan.baidu.com/s/1CHc9l323ZdnQ-xkA686WwQ 提取码: 5xd8
下载完成后将Nginx+FastDFS+Lua+GraphicsMagick.zip上传至storage容器下的/usr/local/src目录中备用。
具体操作:
1、下载Nginx+FastDFS+Lua+GraphicsMagick.zip
2、使用ftp工具上传到宿主机

12.2 安装软件基础包

yum install -y gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel
yum install -y libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel readline-devel ncurses-devel

12.3 依赖安装

1.解压

cd /usr/local/src
unzip Nginx+FastDFS+Lua+GraphicsMagick.zip
cd Nginx+FastDFS+Lua+GraphicsMagick
mv * /usr/local/src

2.安装LuaJIT

cd /usr/local/src/LuaJIT-2.0.4
make && make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

3.安装Lua

cd /usr/local/src/lua-5.3.1
make linux && make install

4.安装GraphicsMagick

cd /usr/local/src/GraphicsMagick-1.3.18
./configure --prefix=/usr/local/GraphicsMagick-1.3.18 --enable-shared
make && make install
ln -s /usr/local/GraphicsMagick-1.3.18 /usr/local/GraphicsMagick

5.在其中一台服务器上面对nginx加入新的Module

# 停止Nginx服务
/usr/local/nginx/sbin/nginx -s stop
# 进入Nginx源码目录
cd /root/fastdfs/nginx-1.15.6/
#备份原先的Nginx二进制文件,防止安装失败可以回滚
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-backup

#注意这里的--add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
#这些都是你自己所在的目录,不要死copy,看一看

./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-pcre \
--add-module=/usr/local/src/lua-nginx-module-0.10.9rc7 \
--add-module=/usr/local/src/ngx_devel_kit \
--add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
--with-stream
 
 
#执行完上面然后执行make,主要这里不用make install,因为我已经安装过了
make
#最后覆盖之前nginx的二进制文件
cp objs/nginx /usr/local/nginx/sbin/nginx 

12.4配置Lua脚本实现图片缩略图

因为Nginx+FastDFS+Lua+GraphicsMagick.zip的包中已经包含了lua脚本,所以可以省去编写lua脚本的步骤。只需要通过修改nginx的配置文件,即可实现lua脚本的调用。

12.5修改nginx.conf配置

# 编辑nginx.conf
vi /usr/local/nginx/conf/nginx.conf
server {
    listen 8888;
    server_name localhost;

    set $img_thumbnail_root /var/fdfs/thumb; #缩略图保存的根目录
    set $img_file $img_thumbnail_root$uri;   #缩略图路径

    # like:/xx/xx/xx.jpg_100-.jpg or /xx/xx/xx.jpg_-100.jpg
    location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png)))_((\d+\-)|(\-\d+))\.(jpg|jpeg|gif|png)$ {
      root $img_thumbnail_root;    # root path for croped img
        set $fdfs_group_root /var/fdfs/data; #图片存放目录
        if (!-f $img_file) {    # if thumb file not exists
                add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  #  header for test
                add_header file-path $request_filename;    #  header for test
                set $request_filepath $fdfs_group_root$4;    # origin_img full path:/document_root/1.gif
                set $img_size $6;    # img width or height size depends on uri : img size like "-100" or "100-", "-" means auto size
                set $img_ext $5;    # file ext
                content_by_lua_file /usr/local/src/lua/autoSize.lua;    # load auto width or height crop Lua file
        }
    }
    
    # like:/pic/M00/xx/xx/xx.jpg_200x100.jpg
    location ~* ^(\/(\w+)(\/M00)(.+\.(jpg|jpeg|gif|png))_(\d+)+x(\d+)+\.(jpg|jpeg|gif|png))$ 		 {
        root $img_thumbnail_root;    # root path for croped img
        set $fdfs_group_root /home/fastdfs/data; #set fastdfs group path $2你自己的fastdfs data的目录

        if (!-f $img_file) {   # if thumb file not exists
                add_header X-Powered-By 'Nginx+Lua+GraphicsMagick By Yanue';  #  header for test
                add_header file-path $request_filename;    #  header for test
                set $request_filepath $fdfs_group_root$4;    # real file path
                set $img_width $6;    #  img width
                set $img_height $7;    #  img height
                set $img_ext $5;     # file ext
                content_by_lua_file /usr/local/src/lua/cropSize.lua;    # load crop Lua file
        }
    }
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }


}
修改完成后重新启动nginx

# 启动命令
/usr/local/nginx/sbin/nginx
# 查看日志
tail -f /usr/local/nginx/logs/error.log

12.6缩略图测试
file

至此,FastDFS集成Nginx+FastDFS+Lua+GraphicsMagick实现图片压缩完成。


版权声明:本文为centryFrom22th原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。