ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

参考文章

Ubuntu下安装并配置FastDFS

FastDFS搭建单机图片服务器(一)

安装配置流程优化整理

下面是将两篇文章的流程整理一下,方便配置安装。

请先创建下面几个目录,等下配置要用到的:

创建几个后面能用到的目录
mkdir /home/fastdfs/
mkdir /home/fastdfs/storage
mkdir /home/fastdfs/storage/storage-image
mkdir /home/fastdfs/tracker
mkdir /home/fastdfs/client
mkdir /home/fastdfs/fast-nginx
FastDFS的项目主页:https://github.com/happyfish100/fastdfs

1、安装git

fastdfs依赖libfastcommon,需要从github上clone到本地编译安装。因此首先需要安装git。

apt-get install git

2、克隆及安装libfastcommon库

libfastcommon的源在项目 https://github.com/happyfish100/libfastcommon 需要使用git将其clone至本地安装。

执行命令:

git clone https://github.com/happyfish100/libfastcommon.git

进入libfastcommon目录,依次执行脚本:

./make.sh
./make.sh install

设置环境变量和软链接

在32位ubuntu中,libfastcommon会安装在/usr/lib 中,64位系统则安装在 /usr/lib64 中。依次执行以下命令:(根据自己的操作系统选择路径)

export LD_LIBRARY_PATH=/usr/lib/

ln -s /usr/lib/libfastcommon.so /usr/local/lib/libfastcommon.so

下载、解压并安装FastDFS

FastDFS的Github下载地址为:https://github.com/happyfish100/fastdfs/releases

下载完成后,执行命令:

补充说明
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

目前是5.11版本。

注意!FastDFS版本必须 >= 5.11
不然在后期使用fastdfs-nginx-module模块整合Nginx时候会出错,用了一个上午才明白的血淋淋的教训。

1、进入目录
cd /usr/local
2、下载FastDFS到/usr/local目录下
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
3、解压 FastDFS ,命令:
tar -zxvf V5.11.tar.gz

4、进入fastfds-5.11目录
cd fastdfs-5.11

5、编译
./make.sh

如果报错如果报错
…/storage/trunk_mgr/trunk_shared.c:435:undefined reference to ‘fc_safe_read’
检查是否libfastcommon版本过低了,1.0.7的版本玩不起来,我更新成最新版本libfastcommon-master,然后再安装fastdfs,问题解决。

6、安装
./make.sh install

配置 Tracker 服务

上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。
1、复制重命名配置文件

cd /etc/fdfs 
cp tracker.conf.sample tracker.conf

2、打开

vim tracker.conf

主要修改两个参数


base_path=/home/fastdfs/tracker

http.server_port=80

port=22122这个端口参数不建议修改,除非你已经占用它了。

修改完成保存并退出 vim ,这时候我们可以使用

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start 
在阿里云上面使用 
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start 
启动就是正常的。
重启 
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

配置 Storage 服务

现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有 Group(组)的概念,同一组内服务器互备同步,这里不再演示。

1、复制重命名配置文件

cd /etc/fdfs 

会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它

cp storage.conf.sample storage.conf

2、打开文件

vim storage.conf

修改几个参数

group_name=group1
base_path=/home/fastdfs/storage/storage-image
store_path0=/home/fastdfs/storage/storage-image
tracker_server=192.168.86.131:22122

192.168.86.131改成你的本机ip。

如果部署的是阿里云ECS服务器,
tracker_server=公网ip:22122

stroage的port=23000这个端口参数也不建议修改,默认就好,除非你已经占用它了。
修改完成保存并退出 vim ,这时候我们依然想优雅地启动 Storage服务,带目录的命令不够优雅,这里还是使用ln -s 建立软链接。

在阿里云上面使用

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start 

启动就是正常的。

注:在阿里云上进行配置,storaged可能会启动失败,需要配置云服务器实例安全组,添加安全组配置,打开22122和23000端口。

然后关闭系统防火墙:systemctl stop firewalld.service

退出保存即可。

5、查看是否正常启动

netstat -unltp|grep fdfs 

如果22122和23000端口都在监听,则启动正常了。

尝试通信

到这一步已经正常启动了tracker和storage服务。
指定命令尝试两者进行通信

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

启动正常的话,就可上传图片了,但是目前还无法下载。

测试上传

注意,开启服务是这个:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

准备一个文件,然后上传,譬如:

fdfs_test /etc/fdfs/client.conf upload /home/images/1.jpg

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

系统服务化

本来想要写个系统脚本用systemctl来管理tracker以及storage的。想不到已经有了:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试
好了,在往后的时刻我们希望服务能够开机自启动;
所以有:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

欸?没办法开机自启动?

我们看看service文件在哪里:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

好了,那其中一个出来看看文件内容:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

额。这个怎么解决好呢?
查到了解决方案:
linux debain systemd 开机启动 nodejs 兼容原initd启动 forever 开机自启

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

得到了兄弟的启示,我们写两个服务吧:

sudo touch /lib/systemd/system/fdfs_trackerd.service
vim  /lib/systemd/system/fdfs_trackerd.service
#输入内容如下:
[Unit]
Description=开发环境下的fastdfs tracker服务。
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
ExecStop=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

systemctl stop fdfs_trackerd
重新加载service文件
systemctl daemon-reload

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试
好了,我们试着启动然后看看状态,果然是我们写的service。
同理,storage

sudo touch /lib/systemd/system/fdfs_storaged.service
vim  /lib/systemd/system/fdfs_storaged.service
#输入内容如下:
[Unit]
Description=开发环境下的fastdfs storage服务。
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
ExecStop=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
systemctl stop fdfs_storaged
重新加载service文件
systemctl daemon-reload

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

好了,果然是自定义的storaged服务。

下面继续配置开机启动:

systemctl enable fdfs_trackerd
systemctl enable fdfs_storaged

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

诶,不成功啊。。
看看问题。

systemctl doesn’t recognize my service: Default-Start contains no runlevels, aborting

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

好,我们看看init.d下面有什么:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

。。。欸,不好惹啊。。这两个文件没办法删除也不能修改,看来。。

好了,我们改改自己的服务的名字

cd  /lib/systemd/system/
systemctl stop fdfs_trackerd
systemctl stop fdfs_storaged

mv fdfs_trackerd.service  fdfs_user_trackerd.service
mv fdfs_storaged.service fdfs_user_storaged.service

重新加载service文件
systemctl daemon-reload

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

重启以后再看看是不是自动启动:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

我们测试一下能不能上传图片:

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

然后看看url:
ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试
done。

storage及client配置中ip地址还有host name配置研究

估计在storage conf还有client conf中要配置ip地址对于研发党来说有一定难度,假如每次自己机器的ip地址都变那怎么办?

下面按照ubuntu的一般hosts文件来尝试配置及实验。

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

localhost以及 tw-server都是127.0.0.1的别名,可以作为host name,那么,下面以127.0.0.1,localhost,以及tw-server来分别配置storage.conf和client.conf查看结果。

127.0.0.1

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

修改为127.0.0.1重启服务之后,无法上传。

localhost

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

结论:localhost不行。

tw-server
自定义域名看行不信。

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

ubntu下单机配置fastdfs作为开发环境(1)---fastdfs的安装、配置及测试

结论,自定义域名可以解决代替ip地址,就是说,fastdfs可以用自定义的域名来设置storage以及client,不用每次手动改ip地址了。

总结

网上的对fastdfs的配置文件很多的,有时候要费点时间去验证和辨别。