0

我有多个 AWS EC2 实例,这些实例是通过 CodeDeploy 从 Git 存储库更新的。但是,由于将wp-content/uploads文件夹保存在 Git 中很麻烦且难以维护,因此我尝试将所有上传内容移动到已作为 EFS 文件系统挂载的目录中。这样我应该能够在多个 EC2 实例之间共享上传。

但是,现在我遇到了一个新问题;我无法将 WP 上传文件夹设置在 WP 根目录之外。

WordPress 位于/opt/bitnami/apps/wordpress/htdocs,这也是我们的域指向的地方。EFS 系统安装到/home/bitnami/efs. 由于 EFS 目录位于 WP 根目录之外,因此我无法链接到它。

我已经使用将默认wp-content/uploads文件夹定向到我想要的路径的符号链接来实现它;但是,这并不能真正解决我的问题,因为我不能依赖符号链接在 CodeDeploy 部署期间不被覆盖。

所以我的问题如下:

  1. 是否可以在不使用符号链接的情况下进行此设置,因此我可以进行部署而不必担心上传会受到影响?

  2. 如果符号链接是完成这项工作的唯一/最佳方式,是否有任何方法可以将符号链接添加到 git 存储库,或者有任何其他方法可以绝对确保它在 CodeDeploy 部署期间持续存在?

4

1 回答 1

1

您可以直接挂载 EFS/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads以避免符号链接。

在你appspec.yml添加两个钩子:

hooks:
    BeforeInstall:
      - location: /deploy/BeforeInstall.sh
        timeout: 3000
        runas: root
    AfterInstall:
      - location: /deploy/AfterInstall.sh
        timeout: 3000
        runas: root

然后在其中创建目录和deploy两个文件BeforeInstall.shAfterInstall.sh

BeforeInstall.sh如果 EFS 已安装,则卸载它

#!/bin/bash
if mount | grep /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads > /dev/null; then
    sudo umount /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads
fi

AfterInstall.sh然后在部署后再次挂载EFS

#!/bin/bash
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-fxxxxxx.efs.us-west-2.amazonaws.com:/ /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads

注意:您还可以挂载整个wp-contents目录,而不仅仅是uploads文件夹,以便自动更新themesplugins反映在其他 EC2 中。

此外,符号链接是一个更好的解决方案,因此您不必担心在部署过程中意外删除 EFS 挂载(如果umount失败)。您可以在使用钩子部署后再次重新创建符号链接AfterInstall并在文件中添加代码AfterInstall.sh

#!/bin/bash
ln -s /home/bitnami/efs /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads
于 2018-01-31T07:29:38.947 回答