如何使用S3中的媒体和静态文件在AWS EC2上部署Django

时间:2019-04-05 18:10:12

标签: django amazon-s3 amazon-ec2 credentials django-deployment

我想在AWS EC2上部署Django项目。对于我的媒体文件,我需要S3上的存储桶。我的项目在localhost上运行良好,并且可以从S3访问媒体,但是在部署后我无法获得AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,这就是为什么我会收到Server Error 500的原因。

这是 settings.py

DEBUG = False
ALLOWED_HOSTS = ['XXXXXXXX']
INSTALLED_APPS = [
    'apps.comic',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'storages',
]
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'apps/comic/static/media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

我试图制作〜/ .aws / credentials:

[default]
aws_access_key_id = X...X
aws_secret_access_key = X...X

但是与Server Error 500的结果相同。由于没有任何媒体文件,所以我只能获得登录/注册页面。

生产后如何获取媒体文件该怎么办?我是否需要对凭据或settings.py文件进行一些更改?

1 个答案:

答案 0 :(得分:0)

您的问题是由于以下三行:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

具体来说,这部分os.environ.get基本上指示您的python脚本在操作系统变量中搜索AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

要解决此问题,您有两种选择:

  • 通过在终端export AWS_KEY=Your_Key上运行,将AWS变量添加到EC2环境变量中

OR

  • 将您的ID和密钥直接写入您的settings.py文件

     AWS_ACCESS_KEY_ID = "key_string_here"
     AWS_SECRET_ACCESS_KEY = "secret_string_here"
     AWS_STORAGE_BUCKET_NAME = "bucket_name_here"
    

我希望第二个选项更便携。