平时应用的文件存储一般都是需要自己的文件服务器来保存,当然你也可以买阿里云的文件存储,但是我们为了节省成本,并且能更好的控制我们的文件存储管理,所以我们选择了自己搭建文件服务器器,并选择了FastDFS作为搭建工具。
1,安装依赖包
zlib-1.2.11.tar
libfastcommon
下载并安装libfastcommon
tar -zxvf V1.0.7.tar.gz
[root@ecs-dev-001 libfastcommon-1.0.7]# ./make.sh && ./make.sh install
下载并安装Zlib
[root@ecs-dev-001 zlib-1.2.11]# ./configure
[root@ecs-dev-001 zlib-1.2.11]# make && make install
下载FastDFS并安装
[root@ecs-dev-001 soft]# tar zxvf V5.05.tar.gz
[root@ecs-dev-001 soft]# cd fastdfs-5.05/
[root@ecs-dev-001 fastdfs-5.05]# ./make.sh
[root@ecs-dev-001 fastdfs-5.05]# ./make.sh install
2, 配置 Tracker 服务
上述步骤成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。看命令:
cp tracker.conf.sample tracker.conf
vim tracker.conf
修改一下配置项
# the tracker server port
port=22122
# the base path to store data and log files
base_path=/data/fastdfs
# which group to upload file
# when store_lookup set to 1, must set store_group to the group name
store_group=app
# HTTP port on this tracker server
http.server_port=80
然后启动Tracker服务
创建软连接
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
启动服务
启动服务:service fdfs_trackerd start
查看监听:netstat -unltp|grep fdfs
3,配置 Storage 服务
配置完Tracker服务后,我们开始配置Storage服务。直接开始配置,依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。还看命令:
cp storage.conf.sample storage.conf
vim storage.conf
修改以下配置
# the storage server port
port=23000
# the base path to store data and log files
base_path=/data/fastdfs/storage
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/data/fastdfs/storage
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.1.126:22122
建立软连接
[root@ecs-dev-001 fdfs]# ln -s /usr/bin/fdfs_storaged /usr/local/bin
启动服务(启动服务之前,一定要先建立好目录/data/fastdfs/storage)
service fdfs_storaged start
检查是否启动成功
[root@ecs-dev-001 fdfs]# netstat -unltp|grep fdfs
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 20911/fdfs_storaged
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 20518/fdfs_trackerd
这就说明Tracker和Storage服务都安装完成,并且已经成功启动了。
这就完成了,还不能,我们需要安装Nginx来对外提供存储和文件下载访问服务。
4,安装 Nginx 和 fastdfs-nginx-module
下载nginx和 fastdfs-nginx-module
nginx-1.9.9.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
解压并安装
编译nginx
./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src/ --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
编译的时候如果报错:
In file included from ../fastdfs-nginx-module/src//ngx_http_fastdfs_module.c:6:0:
../fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory
#include "fdfs_define.h"
解决方法:
由于编译nginx时候系统会到/usr/local/include,而编译安装fastdfs-nginx-module时则默认保存在了/usr/include目录
[root@ecs-dev-001 soft]# cd fastdfs-nginx-module/src/
[root@ecs-dev-001 src]# ll
total 76
-rw-rw-r-- 1 500 500 33207 Aug 30 2013 common.c
-rw-rw-r-- 1 500 500 3479 Jan 3 2012 common.h
-rw-rw-r-- 1 500 500 447 Nov 4 2010 config
-rw-rw-r-- 1 500 500 3679 Mar 30 2013 mod_fastdfs.conf
-rw-rw-r-- 1 500 500 28542 May 4 2014 ngx_http_fastdfs_module.c
[root@ecs-dev-001 src]# vi config
ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
编译完成后,安装
[root@ecs-dev-001 nginx-1.9.9]# make && make install
5,配置 fastdfs-nginx-module 和 nginx
复制fastdfs-nginx-module目录下的mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下
[root@ecs-dev-001 nginx-1.9.9]# cd ../fastdfs-nginx-module/src/
[root@ecs-dev-001 src]# ll
total 76
-rw-rw-r-- 1 500 500 33207 Aug 30 2013 common.c
-rw-rw-r-- 1 500 500 3479 Jan 3 2012 common.h
-rw-rw-r-- 1 500 500 429 Dec 24 19:02 config
-rw-rw-r-- 1 500 500 3679 Mar 30 2013 mod_fastdfs.conf
-rw-rw-r-- 1 500 500 28542 May 4 2014 ngx_http_fastdfs_module.c
[root@ecs-dev-001 src]# cp mod_fastdfs.conf /etc/fdfs/
然后修改mod-fastdfs.conf配置文件(其他配置不建议修改)
# the base path to store log files
base_path=/data/fastdfs/storage
# FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.1.126:22122
# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
store_path0=/data/fastdfs/storage
接着把fastdfs-5.05下面的配置中还没有存在/etc/fdfs中的拷贝进去
[root@ecs-dev-001 fastdfs-5.05]# cd conf/
[root@ecs-dev-001 conf]# ll
-rw-rw-r-- 1 root root 23981 Nov 22 2014 anti-steal.jpg
-rw-rw-r-- 1 root root 1461 Nov 22 2014 client.conf
-rw-rw-r-- 1 root root 858 Nov 22 2014 http.conf
-rw-rw-r-- 1 root root 31172 Nov 22 2014 mime.types
-rw-rw-r-- 1 root root 7829 Nov 22 2014 storage.conf
-rw-rw-r-- 1 root root 105 Nov 22 2014 storage_ids.conf
-rw-rw-r-- 1 root root 7102 Nov 22 2014 tracker.conf
[root@ecs-dev-001 conf]# cp anti-steal.jpg http.conf mime.types /etc/fdfs/
至此nginx和fastdfs已经搭建完成,下面开始配置nginx
WEB站点转发规则配置
location / {
proxy_pass http://192.168.0.11:28085/; #首先pass到应用服务器
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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
Nginx文件处理规则
location /app/M00 {
charset utf-8;
internal; (表示这个只做Nginx内部处理)
expires -1s;
ngx_fastdfs_module;
#proxy_pass http://192.168.0.11:38088;
}
具体详细架构可以参考我的另一篇博客:https://blog.csdn.net/u012397222/article/details/84944613