我有多个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部署期间不被覆盖。
所以我的问题如下:
是否可以在不使用符号链接的情况下进行此设置,因此我可以进行部署而不必担心上传受到影响?
如果符号链接是使这项工作唯一/最好的方法,有没有办法将符号链接添加到git存储库,或者是否有任何其他方法可以确保它在CodeDeploy部署期间保持不变?
答案 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.sh
和AfterInstall.sh
BeforeInstall.sh
如果挂载了
#!/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
文件夹,以便themes
和plugins
中的更新也会自动反映在其他EC2中。< / p>
此外,符号链接是一个更好的解决方案,因此如果umount
失败,您不必担心在部署期间意外删除EFS安装。您可以在部署后使用AfterInstall
挂钩再次重新创建符号链接,并在文件AfterInstall.sh
中添加代码
#!/bin/bash
ln -s /home/bitnami/efs /opt/bitnami/apps/wordpress/htdocs/wp-content/uploads