拉取Fastdfs镜像

docker pull delron/fastdfs

构建Tracker容器

是在Linux环境下,使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作用。

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

实际操作Ubuntu使用下面一条命令可用。

在Mac或Windows操作系统环境下,network=host(容器与主机享受相同的network namespace)会失效,此时需要指定对应的端口映射。

docker run -d --name tracker -p 22122:22122 -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

默认tracker是监听在22122端口的。

其中-v参数将本地的目录与容器中的/var/fdfs目录进行挂载。

这里可以看到tracker服务已经启动完成。

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                                          NAMES
04276cc2eace delron/fastdfs "/usr/bin/start1.sh …" 17 seconds ago Up 16 seconds 8080/tcp, 8888/tcp, 23000/tcp, 0.0.0.0:22122->22122/tcp, :::22122->22122/tcp tracker

构建Storage容器

使用docker镜像构建storage容器,用于启动存储服务器,提供容量和备份服务。

在执行下面命令时特别需要提醒的时,对应的IP地址,需要修改为tracker服务的IP地址,由于是在同一台电脑上操作,这里使用本机的内网地址即可,22122是tracker对应的端口。

示例,下面命令需要替换IP地址。

docker run -d --network=host --name storage -e TRACKER_SERVER=ip:22122 -v /var/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

替换IP地址之后对应Mac下的的具体执行操作:

docker run -d --name storage -p 8888:8888 -p 23000:23000 -e TRACKER_SERVER=47.120.38.34:22122 -v /var/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage

其中8888为Nginx对应的访问端口,23000是storage服务端口。

此时可查看docker的服务情况:

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                                                                           NAMES
347c9932ed4c delron/fastdfs "/usr/bin/start1.sh …" 12 seconds ago Up 12 seconds 8080/tcp, 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp, 22122/tcp, 0.0.0.0:23000->23000/tcp, :::23000->23000/tcp storage
04276cc2eace delron/fastdfs "/usr/bin/start1.sh …" 5 minutes ago Up 5 minutes 8080/tcp, 8888/tcp, 23000/tcp, 0.0.0.0:22122->22122/tcp, :::22122->22122/tcp tracker

storage可能启动报错

root@iZf8z9b7gfn1gjsdnv7t56Z:/var/fdfs# docker logs storage
ngx_http_fastdfs_set pid=8
try to start the storage node...
tail: cannot open '/var/fdfs/logs/storaged.log' for reading: No such file or directory
tail: no files remaining

报错解决:

# 原因:缺少目标文件
touch /var/fdfs/storage/logs/storaged.log

修改配置

经过上面的步骤,tracker和storage都启动完成。我们可以进入对应的docker容器查看一下默认的配置情况。

进入docker容器的命令为:

docker exec -ti storage bash

先进入storage,查看其对应配置文件中关于http访问的配置,配置文件在/etc/fdfs目录下的storage.conf。在最后一行可以看到如下配置:

# the port of the web server on this storage server
http.server_port=8888

也就是说,这个docker镜像中默认监听的是8888端口,当然此配置是可以修改的。如果修改为其他端口,对应的Nginx配置也需要修改。

那么Nginx配置在哪里呢?也在当前容器当中。Nginx配置文件的根目录为:

/usr/local/nginx/conf/

cat /usr/local/nginx/conf/nginx.conf

可以对其下的nginx.conf进行查看和修改。先来看一下默认配置:

server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

上面是关于server的配置,端口与storage的端口一一对应。如果需要修改时两个同步修改。

通过上面的操作你会发现默认FastDFS会需要开启8888、23000、22122端口,如果在Linux操作系统下,注意防火墙对对应端口的开放。

文件上传测试

在Django中集成。

  • 安装py3Fdfs
pip install py3Fdfs
  • 在django项目的settings文件中写入配置信息
# fastdfs
FASTDFS_CONF = {
'host_tuple': ['%s' % SERVER_NAME, ],
'connect_timeout': 30,
'network_timeout': 60,
'timeout': 30,
'tracker_server': '%s:22122' % SERVER_NAME,
'name': 'Tracker Pool',
'port': 22122,
}
  • app下测试文件test.py
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lg_shop.settings.dev')

from django.test import TestCase

from django.conf import settings
from fdfs_client.client import Fdfs_client # 加载配置文件
client = Fdfs_client(settings.FASTDFS_CONF)
# 上传文件
rets = client.upload_by_filename(r"C:\Users\Administrator\Pictures\icon.jpg")
print(rets) '''
# 上传成功后的返回值
{
"Group name": "group1", # 组名
"Remote file_id": "group1/M00/00/00/rBEAA2TsEjKAfxYVAAAP8lLos1M446.jpg", # 文件索引,可用于下载
"Status": "Upload successed.", # 文件上传结果反馈
"Local file name": "C:\\Users\\Administrator\\Pictures\\icon.jpg", # 文件上传全路径
"Uploaded size": "3.99KB", # 文件大小
"Storage IP": "47.120.38.34" # Storage地址
}
# 查看图片:地址+上面的Remote file_id
http://47.120.38.34:8888/group1/M00/00/00/rBEAA2TsEjKAfxYVAAAP8lLos1M446.jpg
# 有报错的话,看下报错信息就好,需要安装nginx '''

批量上传本地文件

import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lg_shop.settings.dev')

from django.test import TestCase

from django.conf import settings

from fdfs_client.client import Fdfs_client

# 加载配置文件
client = Fdfs_client(settings.FASTDFS_CONF)
# 批量上传文件(ps:项目跟目录下的static/images)
images_path = os.path.join(settings.BASE_DIR.parent, "static\images")
for line in os.listdir(images_path):
file_path = os.path.join(images_path, line)
print(file_path)
# 上传文件
# rets = client.upload_by_filename(file_path)
# print(rets)
# 返回的`Remote file_id`写入数据库
...

自定义Django文件存储类

from django.core.files.storage import Storage
from django.conf import settings class FastDFSStorage(Storage):
"""自定义文件存储类""" def __init__(self, fdfs_base_url=None):
self.fdfs_base_url = fdfs_base_url or settings.FDFS_BASE_URL def _open(self, name, mode='rb'):
pass def _save(self, name, content):
pass def url(self, name):
"""
返回文件的全路径
:param name: 文件路径
:return: ip+port+文件路径
"""
return self.fdfs_base_url + name

配置文件:

DEFAULT_FILE_STORAGE = 'extension.fdfs_storage.FastDFSStorage'
FDFS_BASE_URL = 'http://%s:8888/' % SERVER_NAME

docker部署fastdfs并在Django中集成的更多相关文章

  1. Docker部署FastDFS(附示例代码)

    1. FastDFS简介   FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文 ...

  2. 在django中集成ckeditor富文本

    目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ...

  3. docker 部署FastDFS

    教程:https://blog.csdn.net/fangchao2011/article/details/103202591 教程:https://www.jianshu.com/p/3f80cba ...

  4. 实战:docker搭建FastDFS文件系统并集成SpringBoot

    实战:docker搭建FastDFS文件系统并集成SpringBoot 前言 15年的时候,那时候云存储还远远没有现在使用的这么广泛,归根结底就是成本和安全问题,记得那时候我待的公司是做建站开发的,前 ...

  5. 阿里云服务器centos7,docker部署mysql+Redis+vue+springboot+Nginx+fastdfs,亲测可用

    一.购买云服务器 我是今年双十一期间在阿里云购买的服务器, 简单配置2核_4G_40G_3M,三年用了不到800块,不过当时我记得腾讯云更便宜,个人感觉,阿里的云服务器更加的稳定, 毕竟身经百战, 经 ...

  6. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  7. django中的缓存以及跨域

    django中的缓存 先来了解以下问题

  8. django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除

    运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下: fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.16 ...

  9. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  10. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

随机推荐

  1. [转帖][译]ARM大小核架构白皮书

    https://zhuanlan.zhihu.com/p/33411449 ARM big.LITTLE Processing with ARM Cortex-A15 & Cortex-A7 ...

  2. [转帖]引人入胜,实战讲解“Java性能调优六大工具”之linux命令行工具

    Java性能调优六大工具之Linux命令行工具 为了能准确获得程序的性能信息,需要使用各种辅助工具.本章将着重介绍用于系统性能分析的各种工具.熟练掌握这些工具,对性能瓶颈定位和系统故障排查都很有帮助. ...

  3. OpenEuler切换内核的方法-bcc学习后续

    OpenEuler切换内核的方法 摘要 昨天使用OpenEuler 22.03 LTS学习bcc但是一直不行. 没办法切换到CentOS8 还有 Anolis 8 很容易就可以直接还是用了 yum i ...

  4. Mysql 8.0前后,实现创建用户,指定用户只能访问指定的数据库中的表

    最近在做公司项目的过程中,出现了这样的需求.第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接口,第三方系统通过数据库直接将 ...

  5. ChatGPT 中,G、P、T 分别是什么意思?

    流行的技术名词按发音难度排序,ChatGPT 肯定排在前面. 到底它为什么叫做 ChatGPT 呢? 先说 GPT:Generative Pre-Training Transformer Genera ...

  6. 为不同版本python安装pip的正确做法

    想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.exe改个名字(嗯,我也这样讲过,在此纠正一下),这样区分开 ...

  7. dwm 美化

    在之前的博客中,我们将arch linux这个系统进行了一些美化,当然也是仅仅做到能看这个地步,要说跟网上其他那些惊艳的特效对比,肯定是不如的.但是我一直秉持一个观点,美化应该适可而止,只要不是丑的你 ...

  8. 基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地

    文心大模型,产业级知识增强大模型介绍 官网:https://wenxin.baidu.com/ 项目链接见文末 文心大模型开发套件ERNIEKit,面向NLP工程师,提供全流程大模型开发与部署工具集, ...

  9. 10.2 调试事件获取DLL装载

    理解了如何通过调试事件输出当前进程中寄存器信息,那么实现加载DLL模块也会变得很容易实现,加载DLL模块主要使用LOAD_DLL_DEBUG_EVENT这个通知事件,该事件可检测进程加载的模块信息,一 ...

  10. WebAssembly核心编程[2]:类型系统

    对于绝大多数编程语言来说,类型都是编程的基础,WebAssembly自然也不例外.总的来说,WebAssembly涉及的类型不多,很好掌握,接下来我们就来介绍一下WebAssembly编程涉及到的几种 ...