学习笔记 · 2019年11月21日

使用 Lychee 自建 Wordpress 图床

浏览:136

用久了 WordPress 后,无可避免 uploads 里面的文件会越累越多,给备份和迁移造成了极大困扰。即使不是为了迁移,那越来越多的媒体文件也让人看着瘆得慌,万一哪天升级时服务崩了,或者升级涉及到媒体库的改造,那滋味……😂

所以我想着,能否在 uploads 之外单独设立一个媒体库,让 WordPress 直接调用?这样备份 WordPress 时只需要备份代码就行了,体积会大大减小,还原和迁移什么的肯定也不在话下。

寻寻觅觅了好久,设置软链接?不行,万一需要迁移的话,软链不可靠,而且支不支持这样搞还另说(是的,在设计阶段就 PASS 了);七牛类的第三方图床?也不行,第三方也不可靠,万一崩了或者限速了或者无故封号了咋办?

嗯,那只能自建图床了……再次寻寻觅觅后,感觉 Lychee 这款开源图床工具不错,蛮适合用来搭建图床/图库的。

Lychee

由于我的 WordPress 是使用 docker 搭建的,那 Lychee 自然也是优先选择 docker 镜像。从 hub 里面搜出来 Lychee 是有多个镜像的,看来还是蛮受欢迎的嘛。

Lychee 镜像

其中最受欢迎的莫过于 LinuxServer 组织以及官方提供的镜像了,令人诧异的是官方镜像的受众居然还没有第三方组织的多。。。不过试用了两种镜像后,我也就释然了。官方镜像功能齐全,能提供多账号使用,但是配置麻烦,适合作为图库使用;LinuxServer 提供的镜像只有单账号,但配置简单,提供数据表自定义前缀,适合单纯作为图床使用。对于我来说,我也比较倾向于采用 LinuxServer 提供的镜像,毕竟 Lychee 作为图库来说功能还是太单一了,比上不足比下有余,很是尴尬。并且图库我已经有群辉的 moments 了。😁

闲话少说,开搞!

启动 Lychee 容器

docker pull linuxserver/lychee;

docker run -d \
  --name=MyBlog-Lychee \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 19311:80 \
  -v /your/path/appdata/config:/config \
  -v /your/pash/pictures:/pictures \
  --restart unless-stopped \
  linuxserver/lychee

# PUID 和 PGID 为本地目录相关的用户 ID,可使用 id username 查看。
# 启动容器没啥好说的,跟着官方文档来就行了,主要是注意权限问题。

启动完成后,访问对应的端口,就会出现一个配置向导,引导你配置数据库信息。由于 LinuxServer 提供的版本支持 SQLite,所以数据库可以不用配置,但个人建议如果是提供给 WordPress 专用的话,直接使用WordPress 的库就好了,配置前缀 lychee_ 将其数据表与 WordPress 的数据表分开,这样备份 WordPress 数据库的时候,可以一起备份,方便很多(各种插件你懂的😄)。

由于我已经配置完成了,就不为了截图而重新搞了,有问题可以留言讨论。

成功能登录后可以在 Settings 处将语言改为中文,不过只翻译到一半……

导入 WordPress 媒体

对于刚建站,媒体数量少的童鞋来说,新建专用相册,然后通过链接导入是极好的。导入后,点击图片,右键可以获取到图片链接,再替换掉文章中的链接就好。但是对于媒体库数量很多的童鞋来说,就不那么友好了,因为通过页面导入的图片,文件名是会变的,一个个改起来简直要命。

后来我发现了一个问题,就是除去 Lychee 的 UI,其实 Lychee 就是一个图片服务器,直接把文件放入相关目录即可访问。UI 上设置的相册隐藏,也只针对相册,图片是不受影响的。不知道原版就是这样,还是 LinuxServer 对其进行了修改。

所以,我们只需要把 WordPress 中 uploads 目录内的文件,原封不动地拷贝到 Lychee 中的 /pictures/big 目录下,然后通过 http://lycheedomain:port/uploads/big/filename 就可以访问了。针对 Lychee 不支持上传的文件类型,也可以使用这种方式让其能通过 Lychee 访问。不过这种方式唯一的缺点就是,由于不是通过 UI 上传的,无法通过 Lychee 的 web 端进行管理。

So,知道了这个方法后,就好办了,将 uploads 目录的文件全部拷贝完成后,把 uploads 目录打包备份,并移出 WordPress,这样 WordPress 目录的体积一下子就会减小非常多,甚至于打包后还能通过邮件进行备份。至于链接的批量更新,使用以下 MySQL 命令替换即可(注意修改参数):

UPDATE wp_posts SET post_content=REPLACE(post_content,"wordpresslink", "lycheelink");

Lychee 使用

后续的使用就不多说了,无非是在插入图片前,先上传到 Lychee,然后获取图片链接后,再插入文章;如果图片多的话,可以单独放入一个相册,然后再把相册的共享链接插入文章,灵活使用。备份和迁移时 WordPress 和 Lychee 互不影响,跟七牛类第三方图床的使用方式差不多,唯一不足的就是没那么多插件支持,略显麻烦罢了,反正各有优劣吧。