在两个不同的EC2实例上设置Django和PostgreSQL

时间:2012-11-16 20:54:45

标签: django postgresql amazon-ec2 django-settings pgadmin

Hello StackOverFlowers :)到目前为止,我一直在同一个微EC2实例上运行我的Django后端和我的PostgreSQL数据库。

我已经设置了两个EC2实例,一个用我的django后端,另一个用我的PostgreSQL数据库,我使用pgadminII来管理它。两个实例都使用相同的安全组,并打开所有相同的端口。我已将弹性IP附加到我的Django实例,并将另一个弹性IP附加到我的Postgresql实例。

现在我知道在settings.py中我需要将'HOST'更改为PostgreSQL实例的地址。但我不太清楚该放什么。我是否放置了PostgreSQL实例的弹性IP?

我做了一些研究,许多消息来源说我需要输入PostgreSQL实例的内部服务器IP地址。如果是这种情况,我怎样才能找到内部服务器IP地址并将其输入“主机”?为清楚起见,我复制并粘贴了下面的settings.py代码。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', 
'NAME': 'django_db', 
'USER': 'django_login',
'PASSWORD': 'password', 
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}

感谢您的帮助,如果我不够清楚,请发表评论并告诉我,以便我能为您和其他人更清楚地说明:)

2 个答案:

答案 0 :(得分:8)

AMAZON SUPPORT

所以在David Wolever回复之后,我最终还是和亚马逊的那些人谈话。万一你们中的任何人再次遇到这篇文章。仅使用内部服务器IP是不够的,但它是一个良好的开端。如果您正在为Postgresql实例(最好是Natty Narwhal)运行Ubuntu,请确保编辑pg_hba.conf和postgresql.conf文件。

您通常可以在以下位置找到这两个文件:/etc/postgresql/8.4/main/(pg_hba.conf或postgresql.conf)

请注意,我们在我们的堆栈中使用Postgresql 8.4,它被证明是在我们的测试期间在Natty Narwhal上运行的Postgresql最稳定和最稳定的版本。

对于不同版本的Postgresql(9.1,9.0等..),您可以找到这两个文件的目录与上面列出的不同。确保您知道这些文件的正确目录。

第1步

转到Amazon Management Console并确保两个实例位于同一安全组下。 Postgresql和Django默认使用5432和8000,所以请确保打开这两个端口!

第2步

(在postgresql实例的终端上执行此操作)

sudo vim postgresql.conf

按键盘上的“i”开始进行更改。使用向下箭头键直到遇到

LISTEN_ADDRESSES:'localhost'

删除前面的哈希标记,而不是'localhost',添加postgresql实例的私有IP (你可以在EC2管理控制台上找到私有IP)然后你还必须添加127.0.0.1。

示例:

LISTEN_ADDRESSES:'private ip,127.0.0.1'

请确保用逗号分隔私人IP和本地主机地址,并将其全部保留在一个引号内。

完成更改后,按ESC并按ZZ(两次加盖以保存更改)

第3步

sudo vim pg_hba.conf

使用向下箭头键,直到遇到如下所示的内容:

           Database administrative login by UNIX sockets
  local   all         postgres                          ident

  # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

  # "local" is for Unix domain socket connections only
  local   all         all                               md5
  # IPv4 local connections:
  host    all         all         127.0.0.1/32          trust
  # IPv6 local connections:
  host    all         all         ::1/128               md5
  local   django_db   django_login                      md5
  host    replication postgres    127.0.0.1/32          md5
  host    replication postgres    ::1/128               md5

再次按下键盘上的“i”并按照我上面的方式对其进行更改。

您会注意到在IPv6下,我有django_db和django_login,将其更改为您的postgresql数据库的名称和您分别用于postgresql数据库的用户登录。

完成更改后,按ESC并按ZZ(两次加盖以保存更改)

第4步(差不多完成了Hi5!)

在终端中使用以下命令重新启动postgresql服务器:

sudo /etc/init.d/postgresql restart

恭喜!服务器已启动并运行,但还有最后一步。

第5步

启动你的Django EC2实例,转到你的settings.py并查找:

 DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2', 
 'NAME': 'django_db', 
 'USER': 'django_login',
 'PASSWORD': 'password', 
 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
 'PORT': '', # Set to empty string for default. Not used with sqlite3.
 }

在'HOST':''下,将其更改为'HOST':'无论Postgresql实例的私有IP是什么'

保存更改。打开终端并找到manage.py文件所在的目录。 进入该目录后,运行以下命令: ./ manage.py syncdb

这些将为您在Django中创建的模型创建所有必需的表。恭喜,您已成功在Database实例和Django实例之间创建了一个链接。

如果您有任何疑问,我将非常乐意为您提供帮助!在下面留下评论,我会尽快给你回复! :)

答案 1 :(得分:4)

您的Postgres实例不需要弹性IP。只需使用其内部IP。内部IP可从管理控制台获得,也可以运行ifconfig