将 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 的数据库问题的主要内容,如果未能解决你的问题,请参考以下文章
使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版——部署配置及相关知识