Mac 安装 fastdfs 笔记
1. 准备
- libfastcommon:https://github.com/happyfish100/libfastcommon.git
- fastdfs:https://github.com/happyfish100/fastdfs.git
- nginx:http://nginx.org/download/nginx-1.12.2.tar.gz
- fastdfs-nginx-module:https://github.com/happyfish100/fastdfs-nginx-module.git
2. 编译安装libfastcommon
参见 INSTALL 文件
cd libfastcommon
./make.sh
./make.sh install
#生成的文件
mkdir -p /usr/lib64
mkdir -p /usr/lib
install -m 755 libfastcommon.so /usr/lib64
install -m 755 libfastcommon.so /usr/lib
mkdir -p /usr/include/fastcommon
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h /usr/include/fastcommon
2. 安装 fastdfs
直接运行 make.sh
,sh make.sh install
直接安装
也可以修改 make.sh
, 指定安装位置,第51行添加
DESTDIR=/Users/sky/all/web/fastdfs
这样所有文件都在指定目录中,方便管理.
如果指定了安装位置,安装 fastdfs-nginx-module
会找不到文件.可以只留下 bin
文件的内容,将其他文件复制到系统对应的位置.
3. tracker 配置启动
-
修改配置文件
vi /etc/fdfs/tracker.conf # the base path to store data and log files # modify base_path=/Users/sky/all/web/fastdfs/base/trackerd
-
启动
/Users/sky/all/web/fastdfs/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
4. storage 配置及启动
-
修改 storage.conf
#拷贝一份新的storage配置文件: cp storage.conf.sample storage.conf #修改storage.conf vi storage.conf group_name=group1 base_path=base_path=/Users/sky/all/web/fastdfs/base/storaged store_path0=/Users/sky/all/web/fastdfs/store #如果有多个挂载磁盘则定义多个store_path,如下 #store_path1=..... #store_path2=...... tracker_server=192.168.1.103:22122 #配置tracker服务器:IP #如果有多个则配置多个tracker #tracker_server=192.168.101.4:22122 #配置http端口 http.server_port=80
-
启动
/Users/sky/all/web/fastdfs/bin/fdfs_storaged /etc/fdfs/storage.conf restart
5. 测试
-
fdfs_monitor /etc/fdfs/storage.conf
/Users/sky/all/web/fastdfs/bin/fdfs_monitor /etc/fdfs/storage.conf /Users/sky/all/web/fastdfs/bin/fdfs_monitor /etc/fdfs/client.conf
-
test
/Users/sky/all/web/fastdfs/bin/fdfs_test /etc/fdfs/client.conf upload /Users/sky/Pictures/pretty.jpg
-
测试结果
$ /Users/sky/all/web/fastdfs/bin/fdfs_test /etc/fdfs/client.conf upload /Users/sky/Pictures/pretty.jpg This is FastDFS client test program v5.12 Copyright (C) 2008, Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General Public License V3, which may be found in the FastDFS source kit. Please visit the FastDFS Home Page http://www.csource.org/ for more detail. [2018-04-27 15:16:09] DEBUG - base_path=/Users/sky/all/web/fastdfs/base/client, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0 tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=192.168.1.103, port=23000 group_name=group1, ip_addr=192.168.1.103, port=23000 storage_upload_by_filename group_name=group1, remote_filename=M00/00/00/wKgBZ1rizjmAIoMoAAAiJgI2OLI651.jpg source ip address: 192.168.1.103 file timestamp=2018-04-27 15:16:09 file size=8742 file crc32=37107890 example file url: http://192.168.1.103:8080/group1/M00/00/00/wKgBZ1rizjmAIoMoAAAiJgI2OLI651.jpg storage_upload_slave_by_filename group_name=group1, remote_filename=M00/00/00/wKgBZ1rizjmAIoMoAAAiJgI2OLI651_big.jpg source ip address: 192.168.1.103 file timestamp=2018-04-27 15:16:09 file size=8742 file crc32=37107890 example file url: http://192.168.1.103:8080/group1/M00/00/00/wKgBZ1rizjmAIoMoAAAiJgI2OLI651_big.jpg
6. fastdfs-nginx-module
-
配置
./configure \ --prefix=/Users/sky/all/web/nginx \ --with-http_ssl_module \ --with-pcre \ --sbin-path=/Users/sky/all/web/nginx/bin/nginx \ --with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl/include' \ --with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl/lib' \ --conf-path=/Users/sky/all/web/nginx/nginx.conf \ --pid-path=/Users/sky/all/web/nginx/run/nginx.pid \ --lock-path=/Users/sky/all/web/nginx/run/nginx.lock \ --http-client-body-temp-path=/Users/sky/all/web/nginx/run/nginx/client_body_temp \ --http-proxy-temp-path=/Users/sky/all/web/nginx/run/nginx/proxy_temp \ --http-fastcgi-temp-path=/Users/sky/all/web/nginx/run/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/Users/sky/all/web/nginx/run/nginx/uwsgi_temp \ --http-scgi-temp-path=/Users/sky/all/web/nginx/run/nginx/scgi_temp \ --http-log-path=/Users/sky/all/web/nginx/log/access.log \ --error-log-path=/Users/sky/all/web/nginx/log/error.log \ --with-http_gzip_static_module \ --with-http_v2_module \ --with-http_addition_module \ --add-module=/Users/sky/all/source/nginx/ngx-fancyindex \ --add-module=/Users/sky/all/source/nginx/fastdfs-nginx-module/src
说明:
--prefix=/Users/sky/all/web/nginx
: nginx 主目录--sbin-path=/Users/sky/all/web/nginx/bin/nginx
: nginx 的可执行文件--conf-path=/Users/sky/all/web/nginx/nginx.conf
:nginx 的配置文件--http-log-path=/Users/sky/all/web/nginx/log/access.log
:访问日志--error-log-path=/Users/sky/all/web/nginx/log/error.log
:错误日志--add-module=/Users/sky/all/source/nginx/ngx-fancyindex
:一个 nginx 目录美化插件,教程地址:nginx目录列表及美化--add-module=/Users/sky/all/source/nginx/fastdfs-nginx-module/src
:fastdfs-nginx-module
,插件目录
-
安装
make & make install
-
修改 nginx 的配置文件
subl /Users/sky/all/web/nginx/nginx.conf server { listen 8080; server_name localhost; location / { root html; index index.html index.htm; } location /download{ # 目录美化配置 include /Users/sky/all/web/nginx/html/Nginx-Fancyindex-Theme/fancyindex.conf; alias /Users/sky/Downloads; #指定目录所在路径 autoindex on; #开启目录浏览 autoindex_format html; #以html风格将目录展示在浏览器中 autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB autoindex_localtime on; #以服务器的文件时间作为显示的时间 charset utf-8,gbk; #展示中文文件名 } location /group1/M00 { alias /Users/sky/all/web/fastdfs/store/data; ngx_fastdfs_module; } #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; }
-
修改
/etc/fdfs/mod_fastdfs.conf
#存放 mod_fastdfs 日志的位置,不重要 base_path=/Users/sky/all/web/fastdfs/base/fastdfs-nginx-module #设置 tracker_server 的地址 tracker_server=localhost:22122 #设置该 storage 所属组 group_name=group1 #url 访问路径. false 为: /M00/00/xxx. true 为/group1/M00/00/XXX url_have_group_name = true #必须与 storage.conf 中的配置相同 store_path0=/Users/sky/all/web/fastdfs/store
-
创建符号链接
ln -s /Users/sky/all/web/fastdfs/store/data /Users/sky/all/web/fastdfs/store/data/M00
-
用上面的测试结果测试:
7. 安装 fastdht
-
下载
fastdht
git clone https://github.com/happyfish100/fastdht.git
-
下载
berkeley-db
wget http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz
该版本比较旧了,不过
fastdht
中的文档使用的是这个版本,能用就行. -
安装
berkeley-db
tar xzf db-4.7.25.tar.gz cd db-4.7.25/build_unix ../dist/configure --prefix=/Users/sky/all/db/berkeley-4.7.25 make; make install
我指定了
berkeley-db
安装到其他位置. -
编译安装
fastdht
- 修改 make.sh
TARGET_PREFIX=/Users/sky/all/web/fdht TARGET_CONF_PATH=/Users/sky/all/web/fdht/conf CFLAGS='-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/Users/sky/all/db/berkeley-4.7.25/include/ -L/Users/sky/all/db/berkeley-4.7.25/lib/'
cd FastDHT ./make.sh; sudo ./make.sh install
说明:
TARGET_PREFIX=/Users/sky/all/web/fdht
安装位置TARGET_CONF_PATH=/Users/sky/all/web/fdht/conf
配置文件位置CFLAGS='-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/Users/sky/all/db/berkeley-4.7.25/include/ -L/Users/sky/all/db/berkeley-4.7.25/lib/'
berkeley
的安装目录位置,注意写法./make.sh install
时,会有文件到链接到/usr
目录中去,需要root
权限.所以使用sudo
圆形
-
配置
-
修改
fdfhd.conf
# the base path to store data and log files # 日志和数据文件位置 base_path=/Users/sky/all/web/fdht/fastdht #引用fdht_servers.conf,注意 : include 语法,不适用的话要加两个 ## #include /Users/sky/all/web/fdht/conf/fdht_servers.conf
-
修改
fdht_servers.conf
group_count = 1 group0 = 192.168.1.103:11411
-
修改
fdht-client.conf
#modify keep_alive=1 #modify base_path=/Users/sky/all/web/fdht/fastdht-client #include /Users/sky/all/web/fdht/conf/fdht_servers.conf
-
-
启动
/Users/sky/all/web/fdht/bin/fdhtd /Users/sky/all/web/fdht/conf/fdhtd.conf restart
-
测试
/Users/sky/all/web/fdht/bin/fdht_test /Users/sky/all/web/fdht/conf/fdht_client.conf
mac 下用这个命令测试会有错.直接使用上传测试
-
上传一个文件
/Users/sky/all/web/fastdfs/bin/fdfs_upload_file /etc/fdfs/client.conf /Users/sky/Pictures/pretty.jpg
返回结果:
group1/M00/00/00/wKgBZ1rjRm2ANoTIAAAiJjMA_kk080.jpg
这时在
/Users/sky/all/web/fastdfs/store/data/00
目录发现有两个文件. 分别是:wKgBZ1rjRm2AYrHAAAAiJgI2OLI775.jpg
和wKgBZ1rjRm2ANoTIAAAiJjMA_kk080.jpg
其中
wKgBZ1rjRm2ANoTIAAAiJjMA_kk080.jpg
时指向wKgBZ1rjRm2AYrHAAAAiJgI2OLI775.jpg
的链接.可以多上传几次尝试. -
删除刚才上传的文件.
/Users/sky/all/web/fastdfs/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgBZ1rjRm2ANoTIAAAiJjMA_kk080.jpg
结束是
wKgBZ1rjRm2AYrHAAAAiJgI2OLI775.jpg
和wKgBZ1rjRm2ANoTIAAAiJjMA_kk080.jpg
都被删除了. -
总结:
fastdht
确实起到了文件去重的效果.文件只保留一份,继续上传相同的文件会创建文件的链接.如果最后一个链接被删除的时候,原文件也会被删除.