0

我想在 AWS EC2 上部署 Django 项目。对于我的媒体文件,我需要 S3 上的存储桶。我的项目在 localhost 上运行良好,我可以从 S3 访问媒体,但在部署后我无法获得 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 这就是我收到服务器错误 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

但这与服务器错误 500 的结果相同。我只能获得登录/注册页面,因为我没有任何媒体文件。

制作后获取媒体文件应该怎么做?我是否需要对凭据或 settings.py 文件进行一些更改?

4

1 回答 1

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操作系统变量。

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

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

或者

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

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

我更喜欢第二种选择,因为它更便携。

于 2019-04-05T18:20:09.957 回答