将 django 应用程序部署到亚马逊 beanstalk 的数据库问题

Posted

技术标签:

【中文标题】将 django 应用程序部署到亚马逊 beanstalk 的数据库问题【英文标题】:Database trouble deploying django app to amazon beanstalk 【发布时间】:2016-01-12 21:29:20 【问题描述】:

我尝试将我的 Django 应用程序部署到 AWS beanstalk。为此,我正在关注本教程: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

但是,当我使用 eb create 部署应用程序时,我收到 mysql 错误

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

我猜这是因为我没有进行任何数据库配置(上面的文档甚至没有提到配置步骤)。因此,我尝试使用本指南添加 RDS 数据库:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html。

现在,我收到了

的错误
RDS requires that you have a subnet selected in at least two Availability Zones.

当我尝试创建此子网时,会出现涉及 *** 等的其他问题。有人可以帮我在aws上启动并运行一个简单的django应用程序吗? 谢谢!

【问题讨论】:

有谁能帮忙吗? 【参考方案1】:

就我而言,我需要回退到本地 sql 数据库。在开发过程中(eb deploy),没有直接找到 RDS env-vars:

import logging

logger = logging.getLogger(__name__)
if 'RDS_HOSTNAME' in os.environ:
    logger.error('Loggger: RDS!')
    DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        
    
else:
    logger.error('Loggger: Local!')
    DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        
    

【讨论】:

【参考方案2】:

在创建应用程序时创建数据库。

eb create --database --database.engine mysql --region eu-west-1

更新

您可以像这样设置数据库用户和密码:

eb create --database --database.engine mysql --database.password <password> --database.username <username> --region eu-west-1

这里有所有可用的选项。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-create.html

【讨论】:

如何设置数据库的密码、用户名等? 如果我没记错,它会通过 CLI 询问你。【参考方案3】:

由于您使用的是弹性豆茎,因此不要创建单独的 RDS。您可以使用 AWS 控制台来部署 django 应用程序。 部署应用时选择RDS配置,子网设置由它自己处理

【讨论】:

【参考方案4】:

您需要按照此处所述创建子网,

创建数据库子网组

通过https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。

在导航窗格中,单击子网组。

单击创建数据库子网组。

单击名称,然后键入您的数据库子网组的名称。

单击描述,然后描述您的数据库子网组。

在 VPC ID 旁边,选择您创建的 VPC 的 ID。

单击将子网添加到此子网组部分中的添加所有子网链接。

完成后,单击是,创建 在确认窗口中,单击关闭。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-rds.html#AWSHowTo-vpc-rds-subnet

【讨论】:

【参考方案5】:

我假设您的 settings.py 中有 HOST = 'localhost'。 Django 将尝试通过 Unix 套接字连接到 Mysql。您可能想通过 TCP 连接到 MySQL。

在 settings.py 的 DATABASES 字典中: 将主机设置为 127.0.0.1

【讨论】:

以上是关于将 django 应用程序部署到亚马逊 beanstalk 的数据库问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Rails 应用程序部署到 EC2(亚马逊)

使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版——部署配置及相关知识

将 web.config 部署到亚马逊 beanstalk

如何使用 django-storages 将图像上传到亚马逊 S3?在管理员中上传有效,但在网站表单中无效

如何将 Django 应用程序部署到 (AWS) 域名?

如何将多租户 django 应用程序部署到 AWS?