农民进城的时候首先尝试了FastDFS搭建图片分发系统。不久前,公司论坛上的图片终于压垮了服务器,已经达到了恐怖的34G,而服务器总容量只有40G。如果直接加硬盘的话,discuz里面的逻辑几乎要全部改过来,所以不行。如果把所有的图片都扔进对象存储,那么这会是一笔很大的开销(虽然钱不是我出的),所以还是不行。没办法,只能自己搞个图片服务器了。为什么选择FastDFSFastDFS是一个开源的轻量级分布式文件系统,对文件进行管理,其功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储的问题和负载均衡问题。特别适用于以文件为载体的在线服务,如相册网站、视频网站等。最重要的是:当存储空间不足或用完时,可以动态添加卷。您只需添加一台或多台服务器并将其配置为一个新的卷,从而扩展存储系统的容量。这样,如果服务器挂载的硬盘满了,只需要增加一块硬盘,修改配置即可继续使用。安装FastDFS下载安装FastDFS依赖包libfastcommon下载可以直接从这里下载,通过scp复制到服务器。root@ubuntu:/home/leung#unziplibfastcommon-master.ziproot@ubuntu:/home/leung#cdlibfastcommon-masterroot@ubuntu:/home/leung#./make.shroot@ubuntu:/home/leung#./make.shinstall安装完成如下图所示:下载并安装FastDFSDownload这里可以直接下载,通过scp复制到服务器上。root@ubuntu:/home/leung#tar-xfFastDFS_v5.08.tar_2.gzroot@ubuntu:/home/leung#cdFastDFSroot@ubuntu:/home/leung#./make.shroot@ubuntu:/home/leung#./make.shinstall查看是否有可用的fdfs命令:配置trackerserver(跟踪服务器)首先将fdfs的默认配置复制到fdfs的配置路径:/etc/fdfsroot@ubuntu:/home/leung/FastDFS#cp-rconf/*/etc/fdfs/root@ubuntu:/home/leung/FastDFS#ls/etc/fdfs/anti-steal.jpghttp.confstorage.conftracker.confclient.confmime.typesstorage_ids.conf修改Tracker的配置文件,tracker.conf。最基本的修改配置是:bind_addr:修改为YOUR_SERVER_IP,这里我设置为虚拟机的IP:192.168.0.144base_path:修改为自定义存储路径,我这里是/data/fastdfs/tracker保存退出。新建tracker文件夹:mkdir-p/data/fastdfs/tracker尝试启动tracker:(22122为tracker默认监听端口)root@ubuntu:/etc/fdfs#fdfs_trackerd/etc/fdfs/tracker.confroot@ubuntu:/etc/fdfs#ss-lntup|grep22122tcpLISTEN0128192.168.0.144:22122*:*users:(("fdfs_trackerd",pid=82767,fd=5))可以看到tracker已经在监听22122端口,说明启动成功。配置存储服务器(storageserver)修改存储配置文件storage.conf。最基本的修改配置是:bind_addr:修改为YOUR_SERVER_IP,我这里设置为虚拟机的IP:192.168.0.144base_path:修改为自定义存储路径,我这里是/data/fastdfs/storagestorage_path0:修改自定义存储路径,这里是/data/fastdfs/storagetracker_server:改成你的tracker监听的ip和端口号,这里是192.168.0.144:22122http.server_port:改成你的Nginx监听的端口号,这里是保存退出80端口,新建一个存储文件夹:mkdir-p/data/fastdfs/storage尝试开始存储:(23000为tracker默认监听端口)root@ubuntu:/etc/fdfs#fdfs_storaged/etc/fdfs/storage.confroot@ubuntu:/etc/fdfs#ss-lntup|grep23000tcpLISTEN0128192.168.0.144:23000*:*users:(("fdfs_storaged",pid=82800,fd=5))可以看到storage已经在监听23000端口,说明启动成功。文件上传测试基本配置完成后,需要上传文件测试,看是否真的可用。修改client.conf:base_path:改成tracker的路径,我这里是/data/fastdfs/trackertracker_server:改成你tracker监听的ip和端口号,我这里是192.168.0.144:22122保存退出.使用fdfs_upload_file测试是否上传成功:root@ubuntu:/home/leung#fdfs_upload_file/etc/fdfs/client.conf/home/leung/gal_gadot.jpggroup1/M00/00/00/wKgAkFk3zbeANnOvAAODyc0cLwA944.jpgroot@ubuntu:/home/leung#看到返回一个file_id(貌似是文件路径,在fdfs系统中叫file_id)说明上传图片成功,tracker和storage可用。在Nginx上使用FastDFS,现在图片已经上传了,但是怎么查看呢?是时候配置Nginx了。(Apache没试过)先下载Nginx的fdfs模块,修改模块配置文件(这里有个坑,不修改可能安装会报错)root@ubuntu:/home/leung/#wgethttps://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gzroot@ubuntu:/home/leung/#tarxffastdfs-nginx-module_v1.16.tar.gzroot@ubuntu:/home/leung/#cdfastdfs-nginx-module/src/root@ubuntu:/home/leung/fastdfs-nginx-module/src/#vimconfig//进入编辑器后,直接输入`:%s+/usr/local/+/usr/+g`包括`:`,替换全文的`/usr/local`配置路径,保存退出,复制fastdfs中的配置文件-nginx-module模块到/etc/中的fdfs目录并编辑:root@ubuntu:/home/leung/fastdfs-nginx-module/src#cpmod_fastdfs.conf/etc/fdfs/root@ubuntu:/home/leung/fastdfs-nginx-module/src#cd/etc/fdfs/root@ubuntu:/etc/fdfs#vimod_fastdfs.conf修改配置项:connect_timeout:连接超时,我这里设置为10秒base_path:路径,我有这里不用动,默认是/tmptracker_server:servertracker监听的ip和端口,我设置为192.168.0.144:22122storage_server_port:storage监听端口,这里默认23000url_have_group_name:url是否有group_name,最好设置一下这里为true,否则Nginx会报400错误store_path稍后0:更改为storage的存储路径,这里是/data/fastdfs/storagegroup_name:设置为默认的group1完成编辑,保存退出。安装Nginx依赖库:Ubuntu:apt-getinstalllibpcre3libpcre3-devzlib1g-devopenssllibssl-dev-yCentOS:yuminstall-ypcre-develzlib-devel由于虚拟机刚刚安装好,先安装Nginx.root@ubuntu:/home/leung#wgethttps://nginx.org/download/nginx-1.13.1.tar.gzroot@ubuntu:/home/leung#lsFastDFSFastDFS_v5.08.tar_2.gzgal_gadot.jpglibfastcommon-masterlibfastcommon-master.zipnginx-1.13.1.tar.gzroot@ubuntu:/home/leung#tar-xfnginx-1.13.1.tar.gzroot@ubuntu:/home/leung#cdnginx-1.13.1root@ubuntu:/home/leung/nginx-1.13.1#lsautoCHANGESCHANGES.ruconf配置contribhtmlLICENSEmanREADMEsrcroot@ubuntu:/home/leung/nginx-1.13.1#./configure--prefix=/usr/local/nginx/--with-http_stub_status_module--with-http_ssl_module--with-http_v2_module--with-http_gzip_static_module--with-ipv6--with-http_sub_module--add-module=/home/leung/fastdfs-nginx-module/src/root@ubuntu:/home/leung/nginx-1.13.1#make&&makeinstall注意,如果不是新安装的nginx,请先执行nginx-V查看当前安装的nginx模块,加上fdfs模块。另外,如果覆盖安装请不要makeinstall。有关详细信息,请参见以下操作。如果你已经安装了Nginx,只需要添加新的模块并重新编译即可。首先执行nginx-V查看nginx当前安装的模块,如下图,我的服务器之前是用apt安装的,所以安装的模块很多:复制下载configurearguments:后的参数,把它们在./configure后面,然后加上--add-module=/home/leung/fastdfs-nginx-module/src/即可,请根据实际情况替换add-module后的路径../configure--prefix=/etc/nginx--sbin-path=/usr/sbin/nginx--modules-path=/usr/lib/nginx/modules--conf-path=/etc/nginx/nginx.conf--error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log--pid-path=/var/run/nginx.pid--lock-path=/var/run/nginx.lock--http-client-body-temp-path=/var/cache/nginx/client_temp--http-proxy-temp-path=/var/cache/nginx/proxy_temp--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp--http-scgi-temp-path=/var/cache/nginx/scgi_temp--user=nginx--group=nginx--with-file-aio--with-threads--with-ipv6--with-http_addition_module--with-http_auth_request_module--with-http_dav_module--with-http_flv_module--with-http_gunzip_module--with-http_gzip_static_module--with-http_mp4_module--with-http_random_index_module--with-http_realip_module--with-http_secure_link_module--with-http_slice_module--with-http_ssl_module--with-http_stub_status_module--with-http_sub_module--with-http_v2_module--with-邮件--with-mail_ssl_module--with-stream--with-stream_ssl_module--with-cc-opt='-g-O2-fstack-protector--param=ssp-buffer-size=4-Wformat-Werror=format-security-Wp,-D_FORTIFY_SOURCE=2'--with-ld-opt='-Wl,-Bsymbolic-functions-Wl,-z,relro-Wl,-z,now-Wl,--as-needed'--add-module=/home/leung/fdfs/fastdfs-nginx-module/src/完成后只执行make,不执行makeinstall首先备份原来的nginx执行文件:我这里的执行路径是上面的/usr/sbin/nginx,大家换成真实路径root@localhost:~#mv/usr/sbin/nginx/usr/sbin/nginx-bakroot@localhost:/home/leung/fdfs/nginx-1.13.1#cpobjs/nginx/usr/sbin/nginxroot@localhost:/home/leung/fdfs/nginx-1.13.1#nginx-vnginxversion:nginx/1.13.1root@localhost:/home/leung/fdfs/nginx-1.13.1#nginx-V可以看到已经添加了fdfsModule,现在就可以顺利升级nginx了:root@localhost:/home/leung/fdfs/nginx-1.13.1#makeupgrade/usr/sbin/nginx-tnginx:配置文件/etc/nginx/nginx.conf语法为oknginx:配置文件/etc/nginx/nginx.conf测试成功kill-USR2`cat/var/run/nginx.pid`sleep1test-f/var/run/nginx.pid.oldbinkill-QUIT`cat/var/run/nginx.pid.oldbin`root@localhost:/home/leung/fdfs/nginx-1.13.1#到这里就完成了Nginx的升级/安装。在Nginx的配置文件中添加一句:location/group[0-9]/{ngx_fastdfs_module;}重启Nginx,访问你的网站,就可以看到图片了。PHPFDFS一个简单的服务器终于运行起来了,可以正常上传下载了。但是不可能每次上传图片都用命令行,既不安全也不麻烦。还是PHP大法好。如果PHP要支持fdfs,需要安装php的fdfs扩展。root@localhost:~#cd/home/leung/fdfs/FastDFS/php_clientroot@localhost:/home/leung/fdfs/FastDFS/php_client#phpizeroot@localhost:/home/leung/fdfs/FastDFS/php_client#./configure--with-php-config=/usr/local/php5/bin/php-configroot@localhost:/home/leung/fdfs/FastDFS/php_client#make&&makeinstallroot@localhost:/home/leung/fdfs/FastDFS/php_client#catfastdfs_client.ini>>/usr/local/php5/etc/php.ini其中--with-php-config后面就是你的php-config的路径,不知道的试试./直接配置(我的是apt-installeddirectconfigure)运行php-m|grepfastdfs查看模块是否安装成功重启php-fpm:servicephp-fpmrestartroot@localhost:/etc/php/7.0/fpm#cat/run/php/php7.0-fpm.pid17904root@localhost:/etc/php/7.0/fpm#kill-USR217904测试PHP上传图片新建php文件:
