Discuz论坛附件存储分离,减轻服务器压力
论坛运行一段时间后,附件目录往往膨胀到几十GB,系统盘被占满,服务器响应变慢甚至无法写入。
本文面向零基础站长,讲解如何通过Discuz自带的远程附件功能,把附件存储分离到另一台服务器或对象存储,从而减轻主服务器压力。
跟着步骤操作,你可以完成从准备到验证的全过程。
适用场景与准备工作
当你的Discuz论坛出现以下情况时,就适合做附件存储分离:
- 系统盘空间告急,
/www/wwwroot/你的论坛/data/attachment目录体积过大。 - 附件读写频繁,导致主服务器磁盘IO偏高,页面加载变慢。
- 希望附件独立备份,或使用单独的存储服务器、NAS、云存储。
准备条件:
- 一台用于存放附件的远程服务器或支持FTP的存储空间,并已开启FTP服务。
- 远程存储的FTP地址、端口、用户名、密码、被动模式端口范围。
- 主服务器上Discuz论坛后台管理员权限,以及宝塔面板或SSH访问权限。
- 建议先备份数据库和
data/attachment目录,避免操作失误。
关键结论:附件存储分离本质是把Discuz的附件上传和读取路径从本地改为远程FTP,主服务器只保留程序代码,不再承载附件IO。
配置远程附件:从后台开启FTP存储
登录Discuz后台,依次进入 全局 -> 上传设置 -> 远程附件。
- 开启远程附件:选择“是”。
- 远程附件地址:填写远程存储的访问URL,例如
http://附件服务器IP或域名/attachment。 - FTP服务器地址:填写远程服务器IP。
- FTP端口:默认21,若修改过请填写实际端口。
- FTP账号、FTP密码:填写具有写入权限的FTP账号。
- 被动模式:一般选择“是”,如果连接失败可尝试“否”。
- 远程附件目录:填写FTP根目录下的子目录,例如
./attachment,确保该目录存在且可写。 - 远程访问URL:填写浏览器能访问到的附件URL,例如
http://附件服务器IP/attachment。 - 超时时间:保持默认或适当调大,如30秒。
填写完成后点击“测试远程附件”,如果提示成功,说明FTP连接和目录权限正常。
如果使用宝塔面板,可以在“网站”->“FTP”中创建FTP账号,并确保远程服务器防火墙放行被动模式端口范围。
判断条件:测试远程附件成功,且远程目录出现测试文件,才代表配置正确。
迁移历史附件与修改本地路径
新上传的附件会自动存到远程,但历史附件还在主服务器上。
需要手动迁移:
- 通过SSH或宝塔文件管理,进入主服务器附件目录:
/www/wwwroot/你的论坛/data/attachment。 - 将该目录下所有文件下载或使用
rsync同步到远程FTP目录。例如:
rsync -avz /www/wwwroot/你的论坛/data/attachment/ ftpuser@远程IP:/远程附件目录/
如果没有rsync,可以用FTP工具上传。
- 迁移完成后,为了节省主服务器空间,可以删除本地附件文件,但建议先保留一份备份。
- 进入Discuz后台 -> 全局 -> 上传设置 -> 远程附件,确认“本地附件保留”选择“否”,这样后续上传不再写本地。
注意:迁移过程中不要更改附件目录结构,否则数据库中的附件路径会失效。
避坑指南:常见错误与处理
- 测试远程附件失败:检查FTP账号密码、被动模式端口、远程目录权限。宝塔面板需放行39000-40000端口。
- 附件上传后无法显示:检查“远程访问URL”是否可公开访问,以及远程服务器是否允许跨域(一般不需要)。
- 历史附件打不开:确认迁移时文件路径与数据库记录一致,必要时批量更新数据库中的附件路径。
- 性能反而变慢:如果远程存储网络延迟高,附件加载会变慢。建议附件服务器与主服务器同内网或使用CDN。
- 备份策略:远程附件也需要定期备份,不要认为分离后就万事大吉。
关键结论:远程附件配置成功后,务必测试上传和访问,并检查历史附件是否正常显示。
效果验证与后续优化
完成以上步骤后,进行验证:
- 在主服务器查看
data/attachment目录,新上传附件不应再写入本地。 - 在论坛发帖上传一张图片,检查图片URL是否指向远程地址。
- 使用
df -h查看主服务器磁盘空间,确认系统盘压力下降。 - 打开几个历史附件帖子,确认图片和附件能正常下载。
如果一切正常,附件存储分离就完成了。
后续可以进一步优化:
- 为远程附件服务器配置CDN,加速附件访问。
- 定期清理远程附件的冗余文件。
- 监控远程存储的磁盘使用率,避免再次写满。
最终结果:主服务器只处理动态请求,附件IO由独立存储承担,服务器压力明显减轻。
常见疑问
远程附件支持HTTPS吗?
支持。只需将远程访问URL改为 https:// 开头,并确保远程服务器证书有效。
必须用FTP吗?可以用对象存储吗?
Discuz原生只支持FTP方式,但可以通过插件或二次开发对接对象存储。如果不想用FTP,可考虑第三方插件。
迁移后数据库里的附件路径要改吗?
如果远程目录结构与本地一致,通常不需要改。若路径不同,需要批量替换数据库中的附件路径。
附件分离后,论坛备份怎么做?
程序和数据库仍备份在主服务器,附件需单独备份远程存储。建议设置定时任务同步远程附件到备份服务器。