一、Docker安装运行FastDFS

1.获取FastDFS镜像

# 从仓库拉取镜像

$ sudo docker image pull delron/fastdfs

# 解压⽂档中本地镜像

$ sudo docker load -i ⽂件路径/fastdfs_docker.tar

sudo docker load -i /home/sanha/fastdfs_docker.tar

创建挂载文件

# cd /var

# mkdir fdfs

# mkdir storage

# mkdir tracker

➜ ~ sudo su

[sudo] password for sanha:

root@sanha-virtual-machine:/home/sanha# cd /var/fdfs/

root@sanha-virtual-machine:/var/fdfs# ls

root@sanha-virtual-machine:/var/fdfs# mkdir storage

root@sanha-virtual-machine:/var/fdfs# mkdir tracker

root@sanha-virtual-machine:/var/fdfs# ls

storage tracker

root@sanha-virtual-machine:/var/fdfs#

2.开启tracker容器 我们将 tracker 运⾏⽬录映射到宿主机的 /var/fastdfs/tracker⽬录中。

sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

root@sanha-virtual-machine:/home/sanha# cd /var/fdfs/

root@sanha-virtual-machine:/var/fdfs# sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

26fef3c64e890d51d9e069de14defcd6ed3c3624d224e73194bf6ed67a416437

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.231.130:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

root@sanha-virtual-machine:/var/fdfs# sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.231.130:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

324f0152a4a33315f024fd53d9fc0ac9f8d5836ee2eb568580fa12b2fc5bc6bf

4.启动容器

root@sanha-virtual-machine:/var/fdfs# sudo docker container start storage

storage

root@sanha-virtual-machine:/var/fdfs# sudo docker container start tracker

tracker

root@sanha-virtual-machine:/var/fdfs#

查看正在运行的容器

sudo docker container ls

5.查看宿主机映射路径 注意:如果⽆法重启storage容器,可以删除/var/fdfs/storage/data⽬录下fdfs_storaged.pid ⽂件,然后重新运⾏storage。

二、FastDFS客户端上传⽂件

Python版本的FastDFS客户端使⽤参考⽂档:https://github.com/JaceHo/fdfs_client-py

1.安装FastDFS客户端扩展 安装模块虚拟环境中

$ pip install py3Fdfs

$ pip install mutagen

$ pip install requests

(mg_env) ➜ apps git:(dev) ✗ pip install py3Fdfs

Collecting py3Fdfs

Downloading py3Fdfs-2.2.0.tar.gz (36 kB)

Building wheels for collected packages: py3Fdfs

Building wheel for py3Fdfs (setup.py) ... done

Created wheel for py3Fdfs: filename=py3Fdfs-2.2.0-py3-none-any.whl size=36905 sha256=5134bf8307bc582cdcef0b7c99f7283bd86223015ff13257c8c81dd758cdc751

Stored in directory: /home/sanha/.cache/pip/wheels/d4/7b/08/f6d13273617b5c6694c08386b89f3af55db5010ef56933fffc

Successfully built py3Fdfs

Installing collected packages: py3Fdfs

Successfully installed py3Fdfs-2.2.0

(mg_env) ➜ apps git:(dev) ✗ pip install mutagen

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/mutagen/

Collecting mutagen

Downloading mutagen-1.46.0-py3-none-any.whl (193 kB)

|████████████████████████████████| 193 kB 13 kB/s

Installing collected packages: mutagen

Successfully installed mutagen-1.46.0

(mg_env) ➜ apps git:(dev) ✗ pip install requests

Requirement already satisfied: requests in /home/sanha/.virtualenvs/mg_env/lib/python3.8/site-packages (2.28.2)

Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/sanha/.virtualenvs/mg_env/lib/python3.8/site-packages (from requests) (1.26.14)

Requirement already satisfied: charset-normalizer<4,>=2 in /home/sanha/.virtualenvs/mg_env/lib/python3.8/site-packages (from requests) (3.0.1)

Requirement already satisfied: certifi>=2017.4.17 in /home/sanha/.virtualenvs/mg_env/lib/python3.8/site-packages (from requests) (2022.12.7)

Requirement already satisfied: idna<4,>=2.5 in /home/sanha/.virtualenvs/mg_env/lib/python3.8/site-packages (from requests) (3.4)

2.准备FastDFS客户端扩展的配置⽂件 mgproject.utils.fastdfs.client.conf

# connect timeout in seconds

# default value is 30s

connect_timeout=30

# network timeout in seconds

# default value is 30s

network_timeout=60

# the base path to store log files

base_path=/home/ynxiaolu/Desktop

# 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.231.130:22122

3.FastDFS客户端实现⽂件存储

# 使⽤ shell 进⼊ Python交互环境

$ python manage.py shell

Python 3.8.10 (default, Nov 14 2022, 12:59:47)

[GCC 9.4.0] on linux

Django 2.2

# 1. 导⼊FastDFS客户端扩展

>>> from fdfs_client.client import Fdfs_client, get_tracker_conf

# 2. 创建FastDFS客户端实例

>>> tracker_path = get_tracker_conf('/home/sanha/Desktop/PythonProjects/mangguo/mgproject/mgproject/utils/fastdfs/client.conf')

>>> client = Fdfs_client(tracker_path)

# 3. 调⽤FastDFS客户端上传⽂件⽅法

>>> ret = client.upload_by_filename('/home/sanha/Desktop/sanha.jpg')

>>>

ret = {

'Group name': b'group1',

'Remote file_id':

b'group1/M00/00/00/wKjngmP8KOqAScumAAEYnyGQQes988.jpg',

'Status': 'Upload successed.',

'Local file name': '/home/sanha/Desktop/sanha.jpg',

'Uploaded size': '70.16KB',

'Storage IP': b'192.168.231.130'}

ret = {

'Group name': 'Storage组名',

'Remote file_id': '⽂件索引,可⽤于下载',

'Status': '⽂件上传结果反馈',

'Local file name': '上传⽂件全路径',

'Uploaded size': '⽂件⼤⼩',

'Storage IP': 'Storage地址'

}

查看图片存储路径

➜ ~ cd /var/fdfs

➜ fdfs ls

storage tracker

➜ fdfs cd storage

➜ storage ls

data logs

➜ storage cd data

➜ data ls

00 06 0C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A 60 66 6C 72 78 7E 84 8A 90 96 9C A2 A8 AE B4 BA C0 C6 CC D2 D8 DE E4 EA F0 F6 FC sync

01 07 0D 13 19 1F 25 2B 31 37 3D 43 49 4F 55 5B 61 67 6D 73 79 7F 85 8B 91 97 9D A3 A9 AF B5 BB C1 C7 CD D3 D9 DF E5 EB F1 F7 FD

02 08 0E 14 1A 20 26 2C 32 38 3E 44 4A 50 56 5C 62 68 6E 74 7A 80 86 8C 92 98 9E A4 AA B0 B6 BC C2 C8 CE D4 DA E0 E6 EC F2 F8 fdfs_storaged.pid

03 09 0F 15 1B 21 27 2D 33 39 3F 45 4B 51 57 5D 63 69 6F 75 7B 81 87 8D 93 99 9F A5 AB B1 B7 BD C3 C9 CF D5 DB E1 E7 ED F3 F9 FE

04 0A 10 16 1C 22 28 2E 34 3A 40 46 4C 52 58 5E 64 6A 70 76 7C 82 88 8E 94 9A A0 A6 AC B2 B8 BE C4 CA D0 D6 DC E2 E8 EE F4 FA FF

05 0B 11 17 1D 23 29 2F 35 3B 41 47 4D 53 59 5F 65 6B 71 77 7D 83 89 8F 95 9B A1 A7 AD B3 B9 BF C5 CB D1 D7 DD E3 E9 EF F5 FB storage_stat.dat

➜ data cd 00/00

➜ 00 ls

wKjngmP8KOqAScumAAEYnyGQQes988.jpg

3. 浏览器下载并渲染图⽚

思考:如何才能找到在Storage中存储的图⽚? 协议:http

IP地址:192.168.231.130

Nginx服务器的IP地址。 因为 FastDFS 擅⻓存储静态⽂件,但是不擅⻓提供静态⽂件的下载服务, 所以我们⼀般会将 Nginx 服务器绑定到 Storage ,提升下载性能。

端⼝:8888 Nginx服务器的端⼝。

路径:group1/M00/00/00/wKjngmP8KOqAScumAAEYnyGQQes988.jpg ⽂件在Storage上的⽂件索引。

完整图⽚下载地址 http://192.168.231.130:8888/group1/M00/00/00/wKjngmP8KOqAScumAAEYnyGQQes988.jpg

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: