马鞍山生活网 发表于 23-2-20 07:19:19

如何用百度云BOS实现discuz论坛远程附件

通过百度云对象存储BOS,实现discuz论坛静态资源远程化。即将discuz论坛的图片、视频及其他附件等静态资源不改变论坛原上传逻辑,存储百度云BOS上。可实现网站动静分离、加快网站图片等附件访问速度等,使网络访问及用户体验提升。
通过将网站/论坛静态对象存放对象存储BOS,一方面可节约(云磁盘)存储空间;另一方面,用户访问时使用的是百度云BOS下行带宽,可提升访问速度。特别当web应用较多,服务器资源需满足多个应用请求,或网站访问量增高,也可使我们的业务So Easy应付自如。
现在网上有很多腾讯云COS、阿里云OSS对象存储实现DZ论坛远程附件的帖子、教程。如阿里云OSS,阿里云官方社区的教程是针对discuzX3.2的,且实现起来相对麻烦,改动源码较多,还不一定能成功;腾讯云COS,实现DZ论坛远程附件的路径可以多种,如扩展、插件、COSFTP等,扩展是腾讯云官方提供的,但也限于(仅支持)X3.4较早版本,升级新版本后,会与新的核心代码冲突,同时也可能与其它引用(类似PHP方法)插件冲突而埋下隐患,即便不升级(腾讯云在开源社区的源码包下方也对此特别注明)。第三方插件可支持更新的版本,但插件本身收费。
腾讯云COSFTP、百度云BOSFTP(都为亲测),两者都是运用Python流式上传原理,百度云Bosftp较Cosftp少一个python依赖项,同时支持python版本兼容性占优。相对降低了应用复杂性和配置、应用门槛。
介绍BOSFTP实现DZ远程附件的流程:
[*]已正确安装、运行DZ论坛;
[*]已有百度云BOS资源,且已设置好存储桶。或在百度云控制台按提示购置BOS对象存储,现在开通>;
[*]控制台按需设置BOS,配置BOSFTP>;
[*]DZ论坛后台全局>上传设置>远程附件,正确配置参数。
BOSFTP是一个基于Python实现的BOS的FTP server工具,将FTP协议的操作转化为对BOS中存储的对象、目录的操作。支持文件上传、下载、删除以及创建文件夹等操作。主要的功能BOSFTP支持的主要功能如下:
[*]文件流式上传,大文件分块并行上传
[*]文件流式下载
[*]支持大部分FTP命令,满足FTP需求
[*]服务配置化,满足性能要求
系统环境
[*]操作系统:LINUX
[*]Python版本:Python 2
[*]依赖:pyftpdlib>=1.5.0 bce-python-sdk>=0.8.23
安装
1.使用pip安装pyftpdlibpip install pyftpdlib
2.安装python sdk及其依赖。pip install pycryptodome
pip install future
pip install futures
pip install bce-python-sdk3.下载BOSFTP,并解压。
4.验证是否安装好依赖。
cd ..
python setup.py install*主要确认BOSFTP包内文件解压至指定文件夹后,1)包内相关文件无一缺少;2)python及相关依赖下载/安装成功,有执行程序的环境。
1、BOSFTP配置后,百度云控制台:先启动FTP SERVER执行命令启动一个FTP SERVER , 默认监听端口为2121。bash start.sh 前提:确定该python脚本所在服务器目录,对应目录中执行启动脚本命令(该脚本由百度云官方提供、维护)。上述字符出现即代表BOSFTP安装配置成功(这里默认bosftp的端口为2121,需要安全组放通该端口,或你的自定义通讯端口)。
2、DZ后台,全局>上传设置>远程附件如图,后台管理界面可见通讯/配置成功 点击放大图片注:DZ后台配置好FTP服务区地址(你的服务器IP)、FTP端口(默认2121,可自定义、安全组放通)、FTP账号和密码(自定义设置);连接模式为被动,SSL选否,远程访问URL即你的BOS桶地址或CDN加速地址(如选CDN加速BOS桶文件)。选CDN的优势是节省BOS下行流量,对象访问速度快、跨地域无感等。这里相关参数是你在BOSFTP配置文件中设置的值。参考这里>
# 设置ak, sk, bucket
access_key_id = <your access_key_id>
secret_access_key = <your secret_access_key>
bucket = <BucketName>
# FTP Server 的工作目录。
bos_user_home_dir = /home/users/xxx


# FTP 账户配置。配置格式为<用户名:密码:读写权限>,多个账户用分号分割。
login_users = usr1:psw1:RW;usr2:psw2:R


# 设置endpoint,默认为http://bj.bcebos.com
#endpoint = http://xx.bcebos.com
# FTP监听端口号,默认为2121
listen_port = 8081
# HTTP连接超时时间,默认为3600
connection_timeout_in_mills = 10000
# 并行上传最大并行数,即线程池线程数, 默认为cpu_count * 4
parallel_upload_num = 9
# FTP server最大连接数,默认为1024
max_connection_num = 1000
# 三步上传将文件切割成每个multi_part_size后进行并行上传, 默认为10485760(10M)
multi_part_size = 10485760
masquerade_address = 127.0.0.1
# passive_port可以设置passive模式下,端口的选择范围,默认在(60000, 65535)区间上选择
passive_port = 60000,65535


# 设置日志级别
log_level = INFO
# 设置日志目录, 日志名为bosftp.log
log_dir = ./log/配置文件说明
[*]bos_user_home_dir: 本地文件夹路径,上传或是下载都在这个目录进行
[*]login_users: 为用户账户信息,启动服务时会验证用户名和密码是否存在于login_users1当中,例如: open 127.0.0.1 2121连接到server,提示输入用户名和密码,这里输入的信息必须存在login_users当中才会通过权限认证
[*]parallel_upload_num: 大文件上传会将文件分块(默认10M),然后并发的将这些文件块上传,这个参数用来控制并发度
[*]masquerade_address: 使用masquerade_address选项来唯一绑定一个passive模式下用于reply的IP
[*]log_dir: BOSFTP的运行日志文件所在目录。
上述配置文件所示,通过设定可支持如分割上传即断点续传性能。
测试
sh start.sh& "启动后台服务
cd test
sh run_test.sh
sh stop.sh
关闭服务
-执行命令ctrl + c关闭FTP Server服务。 可以指定在后台运行sh start.sh&将服务启动,运行sh stop.sh 关闭服务。
最后,观测图片是否上传BOS成功。如图,图片地址为XXX.cdn.bcebos.com/forum/202302/20/065900c4afzaml45lkl6mj.jpg;XXX为BOS桶名称。到此,反映在你论坛前端的图片实际已存储于BOS桶,这一步表示已成功。

马鞍山生活网 发表于 23-2-20 08:33:07

实践中支持python2~3高阶版本;仅为参考>。可实现上传对象至远程存储,删除对象时远程同时删除(同步论坛本身上传逻辑)。另外,还可支持远程设置保护原图功能、防盗链等,以及图片、视频返回带设定圆角、缩放、增亮、智能对比度、盲水印及PDF文档智能处理等能力,如有必要(智能数据处理服务,实践中需修改论坛远程附件返回的文件后缀方能实现)。
1)判断附件是否为论坛远程附件;
2)如是,则增加智能数据处理参数并返回客户端。
这可能会增加系统开销,具体如何应用根据实际情况决定。

马鞍山生活网 发表于 23-2-20 09:06:18

版本记录
BOSFTP工具包 版本号1.2.0
修复安装时的python sdk版本问题,优化日志目录配置

BOSFTP工具包 版本号1.0.1
支持APPE接口实现断点续传功能

BOSFTP工具包 版本号1.0.0
支持文件上传,下载,删除, 支持文件夹创建
支持put、get、delete、mkdir、ls、cd、quite、size、rename命令
自定义ftp配置
大文件分块上传

forregistuse 发表于 23-3-1 08:55:30

文章不错!先顶了
页: [1]
查看完整版本: 如何用百度云BOS实现discuz论坛远程附件