django框架,nginx编译fdfs模块

本文详细介绍了如何在Django项目中整合使用nginx和FastDFS,包括fdfs的安装配置、nginx与fastfds-nginx-module的结合以及Django与fdfs的交互。在配置过程中注意tracker和storage的服务绑定地址,以及权限设置,确保服务正常启动并能成功上传及访问文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django框架,nginx, fdfs模块的整合使用

首先声明以下,这里没有那种照抄的代码,都是需要理解结合自己的实际情况操作的,文中只是自己对一些错误和难点的整理,不是整体。

步骤一:fdfs的安装配置

一般选择在/usr/local/src下操作

一 安装依赖包libfastcommon

	wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
	tar  xvf  V1.0.38.tar.gz
	cd libfastcommon-1.0.38
	./make.sh
	./make.sh install

二 安装fastdfs

	wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
	tar xvf V5.11.tar.gz -C /usr/local/src/
	cd /usr/local/src/fastdfs-5.11
	./make.sh
	./make.sh install

三 配置Tracker服务

	cd /etc/fdfs/
	cp tracker.conf.sample tracker.conf	
	vim tracker.conf
		bind_addr = 192.168.152.156		绑定地址,如果为空,绑定主机所有地址
		port = 22122
		base_path = /data/fastdfs/tracker		保存数据和日志文件的路径

tracker.conf中的bind_addr绑定的地址必须是内网地址,否则无法启动服务。
在本篇结尾会总结,如果是外网服务器,各个配置文件的IP地址的配置情况。

四 配置Storage服务

		cd /etc/fsfs
		cp  storage.conf.sample  storage.conf
		vim storage.conf
			bind_addr = 192.168.152.156
			port =23000
			base_path = /data/fastdfs/storage		
			store_path0 = /data/fastdfs/storage		保存文件的路径
			tracker_server = 192.168.152.156:22122		管理tracker

storage.conf中的bind_addr,如果是用在服务器,需要使用外网IP绑定,否则客户端无法访问获取图片。
tracker_server要和tracker绑定IP一致

五 启动服务

fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start

六 客户端配置

cd /etc/fdfs
cp client.conf.sample /etc/fdfs/client.conf
vim client.conf
	base_path = /data/fastdfs/tracker
	tracker_server = 192.168.152.156:22122

tarcker_server与tracker的绑定地址一致

七 上传文件测试

fdfs_upload_file  /etc/fdfs/client.conf  需要上传文件名

当出现 group1/… 就说明上传成功
于是可以通过 http:src=“HTTP://192.168.152.156:8888/group1/…”>访问(需要配置完nginx才能访问)

步骤二:nginx和fastfds-nginx-module的结合

一 因为yum装nginx真的方便很多,这里,吴某人就是直接使用的yum安装nginx,再进行重新编译nginx添加对应fdfs模块。

我们在/usr/local/src目录下载对应的nginx版本以及对应的module

	wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
	tar xvf V1.20.tar.gz -C /usr/local/src/
	nginx -V				// 查看我们yum安装的nginx版本(我们这里是1.16.1),下边一串儿就是我们所需要编译的部分。 图在下面
	wget http://nginx.org/download/nginx-1.16.1.tar.gz
	tar xvf nginx-1.16.1.tar.gz
	cd nginx-1.16.1
	./configure .....(那一大串编译配置) --add-module=/usr/local/src/fastds-nginx-module-1.20/src (这个是你解压候后的mfdfs-module下的/src目录) 
	make & make install 		
	nginx -V   // 可以看到我们编译完成的配置项

当make发生错误时,需要修改模块的配置(根据实际情况选择是否包含…/local/…这层目录)
vim /usr/local/src/fastfds-nginx-module-……/src/config

ngx_module_incs="/usr/local/include/fastdfs /usr/include/fastcommon/”
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

接着重新./configure … ; make ; make install
因为我们是根据yum安装的编译,所以不需要重新拷贝执行命令。
这个nginx -V 查看的编译项

二 模块配置文件

	cp /usr/local/src/fast……1.20/src/mod_fastdfs.conf 文件到/etc/fdfs/ 并修改
	connect_timeout = 10
	tracker_server = 192.168.152.156:22122
	url_have_group_name = true
	store_path0 = /home/wsx/fdfs/storage		//对应存储位置

	cd /usr/local/src/fastdfs-5.11/conf
	cp http.conf mime.types /etc/fdfs/

tarcker_server配置对应的tracker绑定地址

三 nginx配置

vim /etc/nginx/nginx.conf

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

启动nginx服务即可访问对应文件

步骤三: django和fdfs的交互

一 首先需要自定义一个存储类 项目/utils/fdfs/storage.py

from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client, get_tracker_conf

class FDFSStorage(Storage):
    # 自定义文件存储类
 	def __init__(self, client_conf=None, base_url=None):
        if client_conf is None:
            client_conf = settings.FDFS_CLIENT_CONF
        self.client_conf = client_conf
        if base_url is None:
            base_url = settings.FDFS_URL
        self.base_url = base_url

    def open(self, name, mode='rb'):
        # 打开文件的方法
        pass

    def save(self, name, content, max_length=None):
        # 保存文件使用的方法。 name为文件名, content为上传文件内容的File对象。
		 # save函数的返回值,就是表中image的内容
        # 1. 创建一个Fdfs_client对象,连接fastdfs数据库
        tracker_path = get_tracker_conf(self.client_conf)
        client = Fdfs_client(tracker_path)
        # 2. 根据内容上传文件
        res = client.upload_by_buffer(content.read())
        # res格式:
        # dict {
        #     'Group name': group_name,
        #     'Remote file_id': remote_file_id,
        #     'Status': 'Upload successed.',        上传成功时的状态码
        #     'Local file name': '',
        #     'Uploaded size': upload_size,
        #     'Stroage IP': stroage_ip
        # }
        if res.get('Status') != 'Upload successed.':
            # 上传失败
            raise Exception('上传文件到fast dfs 失败')
        # 获取返回文件id
        filename = res.get('Remote file_id')
        return filename.decode()

    def exists(self, name):
        # 判断文件名name是否存在,存在返回True,不存在返回False
        # 因为我们使用文件内容存放在fastdfs的,直接返回False即可
        return False

    def url(self, name):
        # 返回访问文件的url
        return self.base_url+name

二 客户端配置文件

在 项目/utils/fdfs/ 下直接拷贝一个客户端文件,就是上边我们修改过的client.conf

	cp /etc/fdfs/client.conf 项目/utils/fdfs/

三 修改django的settings.py

添加默认存储类

# 自定义默认文件存储类
DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'
# 设置FDFS使用的客户端文件
FDFS_CLIENT_CONF = './utils/fdfs/client.conf'
# 设置FastDFS存储服务器上的nginx的地址端口
FDFS_URL = 'HTTP://192.168.152.156:8888/'




下面是本人操作中遇到的一些错误,以及解决办法,仅供参考

1 在ngingx程序能启动,但是无法访问网站

ps aux | grep nginx发现只有一个master,没有worker进程
cat /var/log/nginx/error.log 查看日志,说是Permission denied

然后把fdfs文件存储的目录权限设置成777,就可以了,如果有多层目录,上层目录也要可以访问,这里偷懒了,设置的777,你也可以单独设置setfacl保证安全。

2. 在服务器环境,内网网址的绑定,这里做一下总结

需要使用内网地址绑定的有:

/etc/fdfs/tracker.conf
/etc/fdfs/storage.conf 中的 tracker_addr
/etc/fdfs/mod_fastdfs.conf
…项目目录/utils/fdfs/client.conf

需要使用外网地址的有:

/etc/fdfs/storage.conf 中的bind_addr
// 这里强调说明以下,本人绑定外网地址的时候,无法保存数据,所以在这里没有绑定地址,意指绑定本机所有地址。
/etc/nginx/nginx.conf
…/settings.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值