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

时间:2018-01-30 05:47:32

标签: wordpress amazon-ec2 aws-code-deploy amazon-efs

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

然而,现在我遇到了一个新问题;我没办法将WP uploads文件夹设置在WP根目录之外。

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

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

所以我的问题如下:

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

  2. 如果符号链接是使这项工作唯一/最好的方法,有没有办法将符号链接添加到git存储库,或者是否有任何其他方法可以确保它在CodeDeploy部署期间保持不变?

1 个答案:

答案 0 :(得分: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中。< / p>

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

#!/bin/bash
ln -s /home/bitnami/efs /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads