AWS Elastic Beanstalk 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL【英文标题】:AWS Elastic Beanstalk hosting PostreSQL on deployed EC2 server with Django 【发布时间】:2014-01-21 18:36:48 【问题描述】:

我正在完成我的第一个 Elastic Beanstalk 部署。我已经按照我的意愿加载了我的应用程序。我现在需要弄清楚如何使用我的部署自动部署 PostgreSQL

我将以下内容添加到我的 requirements.txt psycopg2==2.5.1

好像已经安装了

$ psql --version
$ psql (PostgreSQL) 9.2.5

Django 中的settings.py

DATABASES = 
'default': 
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'database',
    'USER': 'user',
    'PASSWORD': 'password',
    'HOST': 'localhost',
    'PORT': '5432',


这些设置在部署之前完美运行,这是我在部署后遇到的错误:

could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?

我认为我不必为 EC2 实例打开防火墙设置来读取它自己的数据库,是吗?也因为它是 Django,所以一切都应该在应用程序运行时自动创建。

【问题讨论】:

数据库中填充的是灯具数据还是动态数据?如果它是动态数据,那么自动缩放组不太可能工作,因为实例不知道其他人的更新。动态水平扩展 PostgreSQL 非常困难。 (我还没有找到可行的解决方案) 来自固定装置,应该是空白列。我希望我必须手动(或脚本)创建第一个管理员用户,但过去的一切都应该通过 python 网页以编程方式完成。 但是,如果您有一个包含 2 个实例的自动缩放组,在一个实例上所做的更改将不会在另一个实例上可见。在我看来,这似乎是数据库的不需要/意​​外行为。此外,当组缩小到 1 个实例时,另一个实例上的所有数据都会丢失。 好消息,我切换到 RDS 以防止这种情况发生。我们会看看我是否可以启动并运行它:) 我启动并运行 RDS 时遇到的问题最少,而 Google / SO 搜索能够解决这些问题。我必须做的唯一定制是我的 Django 应用程序的第一个用户,我可以编写脚本,但手动添加同样容易。 【参考方案1】:

如上所述,在 EC2 服务器上使用 PostgreSQL 对于动态数据和扩展来说是个坏主意。

为此目的使用了 RDS,它完美地工作。

【讨论】:

以上是关于AWS Elastic Beanstalk 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上禁止使用 Django 403

AWS Elastic Beanstalk

使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk

Elastic Beanstalk (AWS) 的休眠配置

如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?

AWS 和 Elastic Beanstalk