我的本地机器是一个虚拟的CeontOS-7,带有一个包含Flask应用程序目录的Python 2.7 virtualenv,结构如下:
/var
/www
/myAppenv
/myApp
/.ebextensions
myApp-env.config
/.elasticbeanstalk
application.py
requirements.txt
/flaskApp
/core
views.py
models.py
forms.py
/templates
/static
我使用EB CLI部署它从/ myApp部署到名为myApp的Beanstalk应用程序,其环境名为myApp-env。
我认为静态文件路径是在/.ebextensions/myApp-env.config中设置的:
option_settings:
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "flaskApp/static/"
我可以在AWS Web控制台中看到 - >环境 - >设置 - >
的软件配置StaticFiles: /static/=flaskApp/static/
所以路径设置似乎不是导致问题的原因。
因此,当我打开我的应用程序的网页时,我看到页面缺少css和js,因为静态目录中的所有内容都会获得403禁止响应:
GET http://myApp-dev.elasticbeanstalk.com/ [HTTP/1.1 200 OK 174ms]
GET http://myApp-dev.elasticbeanstalk.com/static/bootstrap-3.3.5-dist/js/bootstrap.min.js [HTTP/1.1 403 Forbidden 55ms]
...
猜测它是关于权限的东西,因为在我的本地dir文件由我的linux帐户拥有(出于samba的原因),然后我尝试chown root和chgrp root(静态dirs和文件权限是755),但它没有'改变一切。我实际上并不认为与防火墙/ selinux有任何关系,因为主页实际上正在加载。
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
我想我发现了这个问题。我正在通过EB SSH进行检查,只是为了了解发生了什么,我注意到" ec2-user"我登录AWS机器可以访问(运行cd命令)直到目录
/opt/python/current/app
但ec2-user不允许访问dir
/opt/python/current/app/flaskApp
因为权限。
虽然flaskApp中包含的静态目录和文件在755上设置了权限,但我注意到flaskApp目录(包含静态目录)是744(我认为没问题)。所以我将flaskApp dir权限更改为755并且它工作正常:现在静态文件被加载了!
顺便说一下,我怀疑这个权限集对生产有好处。替代方案可以是构造目录,以便静态不是flaskApp目录的子目录,允许这种方式将静态目录设置为755,同时将flaskApp目录设置为更保守的权限。
答案 1 :(得分:0)
如果所有用户都无法查看文件,那么作为root的所有者/组可能无关紧要。通过在所有静态文件上运行chmod 664
,确保所有人都可以访问它们。