通过百度云对象存储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远程附件的流程: 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安装pyftpdlib pip install pyftpdlib
2.安装python sdk及其依赖。 - pip install pycryptodome
- pip install future
- pip install futures
- pip install bce-python-sdk
复制代码 3.下载BOSFTP,并解压。
4.验证是否安装好依赖。
- cd ..
- python setup.py install
复制代码 *主要确认BOSFTP包内文件解压至指定文件夹后,1)包内相关文件无一缺少;2)python及相关依赖下载/安装成功,有执行程序的环境。
1、BOSFTP配置后,百度云控制台: 先启动FTP SERVER 执行命令启动一个FTP SERVER , 默认监听端口为2121。 前提:确定该python脚本所在服务器目录,对应目录中执行启动脚本命令(该脚本由百度云官方提供、维护)。上述字符出现即代表BOSFTP安装配置成功(这里默认bosftp的端口为2121,需要安全组放通该端口,或你的自定义通讯端口)。
2、DZ后台,全局>上传设置>远程附件
如图,后台管理界面可见通讯/配置成功 点击放大图片 注:DZ后台配置好FTP服务区地址(你的服务器IP)、FTP端口(默认2121,可自定义、安全组放通)、FTP账号和密码(自定义设置);连接模式为被动,SSL选否,远程访问URL即你的BOS桶地址或CDN加速地址(如选CDN加速BOS桶文件)。选CDN的优势是节省BOS下行流量,对象访问速度快、跨地域无感等。 这里相关参数是你在BOSFTP配置文件中设置的值。参考这里> - [BOS_ACCOUNT]
- # 设置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_ACCOUNT]
- # FTP 账户配置。配置格式为<用户名:密码:读写权限>,多个账户用分号分割。
- login_users = usr1:psw1:RW;usr2:psw2:R
- [NETWORK]
- # 设置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]
- # 设置日志级别
- 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桶,这一步表示已成功。 |