用OSS数据卷实现wordpress附件共享

简介: 用OSS数据卷实现wordpress附件共享,不需要安装插件,不需要修改代码
+关注继续查看

docker容器的兴起,让wordpress的部署变得极为容易,“一分钟部署wordpress”的教程也随处可见。以阿里云容器服务为例,利用一下编排模板,可以一键部署wordpress(详细教程见这里)。

web:
  image: registry.aliyuncs.com/acs-sample/wordpress:4.3
  ports:
    - '80'
  environment:
    WORDPRESS_AUTH_KEY: changeme
    WORDPRESS_SECURE_AUTH_KEY: changeme
    WORDPRESS_LOGGED_IN_KEY: changeme
    WORDPRESS_NONCE_KEY: changeme
    WORDPRESS_AUTH_SALT: changeme
    WORDPRESS_SECURE_AUTH_SALT: changeme
    WORDPRESS_LOGGED_IN_SALT: changeme
    WORDPRESS_NONCE_SALT: changeme
    WORDPRESS_NONCE_AA: changeme
  restart: always
  links:
    - 'db:mysql'
  labels:
    aliyun.logs: /var/log
    aliyun.probe.url: http://container/license.txt
    aliyun.probe.initial_delay_seconds: '10'
    aliyun.routing.port_80: http://wordpress
    aliyun.scale: '3'
db:
  image: registry.aliyuncs.com/acs-sample/mysql:5.7
  environment:
    MYSQL_ROOT_PASSWORD: password
  restart: always
  labels:
    aliyun.logs: /var/log/mysql

在这个编排模板中,会部署一个mysql容器,三个wordpress容器(aliyun.scale: '3'是阿里云容器服务的扩展标签,指定容器数量),wordpress容器通过link访问mysql。更爽的是,阿里云容器服务自带负载均衡功能,通过“aliyun.routing.port_80: http://wordpress”这个标签,实现三个wordpress容器的负载均衡(详细说明点这里)。

乍一看很完美,部署简单,功能齐全。但其实这里有个致命的缺陷。wordpress上传的附件是保存在本地磁盘上的,不同容器之间不能共享。当请求被分配到其他容器时,附件就打不开了。

解决办法有很多,比如添加OSS插件,把附件传到oss上。这里介绍一个更简单的办法——利用阿里云容器服务的OSS数据卷(oss volume),无需改动任何代码。

数据卷(volume)简介

Docker的特性,决定了容器本身是非持久化的,容器被删除后其中的数据也一并被删除了。Docker提供数据卷(Volume),通过挂载宿主机上的目录来实现持久存储。

但宿主机上的数据卷有很大的局限性

  • 容器在机器间迁移时,数据无法迁移
  • 不同机器之间不能共享数据卷

为了解决这些问题,阿里云容器服务提供第三方数据卷,将各种云存储(比如oss)包装成数据卷,可以直接挂载在容器上,不同容器间可以共享,并在容器重启、迁移时自动重新挂载。OSS数据卷的说明见这里

创建oss数据卷

oss数据卷基于ossfs,ossfs是阿里云官方提供的基于FUSE的文件系统,项目主页见https://github.com/aliyun/ossfs

打开数据卷管理界面,点击右上角”创建“,创建界面如下:
_OSS_

  • 数据卷名:数据卷的id,在集群内唯一。
  • AccessKeyId、AccessKeySecret:访问OSS所需的AK,可以从oss控制台获取。
  • 访问域名:如果bucket跟ECS在同一个区(Region),选内网域名;否则选外网域名
  • 文件缓存:如果需要在不同机器间同步同一个文件的修改(比如在A机器中修改文件,在B机器中读取修改后的内容),请关闭文件缓存。但请注意,关闭文件缓存将导致ls文件夹变得很缓慢,尤其是同一个文件夹下文件比较多时。没有上述需求时,请打开文件缓存,提高ls的速度。

使用oss数据卷

wordpress的附件,默认存放在/var/www/html/wp-content/uploads中,我们只需将oss数据卷映射到该目录,不同wordpress容器之间就共享同一个oss bucket了。新的编排模板如下,假设oss数据卷的名字是wp_upload

web:
  image: registry.aliyuncs.com/acs-sample/wordpress:4.3
  ports:
    - '80'
  volumes:
    - 'wp_upload:/var/www/html/wp-content/uploads'
  environment:
    WORDPRESS_AUTH_KEY: changeme
    WORDPRESS_SECURE_AUTH_KEY: changeme
    WORDPRESS_LOGGED_IN_KEY: changeme
    WORDPRESS_NONCE_KEY: changeme
    WORDPRESS_AUTH_SALT: changeme
    WORDPRESS_SECURE_AUTH_SALT: changeme
    WORDPRESS_LOGGED_IN_SALT: changeme
    WORDPRESS_NONCE_SALT: changeme
    WORDPRESS_NONCE_AA: changeme
  restart: always
  links:
    - 'db:mysql'
  labels:
    aliyun.logs: /var/log
    aliyun.probe.url: http://container/license.txt
    aliyun.probe.initial_delay_seconds: '10'
    aliyun.routing.port_80: http://wordpress
    aliyun.scale: '3'
db:
  image: registry.aliyuncs.com/acs-sample/mysql:5.7
  environment:
    MYSQL_ROOT_PASSWORD: password
  restart: always
  labels:
    aliyun.logs: /var/log/mysql

唯一的变化是添加了

volumes:
    - 'wp_upload:/var/www/html/wp-content/uploads'

重新部署,然后打开wordpress,上传附件,oss bucket里就能看到上传的附件了。是不是很简单?快来试试吧!

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
12月前
|
数据库
WordPress 网站允许贡献者角色上传图片附件的方法
WordPress 网站允许贡献者角色上传图片附件的方法。WordPress 网站从权限中可以看出投稿者默认不支持上传图片,这对投稿者造成不便,一篇没有图片的文章怎么能吸引读者呢,那么我们如何让WordPress投稿者支持上传或删除图片呢?
WordPress 网站允许贡献者角色上传图片附件的方法
|
Web App开发 存储 PHP
Discuz 论坛附件、头像等资源迁移到阿里云 OSS 并开启 CDN 的解决方案
Discuz 论坛的附件、头像等资源不断增长,如果和主程序一起存储在云服务器上,就会导致云盘要定期进行扩容操作;附件如果需要进行 CDN 加速也只能使用回源策略进行 CDN 配置。为了一劳永逸的解决附件存储和加速问题,将附件等资源迁移到对象存储服务上是一个好的选择,本文以阿里云 ECS、OSS 服务为背景,其他云计算平台也可以参考。
7847 0
|
数据库 索引
WordPress能承载多大的数据?文章十万百万能承载吗?
WordPress能承载多大的数据?文章数量十万百万能承载吗? 支撑几百万没问题,不过需要自己改写部分代码,去掉WordPress一些耗时大的功能。 面对大数据量(百万级),有几方面可以考虑改进: 1. 数据库增加部分索引 对于post_modified_gmt,post_date,post_date_gmt,author_post_date_gmt(如果作者多的话)建立索引 2. 在查询时候,去掉SQL_CALC_FOUND_ROWS参数,这个参数比较慢。
3679 0
|
API 对象存储 Java
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载) 笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅API文档,再结合自己的经验,实现了下载功能。
5812 0
|
存储 数据库 UED
深入理解 WordPress 数据库中的用户数据 wp_user
WordPress 使用 wp_users 数据表存储用户的主要数据,该数据表结构类似于wp_posts 和 wp_comments 数据表,存储的是需要经常访问的用户数据,该数据表的结构以及该数据表与其他数据表的关系如下: WordPress 用户数据表关系(点击查看大图) 同时,WordPress 把一些附加用户数据保存在了其他数据表中,包含附加用户数据的有以下两个数据表: 附加用户属性数据保存在 wp_usermeta 数据表中。
1206 0
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多