在AWS的多可用区环境中运行WordPress

当我试图在一个由两台配置的(而不是自动扩展的)Web服务器环境中使用WordPress时,发现相当麻烦,所以我记录了我的工作内容。虽然基于AWS的多可用区环境是调查的前提条件,但适用于多台配置的任何环境。

基本方针

WordPress不适合于多台服务器环境,因为它的设计不考虑多台服务器(WordPress会修改本地文件)。如果确实需要多台服务器,作为一种方案可以使用rsync进行文件同步。数据库可以像平常一样使用RDS。

然而,仅仅将”web1同步至web2″简单定义,WordPress有可能会改写web2服务器的文件。(然而,在后续提到过的情况下,可以通过”rsync双向同步+负载均衡器的黏性会话”来解决这个问题。)

此外,即使使用git进行文件管理,WordPress也会修改文件,因此也需要采取相应的防范措施。
(后文会提到,可以通过”只将专用主题纳入git管理”来解决这个问题。)

具體的建設內容

服务器架构

Web服务器将采用web1和web2的双机构成。访问将通过ELB进行负载均衡。
数据库将使用RDS。即使在EC2上安装MySQL并构建数据库服务器的情况下,操作步骤也是相同的。
以下步骤中,不使用S3作为媒体存储区(媒体文件将保存在Web服务器上,并通过rsync进行同步)。

公开目录

以/var/www/html为例。(对于其他位置,如/var/www/vhosts/wordpress/html等,操作流程相同。)

同时设定

使用rsync进行/var/www的双向同步。同步用户的一个示例是rsync(专门创建)。
为了避免意外删除和恢复文件,在/etc/lsyncd.conf的sync区块中作以下指定。

delete = "running",
init   = false,

在WordPress设置目录中,进行以下指定,将在其中创建的文件和目录的所有者组设置为apache。

chown apache. /var/www
chmod 0777 /var/www
chmod g+s /var/www

为了防止会话超时,启用ELB中的粘性会话。
通过这样,可以防止在A服务器上传媒体后立即访问B服务器导致媒体无法显示(同步未完成)。

更新的方式

上传文件的用户将以web-user作为一个示例(需要创建一个专门的用户)。
上传将在web1服务器上以web-user进行(虽然也可以从web2服务器上进行,但统一起见最好在web1服务器上进行)。
这样,文件和目录的所有者和所有组将是如下的。

Note: The provided text contains a mix of Japanese and English. The translation assumes that the target translation language is Chinese.

    • アップロードした … web-user / apache

 

    • WordPressが作成した … apache / apache

 

    同期された … rsync / apache

在同一个组中,只要给予该组读写权限,就可以实现对每个文件的读写。

如果要使用git

若要建立部署的机制,可以通过web1服务器使用apache用户进行部署。由于使用rsync进行同步,因此不需要在web2服务器上进行部署。
然而,由于WordPress本身会修改自身的程序,所以只需使用git管理最小限度的文件。
通过在.gitignore中指定以下内容,可以将wordpress目录排除在git的管理范围之外,只将专用主题纳入 git 管理。
(如果想要添加其他要管理的内容,需要逐个添加。)

/wordpress/*
!/wordpress/wp-content
/wordpress/wp-content/*
!/wordpress/wp-content/themes
/wordpress/wp-content/themes/*
!/wordpress/wp-content/themes/mysite

如果要支持自动缩放

由于双向同步无法实现,按照AWS官方的解释来进行似乎是最好的选择。(未经验证。)

将具有外部 Amazon RDS 数据库的高可用性 WordPress 网站部署到 AWS Elastic Beanstalk。

广告
将在 10 秒后关闭
bannerAds