Amazon EFS:将 Wordpress 上传目录更改为外部根目录

Amazon EFS: Changing Wordpress upload directory to outside root

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

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

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

我已经使用 symlink 将默认的 wp-content/uploads 文件夹指向我想要的路径;但是,这并没有真正解决我的问题,因为我不能依赖 symlink 在 CodeDeploy 部署期间不被覆盖。

所以我的问题如下:

  1. 是否可以在不使用 sym 的情况下使此设置工作link,这样我就可以进行部署而不必担心上传受到影响?

  2. 如果 symlink 是实现此功能的 only/best 方法,是否有任何方法可以将 symlink 添加到 git 存储库,或任何其他方式来绝对确保它在 CodeDeploy 部署期间持续存在?

您可以直接将 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 中.

此外,符号链接是更好的解决方案,因此如果 umount 失败,您不必担心在部署期间意外删除 EFS 挂载。您可以在部署后使用 AfterInstall 挂钩重新创建符号链接并在文件 AfterInstall.sh

中添加代码
#!/bin/bash
ln -s /home/bitnami/efs /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads