1. Docker安装运行FastDFS
1.获取FastDFS镜像
# 从仓库拉取镜像
$ sudo docker image pull delron/fastdfs
2.开启tracker容器
- 我们将 tracker 运行目录映射到宿主机的
/var/fdfs/tracker
目录中。
$ sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
3.开启storage容器
- TRACKER_SERVER=Tracker的ip地址:22122(Tracker的ip地址不要使用127.0.0.1)
- 我们将 storage 运行目录映射到宿主机的
/var/fdfs/storage
目录中。
$ sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.219.131:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
4.查看宿主机映射路径
注意:如果无法重启storage容器,可以删除/var/fdfs/storage/data
目录下的fdfs_storaged.pid
文件,然后重新运行storage。
2. FastDFS客户端上传文件
1.安装FastDFS客户端扩展
- 安装准备好的
fdfs_client-py-master.zip
到虚拟环境中
$ pip install fdfs_client-py-master.zip
$ pip install mutagen==1.40
$ pip install requests
2.准备FastDFS客户端扩展的配置文件
utils.fastdfs.client.conf
base_path=FastDFS客户端存放日志文件的目录
tracker_server=运行Tracker服务的机器ip:22122
3.FastDFS客户端实现文件存储
# 使用 shell 进入 Python交互环境
$ python manage.py shell
上传文件需要先创建fdfs_client.client.Fdfs_client的对象,并指明配置文件,如
from fdfs_client.client import Fdfs_client
client = Fdfs_client('utils/fastdfs/client.conf')
通过创建的客户端对象执行上传文件的方法
client.upload_by_filename(文件名)
或
client.upload_by_buffer(文件bytes数据)
如:
>>> from fdfs_client.client import Fdfs_client
>>> client=Fdfs_client('utils/fastdfs/client.conf')
>>> client.upload_by_filename('/home/poppies/Desktop/images/0.jpg')
getting connection
<fdfs_client.connection.Connection object at 0x7f25174eb940>
<fdfs_client.fdfs_protol.Tracker_header object at 0x7f25174eb908>
{'Remote file_id': 'group1/M00/00/00/wKjlhFsTgJ2AJvG_AAAyZgOTZN0850.jpg', 'Uploaded size': '12.00KB',
'Local file name': '/home/python/Desktop/images/0.jpg', 'Storage IP': '192.168.229.132',
'Group name': 'group1', 'Status': 'Upload successed.'}
- ‘Group name’: ‘Storage组名’,
- ‘Remote file_id’: ‘文件索引,可用于下载’,
- ‘Status’: ‘文件上传结果反馈’,
- ‘Local file name’: ‘上传文件全路径’,
- ‘Uploaded size’: ‘文件大小’,
- ‘Storage IP’: ‘Storage地址’
3. 浏览器下载并渲染图片
思考:如何才能找到在Storage中存储的图片?
-
协议:
http
-
IP地址:192.168.103.158
Nginx
服务器的IP地址。- 因为 FastDFS 擅长存储静态文件,但是不擅长提供静态文件的下载服务,所以我们一般会将 Nginx 服务器绑定到 Storage ,提升下载性能。
-
端口:8888
Nginx
服务器的端口。
-
路径:
group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
- 文件在Storage上的文件索引。
-
完整图片下载地址
http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
编写测试代码:
utils.fdfs.html
<img src="http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg" width="320" height="480">
录入商品数据和图片数据
1. SQL脚本录入商品数据
导入数据之前,务必确保已经对goods和contents子应用的模型进行了迁移
python manage.py makemigrations python manage.py migrate
$ mysql -h127.0.0.1 -uroot -pmysql tuling_mall < 文件路径/goods_data.sql
2. FastDFS服务器录入图片数据
1.准备新的图片数据压缩包
2.删除 Storage 中旧的
data
目录
3.拷贝新的图片数据压缩包到 Storage,并解压
# 解压命令
sudo tar -zxvf data.tar.gz
4.查看新的
data
目录