AWS 中的静态文件配置不起作用

Posted

技术标签:

【中文标题】AWS 中的静态文件配置不起作用【英文标题】:Static files configuration in AWS not working 【发布时间】:2020-04-10 06:50:59 【问题描述】:

我目前有一个在 Elastic BeanStalk 上运行的多 docker 容器应用程序(nginx、postgres RDS、Django),我可以使用它,但未加载静态文件(CSS 文件和 JS 脚本)。这是我目前的配置:

nginx 设置文件

 user nginx;
 worker_processes 1;

 events 
   worker_connections 1024;
 

http 
include /etc/nginx/mime.types;
client_max_body_size 100M;

server 
    listen 80;
    charset utf-8;
    server_name mydashboard.com;

    access_log /dev/stdout;
    error_log /dev/stdout info;

    location /media/ 
        alias /var/www/media/;
    

    location /static/ 
        alias /var/www/static/;
    

    location / 
        proxy_pass http://web:8888; 
        proxy_set_header host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
    
  

.ebextensions(文件夹)

django.config(文件)

 option_settings:
     "aws:elasticbeanstalk:application:environment":
 DJANGO_SETTINGS_MODULE: "mydashboard.settings"
    "ALLOWED_HOSTS": ".elasticbeanstalk.com"
 "aws:elasticbeanstalk:container:python":
     WSGIPath: mydashboard/mydashboard/wsgi.py
 "aws:elasticbeanstalk:container:python:staticfiles":
    "/static/": "www/static/"

settings.py

  STATIC_URL = '/static/'
  STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
  STATIC_ROOT = os.path.join(BASE_DIR, "..", "www", "static")
  STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
  MEDIA_URL = '/media/'

如果我删除文件夹 .ebextensions 文件夹并加载应用程序,它将在不显示静态文件的情况下工作,但如果我添加带有 django.conf 文件的文件夹,应用程序将无法部署,我会遇到错误: Invalid option specification (Namespace: 'aws:elasticbeanstalk:container:python:staticfiles', OptionName: '/static/'): Unknown configuration setting.

在我发现的一篇文章 (Serving static files in Django) 中提到应该删除 .config 文件中的所有静态文件指令,并且在软件配置下我应该在静态文件部分下配置静态文件,但是,这个静态文件部分甚至没有显示。我缺少什么代码来显示静态文件?提前感谢您的建议和回答。

【问题讨论】:

检查django.config 文件缩进是否与示例中一样。 【参考方案1】:

EBS 有新设置

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: mysite.wsgi:application
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /static: static
container_commands:
  01_collectstatic:
    command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py collectstatic --noinput"
  02_migrate:
    command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py migrate --noinput"
    leader_only: true

【讨论】:

这实际上对我有用,谢谢。 @abautista 如果解决了您的问题,请考虑将其标记为已接受的答案

以上是关于AWS 中的静态文件配置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3+Cloudfront 静态网站子目录不起作用

AWS 控制台中的 CORS 配置不起作用

AWS Elastic Beanstalk .ebextensions 文件创建不起作用(apache 配置)

在 AWS 弹性 beanstalk 上部署 Rails - 静态资产路由不起作用

AWS Elastic Beanstalk NGINX 配置不起作用

AWS Elasticbeanstalk 使用 .platform 覆盖 Nginx 配置不起作用